Skip to content

Context labels workplan

Andrew Krizhanovsky edited this page Jun 4, 2015 · 1 revision

(This page is a coordination of work devoted to an extraction of Context Labels from English Wiktionary and Russian Wiktionary.)

Цель

Цель работы - добавить в парсер информацию о всех словарных пометах Английского Викисловаря (сокращённо enwikt), Русского Викисловаря (ruwikt) и указать какие пары идентичны в этих двух викисловарях.

Этапы

Первый этап. Обходим словарные пометы Английского Викисловаря (1001 ночь помета), сверяем с пометами Русского Викисловаря (359 помет) и заносим данные в код парсера.

Второй этап. Обходим словарные пометы Русского Викисловаря (359 помет), смотрим - какие из них остались не привязаны к пометам Английского Викисловаря и

  • либо находим к какой помете Английского Викисловаря привязать,
  • либо создаём под неё новую помету в файле LabelEn, к которой и привязываем эту русскую сиротинку.

Что нужно скачать / установить

  1. JDK

  2. Редактор NetBeans. Нужна версия "Java SE".

  3. SVN-клиент TortoiseSVN.

  4. Как пишут гугловцы здесь http://code.google.com/p/wikokit/source/checkout - выполните из svn команду, чтобы получить исходный код:

svn checkout http://wikokit.googlecode.com/svn/trunk/ wikokit-read-only
  1. Откройте из NetBeans скачанный проект "common_wiki" и откройте в нём файлы, с которыми будете работать:

Чтобы открыть нужный файл, нажмите в NetBeans комбинацию клавиш Ctrl+O и напишите название файла, например LabelEn. Редактор NetBeans выполнит поиск по всем файлам открытых проектов.

Пример конкретной работы (первый этап)

  1. Открываю файл LabelEn.java, нахожу строку со своей фамилией:
// period 15 Krizhanovsky

Это значит, мне нужно обработать 15 словарных помет категории "period" (время).

  1. Открываю страницу enwikt Category:Context_labels, нахожу подкатегорию словарных помет со словом "period", это Category:Period context labels

  2. Беру последовательно пометы с этой страницы и в алфавитном порядке добавляю в файл LabelEn после

// period 15 Krizhanovsky

Пример 1 (первый этап). "neologism"

Итак, взяли из Английского Викисловаря помету Template:neologism ("неологизм"). Добавляем код в LabelEn:

public static final Label neologism = new LabelEn("neologism", "neologism", LabelCategory.period);

Первый и второй параметры - короткое и длинное имя пометы (здесь совпадают), третий параметр - категория ("period"), к которой относится помета.

Теперь заглядываем в Викисловарь:Условные сокращения и проверяем - есть ли в Русском Викисловаре аналог?

Да, есть:

  • неол. — неологизм, есть Шаблон:неол. (краткое название), полное название "неологизм". Добавляю в LabelRu.java строку (в алфавитном порядке, в раздел "period"):
public static final Label neologism = new LabelRu("неол.", "неологизм", LabelEn.neologism);

Имя переменной (neologism) совпадает с имененем соответствующей переменной в LabelEn. Первый и второй параметры - краткое и полное название пометы. Третий параметр - имя переменной в LabelEn, к которой привязывается эта переменная.

Пример 2 (первый этап). "ru-pre-reform"

Берём следующую помету из категории "period". Шаблон Template:ru-pre-reform указывает на устаревшее значение слова. Т.е. это синоним для другой пометы: "obsolete". Поэтому добавляем в LabelEn:

public static final Label obsolete = new LabelEn("obsolete", "obsolete", LabelCategory.period);
public static final Label ru_pre_reform = LabelEn.addNonUniqueShortName(obsolete, "ru-pre-reform");

Во второй строке помета ru_pre_reform как синоним ссылается на помету в первой строке "obsolete". У функции addNonUniqueShortName второй параметр "ru-pre-reform" - это имя шаблона, который будет извлекать парсер.

Для синонимов (т.е. помета ru_pre_reform, добавленная методом addNonUniqueShortName) не нужно писать перевод в LabelRu. Для основных помет (основная т.е. нет синонимов, например помета "obsolete") в LabelRu записываем такую строку:

public static final Label obsolete = new LabelRu("устар.", "устаревшее", LabelEn.obsolete);

Пример 3 (первый этап). "Ecclesiastical Latin"

Нашёл пояснение - что это значит - в Английской Википедии: http://en.wikipedia.org/wiki/Ecclesiastical_Latin

В условных сокращениях Русского Викисловаря ничего похожего не вижу, поэтому в файл LabelRu ничего не пишу, пишу только в LabelEn:

public static final Label ecclesiastical_latin = new LabelEn("Ecclesiastical Latin", "Ecclesiastical Latin", LabelCategory.period);

Имя помете даю маленькими буквами, слова в имени объединяю подчёркиванием "ecclesiastical_latin".

Последовательность работ

  1. Крижановские
  2. Румянцев (до 16 мая)
  3. Чирковы (до 1 июня)
  4. Огийко (до 15 июня)
  5. Головин (до 1 июля)

Подсказки

Название шаблона

Не обязательно шаблон словарной пометы будет называться также, как его видит пользователь. Например в условных сокращениях указана помета "мн. ч.", но шаблона "мн. ч." в ruwikt нет, зато есть Шаблон:мн.. Т.е. для большинства помет на странице "Викисловарь:Условные сокращения" есть соответствующие шаблоны, которые и нужно знать парсеру для успешного их распознавания. В случае "мн. ч." нужно в LabelRu использовать функцию для указания синонимов словарных помет:

LabelRu.addNonUniqueShortName // см. примеры использования в файле LabelRu

Вывод: перед добавлением первого параметра (например "неол." в следующей строке) в файл LabelRu - убедитесь, что в Русском Викисловаре существует шаблон шаблон:неол.. И если такая страница есть, то пишите:

public static final Label neologism = new LabelRu("неол.", "неологизм", LabelEn.neologism);

Повтор шаблона

Может оказаться, что шаблон, который вы добавляете, уже есть в файле LabelEn, т.е. его добавили раньше и его добавлять ещё раз не нужно.

Это может случиться, если шаблон принадлежит сразу нескольким категориям. Например шаблон:Late Latin принадлежит двум категориям:

  • Context labels
  • Period context labels

Если встречается шаблон с несколькими категориями, то нужно подумать, какую из двух категорий, т.е. какую из двух строчек, оставить:

public static final Label Late_Latin = new LabelEn("Late Latin", "Late Latin", LabelCategory.empty);
public static final Label Late_Latin = new LabelEn("Late Latin", "Late Latin", LabelCategory.period);

В данном случае выбрать легко - категория времени (period) предпочтительнее, чем пустая категория (empty), которая ничего не говорит о словарной помете. В других случаях придётся думать и выбирать более подходящую категорию для словарной пометы, т.к. у пометы мы можем указать только одну категорию.

Разное

Не забыть указать синонимы: "мн. ч." и "мн.ч." для "мн.".

Синоним аббр. к сокр.

Литература

В наличие есть книга в бумажном и электронном виде, которая поможет в переводе помет: