Пакет lingo предоставляет структуры данных и алгоритмы, необходимые для обработки естественного языка.
В частности, он обеспечивает POS -метку ( lingo/pos ), анализатор зависимости ( lingo/dep ) и базовый токенизатор ( lingo/lexer ) для английского языка. Он также предоставляет структуры данных для хранения корпусов ( lingo/corpus ) и Treebanks ( lingo/treebank ).
Целью данного пакета является обеспечение качества производства для обработки естественного языка.
Пакет Go -Gettable: go get -u github.com/chewxy/lingo
Этот пакет и его подпакинги зависят от очень мало внешних пакетов. Вот они:
| Упаковка | Используется для | Жизнеспособность | Примечания | Лицензия |
|---|---|---|---|---|
| Горгония | Машинное обучение | Жизненно важный. Не будет трудно переписать их, но почему? | Тот же автор | Лицензия Gorgonia (Apache 2.0-подобное) |
| Gographviz | Визуализация аннотаций и другие визуализации, связанные с графиком | Жизненно важно для визуализаций, которые являются хорошей функцией | API в последний раз менял 12 апреля 2017 года | Лицензия Gographviz (Apache 2.0) |
| ошибки | Ошибки | Пакет не умрет без него, но очень приятно иметь | Стабильный API за последний год | Лицензия на ошибки (MIT/BSD Like) |
| набор | Установить операции | Можно легко заменить | Стабильный API за последний год | установить лицензию (MIT/BSD-подобное) |
Смотрите отдельные пакеты для использования. В каталоге cmd также есть куча исполняемых файлов. Они предназначены для примеров того, как можно настроить трубопровод обработки естественного языка.
Натуральный язык с этим пакетом сильно управляется каналами. Вот пример для анализа зависимостей:
func main () {
inputString: `The cat sat on the mat`
lx := lexer . New ( "dummy" , strings . NewReader ( inputString )) // lexer - required to break a sentence up into words.
pt := pos . New ( pos . WithModel ( posModel )) // POS Tagger - required to tag the words with a part of speech tag.
dp := dep . New ( depModel ) // Creates a new parser
// set up a pipeline
pt . Input = lx . Output
dp . Input = pt . Output
// run all
go lx . Run ()
go pt . Run ()
go dp . Run ()
// wait to receive:
for {
select {
case d := <- dp . Output :
// do something
case err := <- dp . Error :
// handle error
}
}
}Для конкретных задач (POS -метка, анализ, распознавание объектов и т. Д.) См. Readme каждого подпакета. Этот пакет сам по себе в основном предоставляет структуры данных, которые будут использовать подпакинги.
Возможно, наиболее важной структурой данных является *Annotation структура. В основном он содержит слово и связанные метаданные для слова.
Для анализа зависимостей график принимает три формы: *Dependency , *DependencyTree и *Annotation . Все три формы преобразуются от одной в другой. TODO: Объясните обоснование каждого типа данных.
Особая причуда, которую вы, возможно, заметили, состоит в том, что POSTag и DependencyType находятся жестко кодируются как константы. Этот пакет на самом деле предоставляет два вариации каждого из них: по одному из Стэнфорда/Пенн Тривбанк и один из UniversaldAldendents.
Основная причина жесткого кодирования, в основном по соображениям производительности - знание заранее, сколько распределить снижает много дополнительной работы, которую должна выполнить программа. Это также снижает шансы мутировать глобальную переменную.
Конечно, это происходит как компромисс - программы ограничены этими двумя вариантами. К счастью, существует только ограниченное количество типов отношений Tag и зависимости. Были реализованы два из самых популярных (Стэнфорд/PTB и универсальные зависимости).
Поддерживаются следующие бирки сборки:
Чтобы использовать конкретный тег или рецидив, создайте свою программу таким образом: go build -tags='stanfordtags' .
Тег по умолчанию и типы REL -зависимости являются версией универсальной зависимости.
Вы также должны отметить, что токенизатор, lingo/lexer -это не ваш обычный токенизатор NLP. Это токенизатор, который токенизируется по космосу, с некоторыми конкретными правилами для английского. Это было вдохновлено разговором Роба Пайка на Лексере. Я думал, что было бы здорово написать что -то подобное для NLP.
Тестовые примеры в пакете lingo/lexer демонстрируют, как он обрабатывает Unicode, и другой паталогический английский.
Смотрите Anplosing.md для получения дополнительной информации
Этот пакет лицензирован по лицензии MIT.