Друтчик - это чат для разработчиков.
nlpnet --- Естественная обработка языка с нейронными сетями nlpnet - это библиотека Python для задач обработки естественного языка, основанных на нейронных сетях. В настоящее время он выполняет часть речи, семантическую маркировку ролей и анализ зависимости. Большая часть архитектуры не зависит от языка, но некоторые функции были специально адаптированы для работы с португальским языком. Эта система была вдохновлена Сенной.
ВАЖНО: Для использования обученных моделей для португальского NLP вам нужно будет загрузить данные с http://nilc.icmc.usp.br/nlpnet/models.html.
nlpnet требует NLTK и Numpy. Кроме того, он должен загрузить некоторые данные из NLTK. После его установки звоните
>>> nltk.download()
Перейдите на вкладку «Модели» и выберите токенизатор Punkt. Он используется для того, чтобы разделить текст на предложения.
Цифон используется для генерации расширений C и работать быстрее. Вероятно, вам не понадобится, так как сгенерированный файл .c уже предоставлен NLPnet, но вам понадобится компилятор C. В системах Linux и Mac это не должно быть проблемой, но может быть в Windows, потому что Setuptools требует компилятора Microsoft C по умолчанию. Если у вас его еще нет, вместо этого обычно проще установить Mingw и следовать инструкциям здесь.
nlpnet можно использовать как в качестве библиотеки Python, так и ее автономными сценариями. Оба использования объяснены ниже.
Вы можете использовать nlpnet в качестве библиотеки в коде Python следующим образом:
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]] В приведенном выше примере, конструктор POSTagger получает в качестве первого аргумента, каталог, где находится его обученная модель. Второй аргумент - код двух букв языка (в настоящее время поддерживаются Onle pt и en ). Это оказывает только влияние на токенизацию.
Вызов инструмента аннотации довольно прост. Преданные из них являются POSTagger , SRLTagger и DependencyParser , все они имеют tag метода, который получает струны с тегом текста (в DependencyParser , есть псевдоним для parse метода, который звучит более адекватно). Tagger разбивает текст в предложения, а затем токенизирует каждый (следовательно, возврат почтовогоггерного - это список списков).
Выход SRLTAGGER немного сложнее:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
Вместо списка кортежей предложения представлены случаями SRLAnnotatedSentence . Этот класс служит в основном как держатель данных и имеет два атрибута:
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
arg_structures -это список, содержащий все структуры предиката-аргумента в предложении. Единственный в этом примере для глагола ROEU. Он представлен кортежом с предикатом и словарем, отображающим семантические ролевые этикетки с токенами, которые составляют аргумент.
Обратите внимание, что глагол появляется как первый член кортежа, а также в качестве содержания метки «V» (который означает глагол). Это потому, что некоторые предикаты - многочисленные слова. В этих случаях «основное» предикатное слово (обычно сам глагол) появляется в arg_structures[0] , и все слова появляются под ключом «V».
Вот пример с зависимостью:
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
Метод to_conll() объектов PANSEDSENTENCE Печаты их в обозначениях CONLL. Токены, этикетки и индексы головы доступны через переменные члена:
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
Переменная члена heads - это массив Numpy. Положение I-Th в массиве содержит индекс головы токена I-Th, за исключением токена корня, которая имеет голов -1. Обратите внимание, что эти индексы основаны на 0, а те, которые показаны в функции to_conll() основаны на 1.
nlpnet также предоставляет сценарии для тегации текста, обучения новых моделей и их тестирования. Они копируются в подкаталог сценариев вашей установки Python, которая может быть включена в переменную системного пути. Вы можете позвонить им из командной строки и дать немного текстового ввода.
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU Если --data не дается, сценарий будет искать обученные модели в текущем каталоге. --lang умолчанию по en . Если у вас уже есть текст, вы можете использовать опцию -t ; Предполагается, что токены разделены пробелами.
С семантической маркировкой роли:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeuПервая строка была напечатана пользователем, а вторая - результат токенизации.
И диапазон зависимости:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 PЧтобы узнать больше о обучении и тестировании новых моделей и других функциональных возможностях, см. Документацию по адресу http://nilc.icmc.usp.br/nlpnet
В следующих ссылках описывается дизайн NLPNet, а также проведенные эксперименты. Некоторые улучшения кода были реализованы с момента их публикации.