MaltParser
MaltParser — инструмент для работы с деревьями зависимостей. Позволяет построить модель по размеченному корпусу и строить деревья для новых данных основываясь на ней. Реализует несколько алгоритмов построения деревьев. По утверждениям авторов "достиг передовых показателей на некоторых языках". Для последней версии существуют готовые модели для английского, французского, шведского и испанского языков. Также существуют модели для русского языка, натренированные на корпусе SynTagRus и доступны для версий 1.5 и 1.7.2.
Модель для версии 1.7.2 (поддерживается также более поздними версиями, включая 1.9.0), подготовленная Мариленой Ди Бари, является результатом переобучения модели, разработанной Сергеем Шаровым для MaltParser версии 1.5. Инструмент распространяется под свободной лицензией.
В ранних версиях MaltParser имеются проблемы с производительностью, основными из которых являются потребление оперативной памяти (исправлено в версии 1.7.2) и быстродействие (решено в версии 1.8, путем добавления нового интерфейса поддерживающего распараллеливание процессов).
Русский язык
Сергей Шаров подготовил всё необходимое для обработки русского языка от голого текста до получения дерева зависимостей с помощью MaltParser-а, попутно описав основные проблемы в работе с русским языком. Более подробно с результатами можно ознакомиться на специальной странице.
Для того чтоб получить у себя готовый к работе набор инструментов, достаточно запустить следующий shell-скрипт, который загрузит и объединит все необходимые инструменты. После чего в папке installation рядом со скриптом будет создана полностью рабочий конвейер по обработке русского языка, пользоваться которым можно как-нибудь так:
$ installation/russian-malt.sh <input-file.txt >output-file
Образ Docker
NLPub поддерживает Docker-образ, содержащий MaltParser (версия 1.5), корректно собранный для обработки русского языка (russian-malt-docker на GitHub).
docker pull nlpub/maltparser
В простейшем случае, можно запустить интерпретатор команд bash
и запускать парсер внутри временного контейнера.
$ docker run --rm -it nlpub/maltparser /bin/bash root@503fa2570005:/malt# echo Данное программное обеспечение работает корректно | ./russian-malt.sh root@503fa2570005:/malt# cat tmpmalttext.parse 1 Данное данный P P P--nsna 3 опред _ _ 2 программное программный A A Afpnsnf 3 опред _ _ 3 обеспечение обеспечение N N Ncnsnn 4 предик _ _ 4 работает работать V V Vmip3s-a-e 0 ROOT _ _ 5 корректно корректно R R R 4 обст _ _
Обертка над MaltParser
Существующие решения поддерживают работоспособность только под Linux (включая докеризацию).
Использование совокупности всех этих разрозненных инструментов и отсутствие кроссплатформенности доставляет одно неудобство. Ввиду чего была разработана обертка над MaltParser на языке Java - MP4RU.
Данное решение агрегирует все этапы разбора - токенизация, морфологическая разметка и построение дерева зависимостей. Базируется на модели подготовленной Мариленой Ди Бари и версии MaltParser 1.9.0. Существует четыре варианта использования данного инструмента:
- MP4RU как docker контейнер
- MP4RU как сервис
- MP4RU как приложение
- MP4RU как библиотека
MP4RU как docker контрейнер
Для загрузки последней версии docker образа из Docker Hub необходимо выполнить следующую команду:
docker pull oxaoo/mp4ru-service
И запустить загруженный mp4ru-service:
docker run -d --name mp4ru-service -p 2000:2000 oxaoo/mp4ru-service
Docker контейнер будет доступен для запросов по адресу http://localhost:2000
.
После чего можно выполнять парсинг текста.
Примеры запроса с помощью curl:
curl -X POST http://localhost:2000/parse -d 'Привет, как дела?'
MP4RU как сервис
Если на локальной машине не установлен docker и нет возможности это сделать, то можно использовать mp4ru как сервис. Для этого необходимо проделать следующую последовательность шагов:
- Склонировать репозиторий
git clone https://github.com/oxaoo/mp4ru.git
- Собрать проект
mvn clean install
- Загрузить файлы ресурсов необходимые для работы инструмента
- Запустить сервис
java -jar mp4ru-service-1.0.0.jar
(будет доступен для запросов по адресуhttp://localhost:2000
)
MP4RU как приложение
Данный способ актуален для одноразового парсинга. Для этого необходимо проделать следующую последовательность шагов, частично совпадающую с предыдущим описанием:
- Склонировать репозиторий
git clone https://github.com/oxaoo/mp4ru.git
- Собрать проект
mvn clean install
- Загрузить файлы ресурсов необходимые для работы инструмента
- Выбрать поддиректорию
mp4ru/mp4ru/
- Запустить приложение, выполнив следующую инструкцию
java -jar mp4ru-1.0.0.jar -cm res/russian-utf8.par -tt res/ -pc res/russian.mco -tf res/text.txt
Результат парсинга будет доступен в файле res/text.txt
.
Для вызова справки, используйте следующую команду java -jar mp4ru-1.0.0.jar -h
MP4RU как библиотека
mp4ru может также использоваться как библиотека. Для этого необходимо:
- Склонировать репозиторий
git clone https://github.com/oxaoo/mp4ru.git
- Выбрать поддиректорию
mp4ru/mp4ru/
- Собрать проект
mvn clean install
. После этого исполняемый файл будет доступен по следующему пути:mp4ru/mp4ru/target/
- Добавить артефакт в локальный репозиторий maven (необходимо скорректировать команду в зависимости от версии):
mvn install:install-file -DgeneratePom=true -Dpackaging=jar -DgroupId=com.github.oxaoo -DartifactId=mp4ru -Dversion=1.0.0 -Dfile=mp4ru-1.0.0.jar
Теперь, артефакт может быть использоваться в проекте, для этого достаточно добавить зависимость на библиотеку в pom:
<dependency> <groupId>com.github.oxaoo</groupId> <artifactId>mp4ru</artifactId> <version>1.0.0</version> </dependency>
В настоящий момент ведутся работы для добавления библиотеки в центральный репозиторий Maven для более простого способа подключения библиотеки в проект.
На странице проекта описана более подробная инструкция по использованию данного инструмента.
Использование MaltParser в коде на Python
Данная статья была создана в рамках учебного задания.
В настоящее время задание завершено и проверено. Данная страница может свободно правиться другими участниками NLPub. |
Для использования mp4ru на Python надо проделать следующую последовательность шагов:
- Установить mp4ru как приложение или запустить скрипт из github-репозитория [1] если у вас debian-like система.
- Взять класс MaltParser из github-репозитория [2]
Как использовать MaltParser:
MaltParser.Parser(path)
— cоздает парсер, где path местоположение директории куда склонировали mp4ru или где запустили скрипт.Parser.parse(filename)
— обрабатывает файл с именем filename относительно директории path, возвращает pandas-овский DataFrame, содержащий вывод парсера.