Link Grammar Parser

Материал из NLPub
(перенаправлено с «Link Parser»)
Перейти к: навигация, поиск

Link Grammar Parser — синтаксический анализатор на основе грамматики связей. Описание формата данных и принципа работы анализатора приведено в материалах, указанных на сайте.

Доступность

Анализатор реализован в виде программы и библиотеки на языке Си и доступен на условиях лицензии BSD. Благодаря своей открытости часто используется в различных свободных проектах — от дистрибутивов GNU/Linux до текстового редактора AbiWord. В дистрибутивах поставляется вместе с необходимыми словарями.

Несмотря на отсутствие поддержки русского языка в официальной версии, существует адаптация под названием Link Grammar for Russian[1]. Данная адаптация построена на основе устаревшей версии анализатора и использует вспомогательные утилиты на языке Perl для подготовки словаря. Это несколько затрудняет интеграцию с существующим программным обеспечением и несовместимо с официальной версией программы.

Установка

Такие дистрибутивы системы GNU/Linux, как Fedora, Debian и ArchLinux, имеют необходимый пакет в репозиториях.

Fedora

Для инсталляции анализатора средствами дистрибутива Fedora достаточно установить пакет link-grammar. Если требуется работа с анализатором как с разделяемой библиотекой, то все необходимые файлы имеются в пакете link-grammar-devel

Использование

Командная строка

Интерфейс командной строки Link Grammar доступен при помощи команды link-parser

Для работы анализатора требуются специальные словари. Как правило, при установке устанавливается и используется по умолчанию словарь английского языка. Путь к нужному словарю или идентификатор языка можно указать отдельным аргументом. Например: link-parser de запустит анализатор в интерактивном режиме с загруженным словарём немецкого языка.

Важно помнить, что анализатор работает с отдельными предложениями.

% link-parser                               
link-grammar: Info: Dictionary found at /usr/share/link-grammar/en/4.0.dict
link-grammar: Info: Dictionary version 4.7.4.
link-grammar: Info: Library version link-grammar-4.7.4. Enter "!help" for help.
linkparser> We don't need no education.
Found 8 linkages (8 had no P.P. violations)
	Linkage 1, cost vector = (UNUSED=0 DIS=0 FAT=0 AND=0 LEN=6)

    +----------------------Xp---------------------+
    |                 +---------Ou--------+       |
    +--Wd--+-Sp+--I*d-+       +----Dmu----+       |
    |      |   |      |       |           |       |
LEFT-WALL we don't need.v no.misc-d education.n-u . 

linkparser> !quit
link-grammar: Info: Freeing dictionary en/4.0.dict
link-grammar: Info: Freeing dictionary en/4.0.affix
Bye.

Можно использовать Link Grammar Parser в пакетном режиме. При этом стоит исключить информацию, поступающую в стандартный вывод ошибок STDERR

% echo 'My vision is augmented.' | link-parser -verbosity=0 2>/dev/null         
verbosity set to 0

    +-----------------Xp-----------------+
    +-----Wd-----+                       |
    |      +--Ds-+--Ss--+---Pv---+       |
    |      |     |      |        |       |
LEFT-WALL my vision.s is.v augmented.v-d . 

Bye.

Важно отметить, что служебная информация выводится в поток стандартного вывода ошибок STDERR, поэтому TreeTagger относительно легко интегрируется в приложения, которые способны осуществлять запуск внешних команд перенаправление потоков ввода-вывода.

Ruby

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

#!/usr/bin/env ruby

require 'rubygems'
require 'linkparser'

dict = LinkParser::Dictionary.new('en')
sent = dict.parse('Hello, is there anybody in there?')

# субъект-предикат-объект предложения
p [sent.subject, sent.verb, sent.object]

# дерево зависимостей
puts sent.constituent_tree_string

# диаграмма связей (как в выводе link-parser)
puts sent.diagram

Выполнение данного кода приведёт к следующему выводу в терминал:

link-grammar: Info: Dictionary found at /usr/share/link-grammar/en/4.0.dict
"is.v"
"LEFT-WALL"
"anybody"
(S Hello ,
   (VP is there
       (NP anybody)
       (PP in
           (NP there))
       ?))

    +----------------------Xp---------------------+
    +-------Qd------+--------MVp--------+         |
    |       +---Ic--+-----Ost-----+     |         |
    |       +-Xc+   +SFIst+       |     +--J-+    |
    |       |   |   |     |       |     |    |    |
LEFT-WALL Hello , is.v there.r anybody in there.r ? 

link-grammar: Info: Freeing dictionary en/4.0.dict
link-grammar: Info: Freeing dictionary en/4.0.affix

Ruby и Link Grammar for Russian

Существует клиент к Web-сервису Link Grammar for Russian[1], преобразующий вывод анализатора в структуры языка. Клиент доступен в виде сниппета на GitHub: https://gist.github.com/2021295 с примером использования.

Ссылки

Примечания