Skip to content

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

License

Notifications You must be signed in to change notification settings

al-pacino/RussianOccupationExtraction

Repository files navigation

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)

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published