Программа выполняет распознавание названий организации (и профессий) персон из текстов на русском языке.
Для успешной работы программы требуется анализатор mystem, который должен располагаться в каталоге с исполняемым файлом программы.
Также для обрабатываемого текстового файла необходим список размеченных в нём именнованных сущностей, в формате определённом соревнованием factRuEval-2016 (файлы .objects и .spans). Это означает, что вместе с текстовым файлом в кодировке UTF-8 (расширение обязательно .txt) в этом же каталоге должны располагаться файлы .objects и .spans (описание формата файлов приведено ниже), имена которых совпадают с именем текстового файла.
Формально, каждая строка файла .spans должна иметь следующий вид:
id foo offset length ...
Где:
- id - уникальный (в рамках файла) идентификатор отрезка текстового файла
- foo - произвольный текстовый идентификатор, который реально не используется
- offset - смещение (в символах) отрезка текстового файла
- length - длина (в символах) отрезка текстового файла
- ... - любая (в том числе пустая) последовательность символов, до конца строки
Формально, каждая строка файла .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) |