Interested Article - Парсер фамилии

Документация
local p = {} local asianFamily = "" .. -- Китайцынет фамилии "Ай Ань Ао Ба Бай Байли Бань Бао Бе Би Бин Бо Бу Бэй Бэнь Бянь Ван Вань Во Вэй " .. "Вэйшэн Вэн Вэнь Вэньжэнь Гань Гао Го Гоу Гу Гуан Гуань Гуй Гулян Гун Гунлян " .. "Гунси Гунсунь Гунъе Гунъян Гэ Гэн Да Дай Дан Ди Дин Диу Доу Ду Дуань Дуаньгань " .. "Дуаньму Дун Дунго Дунмэнь Дунфан Дэн Дяо Е Жансы Жань Жао Жу Жуань Жуй Жун " .. "Жэнь И Ин Инь Кан Кань Коу Куай Куан Куй Кун Кэ Лай Лан Лань Лао Ли Лин " .. "Линху Линь Ло Лоу Лу Луань Лун Лэй Лэн Лю Люй Люйцю Лян Лянцю Лянь Ляо Ма " .. "Мань Мао Ми Мин Минь Мо Моу Моци Му Мужун Мэй Мэн Мяо На Най Наньгун Наньмэнь " .. "Не Ни Нин Нун Ню Нянь Оу Оуян Пан Пань Пи Пин Пу Пуян Пэй Пэн Сан Се Си Симэнь " .. "Син Синь Со Су Сун Сы Сыкоу Сыкун Сыма Сыту Сюань Сюаньюань Сюй Сюн Сюнь Сюэ " .. "Ся Сян Сянь Сяньюй Сяо Сяхоу Тай Тайшу Тан Тань Таньтай Тао Тоба Тоу Ту Тун " .. "Тэн Тянь У Ума Фа Фан Фань Фу Фэй Фэн Ха Хай Хан Хань Хао Хо Хоу Ху Хуа Хуай " .. "Хуан Хуанфу Хуань Хун Хуэй Хуянь Хэ Хэлянь Хэн Цай Цан Цао Цзай Цзайфу Цзан " .. "Цзань Цзи Цзин Цзинь Цзо Цзоу Цзоцю Цзу Цзун Цзунчжэн Цзы Цзыцзюй Цзэн Цзюй " .. "Цзя Цзягу Цзян Цзянь Цзяо Ци Цигуань Цидяо Цинь Цуй Цун Цэнь Цю Цюань Цюй " .. "Цюэ Цян Цянь Цяо Чай Чан Чаньюй Чао Чжа Чжай Чжан Чжансунь Чжань Чжао Чжи " .. "Чжо Чжоу Чжу Чжуан Чжуаньсунь Чжугэ Чжун Чжунли Чжунсунь Чжэн Чжэнь Чи Чу " .. "Чун Чуньюй Чэ Чэн Чэнь Ша Шан Шангуань Шань Шао Ши Шоу Шу Шуай Шуан Шуй Шэ " .. "Шэн Шэнь Шэньту Э Ю Юань Юй Юйвэнь Юйчи Юн Юнь Юэ Юэчжэн Ян Яншэ Янь Яо" .. -- Корейские "Ё Ём Ён Ан Вон Гон Джим Джо Жуй И Им Кан Квак Квон Ки Ким Ко Кон Ку Кусан Ли " .. "Лим Ма Мо Мун Нам Но О Ом Пак Пак-Паан Пан Пон Пэ Пэк Пён Ри Ро Рю Са Сим " .. "Син Со Сок Соль Сон Тан Тань Тэ Тё Х Ха Хан Хван Хо Хон Хён Цой Чан Чжон Чи " .. "Чин Чо Чой Чон Чу Чун Чха Чхан Чхве Чхин Ю Юн Ян" .. -- Вьетнам "Ан Бао Буй Бхам Ван Во Ву Вьет Данг Динь До Донг Зуи Зук Зыонг Зя Кхай Кхук " .. " Кьен Лак Лам Ле Ли Ма Мадам Май Мак Минь Мэгги Нго Нгуен Нонг Он Па Та Танг " .. " Тила То Тон Туэ Тхай Тхань Тхить Тхьеу Тхюи Ты Тэйшон Фам Фан Фунг Фыонг Ха " .. " Хам Хо Хоанг Хонг-банг Хьеп Хюинь Цуй Чан Чинь Чынг Чыонг Чьеу" local function getAllWords(str) local result = {} local i = 1 for item in str:gmatch('%S+') do result[i] = item i = i + 1 end return result end local function getLastWord(str) local arr = getAllWords(str) return arr[#arr] end local function getFirstWord(str) return getAllWords(str)[1] end local function familyIsEmpty(family) family = family or '' if (string.len(family) == 0) then return true else return false end end local function isArabic(str) local tags = {'Ибн'} local nameArr = getAllWords(str) for i, name in ipairs(nameArr) do for j, tag in ipairs(tags) do if (name == tag) then return true end end end end local function isAsian(str) if asianFamily:find(getFirstWord(str)) ~= nil then return true else return false end end local function isEuropeanTitlePage(str) str = str or '' if (string.len(str) == 0) then return false end if (string.find(str , ',') ~= nil) then return true else return false end end local function templatePrint(str, frame) local titleGoodName = mw.title.new(str .. ' (фамилия)') local titleStandart = mw.title.new(str .. ' (значения)') local titleClassic = mw.title.new(str) if titleGoodName == nil then if titleStandart == nil then if titleClassic == nil then return 'там пусто' end end end if titleGoodName.exists and not titleGoodName.isRedirect then return frame:expandTemplate{ title = 'Однофамильцы', args = {str .. ' (фамилия)|' .. str} } end if titleStandart.exists and not titleStandart.isRedirect then return frame:expandTemplate{ title = 'Однофамильцы', args = {str .. ' (значения)|' .. str} } end if titleClassic.exists and not titleClassic.isRedirect then return frame:expandTemplate{ title = 'Однофамильцы', args = {str} } else return '[[Категория:Википедия:Статьи с отсутствующей страницей однофамильцев]]' end end function p.display(frame) local name = frame.args['имя'] or '' local family = frame.args['фамилия'] or '' local pageName = frame.args['название'] or '' if (familyIsEmpty(family) == false) then -- Нужен отдельный обработчик, хз почему --return templatePrint(family, frame) return '[[Категория:Статьи, использующие парсер фамилии]]' else if (string.find(name, ' ') ~= nil) then if (isAsian(name)) then return templatePrint(getFirstWord(name), frame) end if (isArabic(name)) then return '[[Категория:Персоны с арабским именем]]' end if (isEuropeanTitlePage(pageName)) then return templatePrint(getLastWord(name), frame) else return '' end else return '' end end end return p 

Same as Парсер фамилии