技术细节 编辑

  • 为每行赋权值,然后对被赋权值的行排序,调整他们的相对位置。赋值为0的行不动
  • 如果Image被包含在赋值行内,则赋予值1,否则赋予值0
  • 手动处理包含多个ru-prnc,或多个ru-nm的词条
  • 已通过grep dump保证每行只有一种ru-*,且被处理的模板均在一行内

代码 编辑

from prelude import  *
from botaccount import *

zh = mwc.Site('zh.wiktionary.org', clients_useragent = UA)
en = mwc.Site('en.wiktionary.org', clients_useragent = UA)
zh.login(UN, PWD)
en.login(UN, PWD)
SLP = 0

pn = ['Австрия', 'Азербайджан', 'Азия', 'Албания', 'Алжир', 'Англия', 'Аргентина', 'Африка', 'Беларусь', 'Бельгия', 'Болгария', 'Боливия', 'Британия', 'Гамбия', 'Германия', 'Греция', 'Грузия', 'Европа', 'Индия', 'Индонезия', 'Италия', 'Латвия', 'Малайзия', 'Норвегия', 'Океания', 'Украина', 'Франция', 'Эстония', 'Югославия', 'Япония', 'абляция', 'абразия', 'абсолютизация', 'абсорбирование', 'абсорбция', 'абстракция', 'авария', 'август', 'авиадивизия', 'авиакомпания', 'авиалиния', 'авиаметеорология', 'авиамодель', 'авиамотор', 'авиапредприятие', 'авиация', 'автаркия', 'автобиография', 'автогамия', 'автоинспекция', 'автоирония', 'автолитография', 'автоматизация', 'автометрия', 'автомобилизация', 'автомобиль', 'автомобиль-амфибия', 'автономия', 'автостанция', 'автотипия', 'автотомия', 'автоэмиссия', 'агглютинация', 'агентство', 'агитация', 'агломерация', 'агнозия', 'агония', 'агрегация', 'агрессия', 'агробиология', 'агролесомелиорация', 'агромелиорация', 'агрометеорология', 'агрономия', 'агрохимия', 'адаптация', 'адгезия', 'адекватный', 'администрация', 'адмиралтейство', 'адресация', 'адсорбция', 'академия', 'аккумулятор', 'актинизм', 'алкализация', 'алкоголизация', 'алкоголизм', 'аллегория', 'аллергия', 'альпинизм', 'алюминотермия', 'амбиция', 'американизм', 'амнезия', 'аморфизм', 'аналогия', 'ананас', 'анархизм', 'анархия', 'анатомия', 'анкетирование', 'аннексия', 'аннотация', 'аномалия', 'антагонизм', 'антиномия', 'апостасия', 'апрель', 'арбуз', 'аристократия', 'армия', 'артель', 'астрономия', 'аэропорт', 'банан', 'банка', 'баскетбол', 'бдительность', 'бедствие', 'беженец', 'безвредность', 'безопасность', 'безопасный', 'безумие', 'белорусский', 'белый', 'бенгальский', 'бестактность', 'библиография', 'библия', 'биологический', 'биология', 'биохимия', 'благосостояние', 'блокирование', 'бодрствовать', 'болезнь', 'болото', 'больной', 'болячка', 'боязнь', 'британский', 'брожение', 'брокколи', 'буквально', 'бумага', 'важность', 'вакцинация', 'ванна', 'введение', 'вежливость', 'велосипед', 'вера', 'верить', 'вероисповедание', 'вероятность', 'версия', 'вес', 'вечность', 'взгляд', 'видимость', 'вилка', 'виноград', 'винтовка', 'вишня', 'включать', 'влажность', 'власть', 'влияние', 'внимание', 'возвращение', 'возглавить', 'воздух', 'возможность', 'возобновление', 'возраст', 'война', 'вопрос', 'воскресенье', 'враждебный', 'вторник', 'вулканизация', 'высказывание', 'выявление', 'вязание', 'гадание', 'газета', 'газификация', 'гарантия', 'гармонизация', 'гармония', 'гастрономия', 'гвардия', 'гегемония', 'география', 'геология', 'геометрия', 'геохимия', 'германский', 'гидромотор', 'гол', 'голосование', 'голубой', 'гонка', 'гордость', 'гостеприимство', 'гравитация', 'град', 'градация', 'граница', 'грация', 'гром', 'давление', 'далее', 'дарование', 'движение', 'двоение', 'двуличие', 'девиация', 'деградация', 'дезинформация', 'действительность', 'декабрь', 'деклинация', 'декорация', 'деление', 'десятилетие', 'деятельность', 'дипломатия', 'дождь', 'должность', 'дополнение', 'дорога', 'доход', 'дробление', 'дыня', 'египтология', 'единение', 'единичность', 'единогласие', 'жевание', 'желание', 'женщина', 'жестокость', 'жестчение', 'жирование', 'журнал', 'заболевание', 'завершение', 'завещание', 'завтра', 'заключение', 'закон', 'замечательный', 'замещение', 'защита', 'звание', 'здоровый', 'зелёный', 'земля', 'злобность', 'значение', 'золото', 'зоология', 'зрение', 'известие', 'извинение', 'издание', 'изменение', 'изношенность', 'изображение', 'израсходование', 'изучать', 'импульс', 'индонезийский', 'инициирование', 'иностранец', 'иностранный', 'интеграция', 'интонация', 'инфекция', 'информатика', 'информация', 'ирригация', 'искажение', 'искание', 'исключение', 'искусство', 'испанский', 'исполнение', 'использование', 'истинность', 'история', 'итальянский', 'июль', 'июнь', 'камера', 'капитализм', 'кара', 'картофель', 'катастрофа', 'категория', 'квалификация', 'классификация', 'книга', 'козёл', 'кокос', 'колбаса', 'колесо', 'комиссия', 'комитет', 'комментарий', 'комментировать', 'коммунизм', 'комната', 'компания', 'компенсация', 'компьютер', 'конкуренция', 'конституция', 'конференция', 'конфиденциальность', 'корейский', 'корица', 'кормить', 'короткий', 'коррупция', 'кофе', 'кошка', 'крайне', 'краткий', 'креветка', 'ксенофобия', 'культура', 'курение', 'курица', 'лаборатория', 'лес', 'лимон', 'лицемерие', 'лицензия', 'личность', 'логика', 'ложка', 'локоть', 'любой', 'май', 'малый', 'манго', 'мантия', 'март', 'математика', 'медицина', 'международный', 'мера', 'мероприятие', 'месть', 'методика', 'милость', 'мнение', 'модель', 'морковь', 'морфология', 'морфонология', 'мост', 'мотор', 'мощность', 'мужчина', 'музыка', 'музыкальный', 'мыло', 'наблюдение', 'навигация', 'название', 'наилучший', 'нападение', 'наполнение', 'нарушение', 'население', 'настроение', 'национализм', 'невежество', 'неграмотность', 'недвижимость', 'недоверие', 'нежелательный', 'независимость', 'независимый', 'немецкий', 'необходимость', 'нетерпение', 'неудовлетворённость', 'неустойчивый', 'нефть', 'новость', 'нож', 'ночь', 'ноябрь', 'обеспечение', 'обида', 'обман', 'обновление', 'обозрение', 'образ', 'образование', 'обслуживание', 'обсуждение', 'обувь', 'обучать', 'общество', 'обычный', 'огромный', 'ожидание', 'окончание', 'октябрь', 'опасение', 'опасность', 'опасный', 'операция', 'описание', 'оппозиция', 'оптимизация', 'оптимизм', 'организация', 'оружие', 'осень', 'основание', 'особенность', 'остановить', 'ответственность', 'отдыхать', 'отель', 'открытие', 'отношение', 'отсутствие', 'падение', 'памятник', 'память', 'партия', 'перемирие', 'перец', 'петиция', 'пицца', 'пластмасса', 'платье', 'площадь', 'победитель', 'поведение', 'повреждение', 'поиск', 'политический', 'полиция', 'половой', 'получать', 'понедельник', 'понятие', 'поработать', 'порядок', 'послание', 'последний', 'появление', 'правда', 'правительство', 'правление', 'право', 'праздник', 'представление', 'предупреждение', 'преследование', 'пресса', 'преступление', 'преступность', 'претензия', 'преувеличение', 'придумать', 'признательность', 'приключение', 'примерно', 'принятие', 'приобретение', 'причина', 'проведение', 'программирование', 'продажа', 'проект', 'производительность', 'произношение', 'происшествие', 'проклятие', 'прокурор', 'проникновение', 'пропорция', 'просветление', 'простой', 'протекция', 'противостояние', 'профанация', 'профессия', 'проявлять', 'психология', 'публикация', 'пустыня', 'пятница', 'работа', 'работать', 'рабство', 'радио', 'развитие', 'разделение', 'различие', 'размельчение', 'разочарование', 'разрешение', 'разрушение', 'разрыв', 'ракета', 'расизм', 'рассказ', 'расследование', 'растение', 'реальный', 'революция', 'регистрация', 'реституция', 'решение', 'решётка', 'рождение', 'русский', 'рыба', 'самолёт', 'самооборона', 'самый', 'санкция', 'свет', 'свидетель', 'свитер', 'сгибание', 'сентябрь', 'серый', 'сестра', 'сигарета', 'сила', 'синий', 'ситуация', 'сияние', 'склонение', 'скорость', 'скрипка', 'слабый', 'следствие', 'слон', 'смелость', 'снег', 'снова', 'собака', 'событие', 'совокупность', 'совпадение', 'согласно', 'соглашение', 'содержание', 'соединение', 'создание', 'солидарность', 'солнце', 'соль', 'сообщение', 'сооружение', 'сопротивление', 'состояние', 'сотворение', 'социализм', 'сочетание', 'союзник', 'спагетти', 'способность', 'среда', 'стабильность', 'стандартизация', 'ствол', 'стекло', 'стихотворение', 'столица', 'страна', 'страница', 'страхование', 'стул', 'суббота', 'суверенный', 'суждение', 'съезд', 'тайский', 'такси', 'тактика', 'телевидение', 'телефон', 'тело', 'тема', 'температура', 'теория', 'терапия', 'терминология', 'территория', 'технология', 'тишина', 'ткань', 'трава', 'трагедия', 'традиция', 'троцкизм', 'труба', 'трудность', 'тупой', 'туфля', 'тюрьма', 'тяжёлый', 'уважение', 'уведомление', 'угадать', 'угроза', 'удивительный', 'умозаключение', 'уничтожение', 'употребление', 'управление', 'ускорение', 'условие', 'установление', 'утка', 'утро', 'учреждение', 'фашизм', 'февраль', 'федерация', 'фехтование', 'физический', 'фотография', 'французский', 'функция', 'футбол', 'хартия', 'химия', 'хранение', 'царь', 'цель', 'часть', 'честность', 'честь', 'четверг', 'чёрный', 'шведский', 'шмель', 'шпинат', 'щавель', 'эволюция', 'экономика', 'эксперимент', 'энергия', 'энтузиазм', 'энциклопедия', 'эпизод', 'эстонский', 'юрисдикция', 'яблоко', 'язык', 'язь', 'январь', 'янтарь', 'японский', 'яркий', 'ячмень', 'ящик']
n = len(pn)
txtf = [zh.Pages[p].text() for p in pn]
txtfl = [t.split('\n') for t in txtf]
w = {'ru-IPA': 0, 'ru-nou': 0, 'ru-prn': 2, 'ru-nm': 3, 'ru-nm-': 5, 'ru-aj': 6, 'ru-aj-': 8, 'ru-vb': 9, 'ru-vb-': 11, 'ru-av': 12, 'ru-cat': 15}
txtwl = [list() for i in range(n)]
txtpl = [list() for i in range(n)]
def process():
    if 'ru-nm-dk' in txtf[i]:
        return
    if 'ru-n-' in txtf[i]:
        return
    if txtf[i].count('ru-prnc') > 1:
        return
    last = 0
    for j, s in enumerate(txtfl[i]):
        if s.startswith('=='):
            cur = 0
        elif 'ru-pro' in s:
            cur = 0
        elif m := re.search(r'\{\{(ru-[^{}|]*)', s):
            cur = w[m[1][:6]]
        elif ('[[Image:' in s or '[[Files:' in s) and last:
            cur = 1
        elif last in [3, 6, 9, 12]:
            cur = last
        else:
            cur = 0
        txtwl[i].append(cur)
        if cur != 0:
            txtpl[i].append((cur, j, s))
        last = cur

for i in range(n):
    process()

txtpls = [sorted(l, key=operator.itemgetter(0)) for l in txtpl]
for i in range(n):
    for k in range(len(txtpl[i])):
        txtfl[i][txtpl[i][k][1]] = txtpls[i][k][2]

fail = []
def process1():
    if 'ru-nm-dk' in txtf[i]:
        return i
    if 'ru-n-' in txtf[i]:
        return i
    if txtf[i].count('ru-prnc') > 1:
        return i
    tryedit(zh.Pages[pn[i]],'\n'.join(txtfl[i]), '[[User:CrowleyBot/task/18|重新排列涉ru-prnc俄语条目模板]],处理图片位置')
    return False

for i in range(n):
    if process1():
        fail.append(i)