Skip to content

Latest commit

 

History

History
172 lines (131 loc) · 11.5 KB

README.md

File metadata and controls

172 lines (131 loc) · 11.5 KB

RussianOccupationExtraction

Программа выполняет распознавание названий организации (и профессий) персон из текстов на русском языке.

Общее описание

Для успешной работы программы требуется анализатор mystem, который должен располагаться в каталоге с исполняемым файлом программы.

Также для обрабатываемого текстового файла необходим список размеченных в нём именнованных сущностей, в формате определённом соревнованием factRuEval-2016 (файлы .objects и .spans). Это означает, что вместе с текстовым файлом в кодировке UTF-8 (расширение обязательно .txt) в этом же каталоге должны располагаться файлы .objects и .spans (описание формата файлов приведено ниже), имена которых совпадают с именем текстового файла.

Файл .spans

Формально, каждая строка файла .spans должна иметь следующий вид:

id foo offset length ...

Где:

  • id - уникальный (в рамках файла) идентификатор отрезка текстового файла
  • foo - произвольный текстовый идентификатор, который реально не используется
  • offset - смещение (в символах) отрезка текстового файла
  • length - длина (в символах) отрезка текстового файла
  • ... - любая (в том числе пустая) последовательность символов, до конца строки

Файл .objects

Формально, каждая строка файла .objects должна иметь следующий вид:

foo type span_ids ...

Где:

  • id - foo произвольный числовой идентификатор, который реально не используется
  • type - название именованной сущности, допустимые значения (с учётом регистра): Person, Location, Org, LocOrg
  • span_ids - последовательность числовых идентификаторов отрезков текстового файла (из .spans), составляющих именованную сущность
  • ... - любая (в том числе пустая) последовательность символов, до конца строки

Примеры файлов .spans и .objects можно найти в репозитории соревнования factRuEval-2016.

Файл словаря

Распознавание осуществляется на основе заданных пользователем шаблонов и словарей.

Словарь представляет собой обычный текстовый файл в кодировке UTF-8, в каждой строке которого записана последовательность слов (допускаются последовательности из одного слова) на которую можно ссылаться в шаблоне. Также стоит отметить, что все слова в словаре должны быть записаны в начальной форме в нижнем регистре. Для примера рассмотрим словарь SampleDictionary.txt содержаший всего три словосочетания (слова): Консультант, Менеджер, Менеджер по работе с клиентами.

Файл SampleDictionary.txt:

консультант
менеджер
менеджер по работа с клиент

Пример файла словаря можно найти в данном репозитории: data/ListOccupations.txt.

Файл шаблонов

Файл шаблонов представляет собой обычный текстовый файл в кодировке UTF-8, в каждой строке которого записан шаблон распознавания. В шаблоне допустимо ссылаться на словарные словосочетания (слова) с помощью конструкции @1, @2 и т.д., где номер после символа @ идёт номер словаря. Словари нумеруются с 1 в том же порядке, в котором они расположены в аргументах командной строки програмы. Также в шаблоне используются конструкции $P, $O и $L, обозначающие именованную сущность соотвественно персону, организацию и место. Для упрощения записи можно использовать опциональный элемент и альтернативу, обозначаемые одинаково с помощью квадратных скобок:

слово [необязательное_слово] [слово_1|слово_2|слово_3] [необязательное_слово_1|необязательное_слово_2|]

По умолчанию считается, что конструкция $P задаёт поле факта Who, а $O или $L задаёт поле Where. Поле Job по умолчанию остаётся незаполненным. Для изменения поведения по умолчанию используются суффиксы элемента шаблона: ~, ~who, ~where и job. Суффикс будет удалён при распознавании, однако, он позволяет указать поле факта в которое будет записан результат распознавания данного элемента шаблона. Указание первого суффикса () означает, что данный элемент не будет использован при заполнении полей факта. В случае, если одному полю факта ставится в соответствие несколько элементов шаблона требуется, чтобы эти элементы шли подряд. Также заметим, что корректный шаблон как минимум должен задавать поля факта Who и Where.

Пример файла шаблонов можно найти в данном репозитории: data/Templates.txt.

Описание результата работы программы

Результатом работы программы является текстовый файл в кодировке UTF-8 с расширением .task3, имя которого совпадает с именем исходного текстового файла. Этот файл содержит описание распознанных в тексте фактов в формате пригодном для автоматической оценки точности, полноты и F-меры компаратором, предоставленном в репозитории соревнования factRuEval-2016.

Данный файл содержит последовательное описание фактов в виде:

Occupation
who:имя персоны
where:название организации
job:профессия (данное поле может быть опущено)

Поля фактов содержат ненормализованный текст (такой как в исходном текстовом файле).

В качестве примера рассмотрим файл book_100.task3:

Occupation
who:Юрия Лужкова
where:Москвы
job:мэра

Occupation
who:Бориса Громова
where:подмосковного

Occupation
who:Михаил Вельмакин
where:московского отделения движения «Солидарность
job:сопредседатель

Occupation
who:Лев Пономарев
where:движения «Левый фронт
job:координатор

Сборка программы

  • В операционноых системах семейства Windows достаточно собрать решение для Visual Studio 2015 (RussianOccupationExtraction.sln).
  • В операционноых системах семейства Unix/Linux/Mac OS достаточно выполнить скрипт сборки:
$ ./build.sh

Запуск

$ ./occup text templates [dictionary]...
  • text - имя текстового файла (без расширения, кодировка UTF-8)
  • templates - имя файла шаблонов (кодировка UTF-8)
  • [dictionary]... (опционально) - последовательность имён файлов словарей (кодировка UTF-8)

Пример

Рассмотрим работу программы на примере текстового файла Sample_001.txt.

Файл Sample_001.txt:

Антон Тодуа - студент МГУ им. Ломоносова.

Файл Sample_001.spans:

1 _ 0 5    # Антон
2 _ 6 5    # Тодуа
3 _ 22 3   # МГУ
4 _ 26 14  # им. Ломоносова

Файл Sample_001.objects:

1 Person 1 2  # Антон Тодуа
2 Org    3 4  # МГУ им. Ломоносова

Файл OccupationsList.txt (список профессий):

студент
бакалавр
магистр

Файл Templates.txt (шаблоны извлечения):

$P - @1~job $O

Запуск программы:

$ ./occup Sample_001 Templates.txt OccupationsList.txt

В результате работы программы в каталоге с файлами Sample_001.txt, Sample_001.spans и Sample_001.objects появится файл Sample_001.task3:

Occupation
who:Антон Тодуа
where:МГУ им. Ломоносова
job:студент

Результат тестирования

Коллекция Точность Полнота F-мера Распознано фактов (всего)
devset 0.8994 0.4480 0.5981 93 (180)
testset 0.8466 0.4029 0.5460 163 (335)