MaltParser

Материал из NLPub

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 как сервис. Для этого необходимо проделать следующую последовательность шагов:

  1. Склонировать репозиторий git clone https://github.com/oxaoo/mp4ru.git
  2. Собрать проект mvn clean install
  3. Загрузить файлы ресурсов необходимые для работы инструмента
  4. Запустить сервис java -jar mp4ru-service-1.0.0.jar (будет доступен для запросов по адресу http://localhost:2000)

MP4RU как приложение

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

  1. Склонировать репозиторий git clone https://github.com/oxaoo/mp4ru.git
  2. Собрать проект mvn clean install
  3. Загрузить файлы ресурсов необходимые для работы инструмента
  4. Выбрать поддиректорию mp4ru/mp4ru/
  5. Запустить приложение, выполнив следующую инструкцию 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 может также использоваться как библиотека. Для этого необходимо:

  1. Склонировать репозиторий git clone https://github.com/oxaoo/mp4ru.git
  2. Выбрать поддиректорию mp4ru/mp4ru/
  3. Собрать проект mvn clean install. После этого исполняемый файл будет доступен по следующему пути: mp4ru/mp4ru/target/
  4. Добавить артефакт в локальный репозиторий 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

Данная статья была создана в рамках учебного задания.
Студент: Участник:Андрей Юрко
Преподаватель: Антон Алексеев
Срок: 31 мая 2022

В настоящее время задание завершено и проверено. Данная страница может свободно правиться другими участниками NLPub.


Для использования mp4ru на Python надо проделать следующую последовательность шагов:

  1. Установить mp4ru как приложение или запустить скрипт из github-репозитория [1] если у вас debian-like система.
  2. Взять класс MaltParser из github-репозитория [2]

Как использовать MaltParser:

  1. MaltParser.Parser(path) — cоздает парсер, где path местоположение директории куда склонировали mp4ru или где запустили скрипт.
  2. Parser.parse(filename) — обрабатывает файл с именем filename относительно директории path, возвращает pandas-овский DataFrame, содержащий вывод парсера.

Ссылки