Стэнфордский парсер и NLTK

Можно ли использовать Stanford Parser в NLTK? (Я не говорю о Стэнфордском POS.)

17 ответов

Обратите внимание, что этот ответ относится к NLTK v 3.0, а не к более поздним версиям.

Конечно, попробуйте следующее в Python:

import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = '/path/to/standford/jars'
os.environ['STANFORD_MODELS'] = '/path/to/standford/jars'

parser = stanford.StanfordParser(model_path="/location/of/the/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.", "What is your name?"))
print sentences

# GUI
for line in sentences:
    for sentence in line:
        sentence.draw()

Выход:

[Tree ('ROOT', [Tree ('S', [Tree ('INTJ', [Tree ('UH', ['Hello'])]), Tree (',', [',']), Tree ('NP', [Tree ('PRP $', ['My']), Tree ('NN', ['name'])]), Tree ('VP', [Tree ('VBZ', [ 'is']), Tree ('ADJP', [Tree ('JJ', ['Melroy'])])]), Tree ('.', ['.'])])]), Tree (' ROOT ', [Tree (' SBARQ ', [Tree (' WHNP ', [Tree (' WP ', [' What '])]), Tree (' SQ ', [Tree (' VBZ ', [' is ') ]), Tree('NP', [Tree('PRP$', ['your']), Tree('NN', ['name'])])]), Tree('.', ['? "])])])]

Примечание 1. В этом примере файлы jar парсера и модели находятся в одной папке.

Заметка 2:

  • Имя файла анализатора Стэнфорда: stanford-parser.jar
  • Имя файла моделей Стэнфорда: stanford-parser-xxx-models.jar

Примечание 3: файл englishPCFG.ser.gz находится внутри файла models.jar (/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz). Пожалуйста, используйте менеджер архивов для распаковки файла models.jar.

Примечание 4: Убедитесь, что вы используете Java JRE (Runtime Environment) 1.8, также известную как Oracle JDK 8. В противном случае вы получите: Unsupported major.minor version 52.0.

Монтаж

  1. Загрузите NLTK v3 с веб-сайта https://github.com/nltk/nltk. И установить NLTK:

    sudo python setup.py установить

  2. Вы можете использовать загрузчик NLTK, чтобы получить Stanford Parser, используя Python:

    import nltk
    nltk.download()
    
  3. Попробуйте мой пример! (не забудьте изменить пути jar и изменить путь модели в местоположение ser.gz)

ИЛИ ЖЕ:

  1. Скачайте и установите NLTK v3, как описано выше.

  2. Загрузите последнюю версию (текущая версия файла - stanford-parser-full-2015-01-29.zip): http://nlp.stanford.edu/software/lex-parser.shtml

  3. Извлеките standford-parser-full-20xx-xx-xx.zip.

  4. Создайте новую папку ("jars" в моем примере). Поместите извлеченные файлы в эту папку jar: stanford-parser-3.xx-models.jar и stanford-parser.jar.

    Как показано выше, вы можете использовать переменные среды (STANFORD_PARSER & STANFORD_MODELS), чтобы указывать на эту папку 'jars'. Я использую Linux, поэтому, если вы используете Windows, пожалуйста, используйте что-то вроде: C://folder//jars.

  5. Откройте файл stanford-parser-3.xx-models.jar с помощью диспетчера архивов (7zip).

  6. Просмотрите файл фляги; Edu / Стэнфорд / NLP / модели / lexparser. Снова извлеките файл с именем "englishPCFG.ser.gz". Запомните место, где вы извлекаете этот файл ser.gz.

  7. При создании экземпляра StanfordParser вы можете указать путь к модели в качестве параметра. Это полный путь к модели, в нашем случае /location/of/englishPCFG.ser.gz.

  8. Попробуйте мой пример! (не забудьте изменить пути jar и изменить путь модели в местоположение ser.gz)

Устаревший ответ

Ответ ниже не рекомендуется, используйте решение по /questions/2670954/stenfordskij-parser-i-nltk/2670960#2670960 для NLTK v3.3 и выше.


РЕДАКТИРОВАНИЕ

Примечание: следующий ответ будет работать только на:

  • Версия NLTK> = 3.2.4
  • Stanford Tools составлено с 2015-04-20
  • Python 2.7, 3.4 и 3.5 (Python 3.6 пока официально не поддерживается)

Поскольку оба инструмента меняются довольно быстро, и API может выглядеть совсем иначе через 3-6 месяцев. Пожалуйста, относитесь к следующему ответу как к временному, а не вечному исправлению.

Всегда обращайтесь к https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software за последней инструкцией о том, как взаимодействовать с инструментами Stanford NLP с помощью NLTK!!


TL; DR

cd $HOME

# Update / Install NLTK
pip install -U nltk

# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip 
unzip stanford-parser-full-2015-04-20.zip 
unzip stanford-postagger-full-2015-04-20.zip


export STANFORDTOOLSDIR=$HOME

export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar

export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers

Затем:

>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]

>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]


>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]

>>> from nltk.parse.stanford import StanfordDependencyParser
>>> dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> print [parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]
[Tree('jumps', [Tree('fox', ['The', 'quick', 'brown']), Tree('dog', ['over', 'the', 'lazy'])])]

В длинных:


Во-первых, нужно отметить, что инструменты Stanford NLP написаны на Java, а NLTK написан на Python. NLTK взаимодействует с инструментом через вызов инструмента Java через интерфейс командной строки.

Во-вторых, NLTK По сравнению с версией 3.1 API к инструментам Stanford NLP сильно изменился. Поэтому желательно обновить ваш пакет NLTK до версии 3.1.

В-третьих, NLTK API для Stanford NLP Tools охватывает отдельные инструменты NLP, например, Stanford POS tagger, Stanford NER Tagger, Stanford Parser.

Для тегов POS и NER он НЕ оборачивается пакетом Stanford Core NLP.

Для Stanford Parser это особый случай, когда он охватывает как Stanford Parser, так и Stanford Core NLP (лично я не использовал последний с использованием NLTK, я бы лучше следовал демонстрации @dimazest на http://www.eecs.qmul.ac.uk/~dm303/stanford-dependency-parser-nltk-and-anaconda.html)

Обратите внимание, что начиная с NLTK v3.1, STANFORD_JAR а также STANFORD_PARSER переменные устарели и больше не используются


В дольше:


ШАГ 1

Предполагая, что вы правильно установили Java в вашей ОС.

Теперь установите / обновите свою версию NLTK (см. http://www.nltk.org/install.html):

  • Используя пункт: sudo pip install -U nltk
  • Дистрибутив Debian (используется apt-get): sudo apt-get install python-nltk

Для Windows (используйте 32-разрядную двоичную установку):

  1. Установите Python 3.4: http://www.python.org/downloads/ (избегайте 64-битных версий)
  2. Установите Numpy (необязательно): http://sourceforge.net/projects/numpy/files/NumPy/ (версия, в которой указан pythnon3.4)
  3. Установите NLTK: http://pypi.python.org/pypi/nltk
  4. Тестовая установка: Пуск>Python34, затем введите import nltk

(Почему не 64-битный? См. https://github.com/nltk/nltk/issues/1079)


Тогда из паранойи перепроверь свой nltk версия внутри питона:

from __future__ import print_function
import nltk
print(nltk.__version__)

Или в командной строке:

python3 -c "import nltk; print(nltk.__version__)"

Убедитесь, что вы видите 3.1 в качестве выхода.

Для еще большей паранойи, убедитесь, что все ваши любимые инструменты Stanford NLP API доступны:

from nltk.parse.stanford import StanfordParser
from nltk.parse.stanford import StanfordDependencyParser
from nltk.parse.stanford import StanfordNeuralDependencyParser
from nltk.tag.stanford import StanfordPOSTagger, StanfordNERTagger
from nltk.tokenize.stanford import StanfordTokenizer

(Примечание. Приведенные выше операции импорта ТОЛЬКО гарантируют, что вы используете правильную версию NLTK, содержащую эти API. Отсутствие ошибок в импорте не означает, что вы успешно настроили API NLTK для использования инструментов Stanford)


ШАГ 2

Теперь, когда вы проверили, что у вас есть правильная версия NLTK, которая содержит необходимый интерфейс инструментов Stanford NLP. Вам необходимо скачать и извлечь все необходимые инструменты Stanford NLP.

TL; DR, в Unix:

cd $HOME

# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip 
unzip stanford-parser-full-2015-04-20.zip 
unzip stanford-postagger-full-2015-04-20.zip

В Windows / Mac:


ШАГ 3

Настройте переменные среды так, чтобы NLTK мог автоматически найти соответствующий путь к файлу. Вы должны установить следующие переменные:

  • Добавьте соответствующий Stanford NLP .jar подать в CLASSPATH переменная окружения.

    • например, для NER, это будет stanford-ner-2015-04-20/stanford-ner.jar
    • например, для POS, это будет stanford-postagger-full-2015-04-20/stanford-postagger.jar
    • например для парсера, это будет stanford-parser-full-2015-04-20/stanford-parser.jar и файл jar модели анализатора, stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
  • Добавьте соответствующий каталог модели в STANFORD_MODELS переменная (т. е. каталог, в котором вы можете найти предварительно сохраненные модели)

    • например, для NER, это будет в stanford-ner-2015-04-20/classifiers/
    • например, для POS, это будет в stanford-postagger-full-2015-04-20/models/
    • например, для парсера не будет каталога модели.

В коде видно, что он ищет STANFORD_MODELS каталог перед добавлением названия модели. Также обратите внимание, что API также автоматически пытается найти в средах ОС `CLASSPATH)

Обратите внимание, что начиная с NLTK v3.1, STANFORD_JAR переменные устарели и больше не используются. Фрагменты кода, найденные в следующих вопросах Stackru, могут не работать:

TL; DR для ШАГА 3 на Ubuntu

export STANFORDTOOLSDIR=/home/path/to/stanford/tools/

export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar

export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers

(Для Windows: см. /questions/40251931/kak-dobavit-v-pythonpath-v-windows/40251943#40251943 для инструкций по настройке переменных среды)

Вы ДОЛЖНЫ установить переменные, как указано выше, до запуска python, а затем:

>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]

>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]


>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]

В качестве альтернативы, вы можете попытаться добавить переменные окружения в python, как предлагалось в предыдущих ответах, но вы также можете напрямую указать синтаксическому анализатору / тегеру инициализировать прямой путь, где вы сохранили .jar файл и ваши модели.

Нет необходимости устанавливать переменные среды, если вы используете следующий метод, НО, когда API меняет имена своих параметров, вам нужно будет изменить их соответствующим образом. Вот почему БОЛЬШЕ рекомендуется устанавливать переменные среды, чем модифицировать ваш код Python, чтобы он соответствовал версии NLTK.

Например (без установки каких-либо переменных среды):

# POS tagging:

from nltk.tag import StanfordPOSTagger

stanford_pos_dir = '/home/alvas/stanford-postagger-full-2015-04-20/'
eng_model_filename= stanford_pos_dir + 'models/english-left3words-distsim.tagger'
my_path_to_jar= stanford_pos_dir + 'stanford-postagger.jar'

st = StanfordPOSTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar) 
st.tag('What is the airspeed of an unladen swallow ?'.split())


# NER Tagging:
from nltk.tag import StanfordNERTagger

stanford_ner_dir = '/home/alvas/stanford-ner/'
eng_model_filename= stanford_ner_dir + 'classifiers/english.all.3class.distsim.crf.ser.gz'
my_path_to_jar= stanford_ner_dir + 'stanford-ner.jar'

st = StanfordNERTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar) 
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())

# Parsing:
from nltk.parse.stanford import StanfordParser

stanford_parser_dir = '/home/alvas/stanford-parser/'
eng_model_path = stanford_parser_dir  + "edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir  + "stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir  + "stanford-parser.jar"

parser=StanfordParser(model_path=eng_model_path, path_to_models_jar=my_path_to_models_jar, path_to_jar=my_path_to_jar)

Начиная с версии NLTK v3.3, пользователи должны избегать использования тегов Stanford NER или POS nltk.tagи избегайте Стенфордского токенизатора / сегментера от nltk.tokenize,

Вместо этого используйте новый nltk.parse.corenlp.CoreNLPParser API.

Пожалуйста, смотрите https://github.com/nltk/nltk/wiki/Stanford-CoreNLP-API-in-NLTK


(Избегая ответа только по ссылке, я вставил документы из NLTK github wiki ниже)

Сначала обновите свой NLTK

pip3 install -U nltk # Make sure is >=3.3

Затем загрузите необходимые пакеты CoreNLP:

cd ~
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2018-02-27.zip
unzip stanford-corenlp-full-2018-02-27.zip
cd stanford-corenlp-full-2018-02-27

# Get the Chinese model 
wget http://nlp.stanford.edu/software/stanford-chinese-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-chinese.properties 

# Get the Arabic model
wget http://nlp.stanford.edu/software/stanford-arabic-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-arabic.properties 

# Get the French model
wget http://nlp.stanford.edu/software/stanford-french-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-french.properties 

# Get the German model
wget http://nlp.stanford.edu/software/stanford-german-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-german.properties 


# Get the Spanish model
wget http://nlp.stanford.edu/software/stanford-spanish-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-spanish.properties 

английский

Все еще в stanford-corenlp-full-2018-02-27 каталог, запустите сервер:

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-preload tokenize,ssplit,pos,lemma,ner,parse,depparse \
-status_port 9000 -port 9000 -timeout 15000 & 

Тогда в Python:

>>> from nltk.parse import CoreNLPParser

# Lexical Parser
>>> parser = CoreNLPParser(url='http://localhost:9000')

# Parse tokenized text.
>>> list(parser.parse('What is the airspeed of an unladen swallow ?'.split()))
[Tree('ROOT', [Tree('SBARQ', [Tree('WHNP', [Tree('WP', ['What'])]), Tree('SQ', [Tree('VBZ', ['is']), Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('NN', ['airspeed'])]), Tree('PP', [Tree('IN', ['of']), Tree('NP', [Tree('DT', ['an']), Tree('JJ', ['unladen'])])]), Tree('S', [Tree('VP', [Tree('VB', ['swallow'])])])])]), Tree('.', ['?'])])])]

# Parse raw string.
>>> list(parser.raw_parse('What is the airspeed of an unladen swallow ?'))
[Tree('ROOT', [Tree('SBARQ', [Tree('WHNP', [Tree('WP', ['What'])]), Tree('SQ', [Tree('VBZ', ['is']), Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('NN', ['airspeed'])]), Tree('PP', [Tree('IN', ['of']), Tree('NP', [Tree('DT', ['an']), Tree('JJ', ['unladen'])])]), Tree('S', [Tree('VP', [Tree('VB', ['swallow'])])])])]), Tree('.', ['?'])])])]

# Neural Dependency Parser
>>> from nltk.parse.corenlp import CoreNLPDependencyParser
>>> dep_parser = CoreNLPDependencyParser(url='http://localhost:9000')
>>> parses = dep_parser.parse('What is the airspeed of an unladen swallow ?'.split())
>>> [[(governor, dep, dependent) for governor, dep, dependent in parse.triples()] for parse in parses]
[[(('What', 'WP'), 'cop', ('is', 'VBZ')), (('What', 'WP'), 'nsubj', ('airspeed', 'NN')), (('airspeed', 'NN'), 'det', ('the', 'DT')), (('airspeed', 'NN'), 'nmod', ('swallow', 'VB')), (('swallow', 'VB'), 'case', ('of', 'IN')), (('swallow', 'VB'), 'det', ('an', 'DT')), (('swallow', 'VB'), 'amod', ('unladen', 'JJ')), (('What', 'WP'), 'punct', ('?', '.'))]]


# Tokenizer
>>> parser = CoreNLPParser(url='http://localhost:9000')
>>> list(parser.tokenize('What is the airspeed of an unladen swallow?'))
['What', 'is', 'the', 'airspeed', 'of', 'an', 'unladen', 'swallow', '?']

# POS Tagger
>>> pos_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='pos')
>>> list(pos_tagger.tag('What is the airspeed of an unladen swallow ?'.split()))
[('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed', 'NN'), ('of', 'IN'), ('an', 'DT'), ('unladen', 'JJ'), ('swallow', 'VB'), ('?', '.')]

# NER Tagger
>>> ner_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='ner')
>>> list(ner_tagger.tag(('Rami Eid is studying at Stony Brook University in NY'.split())))
[('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'STATE_OR_PROVINCE')]

китайский язык

Запустите сервер немного по-другому, по-прежнему из каталога `stanford-corenlp-full-2018-02-27:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-chinese.properties \
-preload tokenize,ssplit,pos,lemma,ner,parse \
-status_port 9001  -port 9001 -timeout 15000

В Python:

>>> parser = CoreNLPParser('http://localhost:9001')
>>> list(parser.tokenize(u'我家没有电脑。'))
['我家', '没有', '电脑', '。']

>>> list(parser.parse(parser.tokenize(u'我家没有电脑。')))
[Tree('ROOT', [Tree('IP', [Tree('IP', [Tree('NP', [Tree('NN', ['我家'])]), Tree('VP', [Tree('VE', ['没有']), Tree('NP', [Tree('NN', ['电脑'])])])]), Tree('PU', ['。'])])])]

арабский

Запустите сервер:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-arabic.properties \
-preload tokenize,ssplit,pos,parse \
-status_port 9005  -port 9005 -timeout 15000

В Python:

>>> from nltk.parse import CoreNLPParser
>>> parser = CoreNLPParser('http://localhost:9005')
>>> text = u'انا حامل'

# Parser.
>>> parser.raw_parse(text)
<list_iterator object at 0x7f0d894c9940>
>>> list(parser.raw_parse(text))
[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('PRP', ['انا'])]), Tree('NP', [Tree('NN', ['حامل'])])])])]
>>> list(parser.parse(parser.tokenize(text)))
[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('PRP', ['انا'])]), Tree('NP', [Tree('NN', ['حامل'])])])])]

# Tokenizer / Segmenter.
>>> list(parser.tokenize(text))
['انا', 'حامل']

# POS tagg
>>> pos_tagger = CoreNLPParser('http://localhost:9005', tagtype='pos')
>>> list(pos_tagger.tag(parser.tokenize(text)))
[('انا', 'PRP'), ('حامل', 'NN')]


# NER tag
>>> ner_tagger = CoreNLPParser('http://localhost:9005', tagtype='ner')
>>> list(ner_tagger.tag(parser.tokenize(text)))
[('انا', 'O'), ('حامل', 'O')]

Французский

Запустите сервер:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-french.properties \
-preload tokenize,ssplit,pos,parse \
-status_port 9004  -port 9004 -timeout 15000

В Python:

>>> parser = CoreNLPParser('http://localhost:9004')
>>> list(parser.parse('Je suis enceinte'.split()))
[Tree('ROOT', [Tree('SENT', [Tree('NP', [Tree('PRON', ['Je']), Tree('VERB', ['suis']), Tree('AP', [Tree('ADJ', ['enceinte'])])])])])]
>>> pos_tagger = CoreNLPParser('http://localhost:9004', tagtype='pos')
>>> pos_tagger.tag('Je suis enceinte'.split())
[('Je', 'PRON'), ('suis', 'VERB'), ('enceinte', 'ADJ')]

Немецкий

Запустите сервер:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-german.properties \
-preload tokenize,ssplit,pos,ner,parse \
-status_port 9002  -port 9002 -timeout 15000

В Python:

>>> parser = CoreNLPParser('http://localhost:9002')
>>> list(parser.raw_parse('Ich bin schwanger'))
[Tree('ROOT', [Tree('NUR', [Tree('S', [Tree('PPER', ['Ich']), Tree('VAFIN', ['bin']), Tree('AP', [Tree('ADJD', ['schwanger'])])])])])]
>>> list(parser.parse('Ich bin schwanger'.split()))
[Tree('ROOT', [Tree('NUR', [Tree('S', [Tree('PPER', ['Ich']), Tree('VAFIN', ['bin']), Tree('AP', [Tree('ADJD', ['schwanger'])])])])])]


>>> pos_tagger = CoreNLPParser('http://localhost:9002', tagtype='pos')
>>> pos_tagger.tag('Ich bin schwanger'.split())
[('Ich', 'PPER'), ('bin', 'VAFIN'), ('schwanger', 'ADJD')]

>>> pos_tagger = CoreNLPParser('http://localhost:9002', tagtype='pos')
>>> pos_tagger.tag('Ich bin schwanger'.split())
[('Ich', 'PPER'), ('bin', 'VAFIN'), ('schwanger', 'ADJD')]

>>> ner_tagger = CoreNLPParser('http://localhost:9002', tagtype='ner')
>>> ner_tagger.tag('Donald Trump besuchte Angela Merkel in Berlin.'.split())
[('Donald', 'PERSON'), ('Trump', 'PERSON'), ('besuchte', 'O'), ('Angela', 'PERSON'), ('Merkel', 'PERSON'), ('in', 'O'), ('Berlin', 'LOCATION'), ('.', 'O')]

испанский

Запустите сервер:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-spanish.properties \
-preload tokenize,ssplit,pos,ner,parse \
-status_port 9003  -port 9003 -timeout 15000

В Python:

>>> pos_tagger = CoreNLPParser('http://localhost:9003', tagtype='pos')
>>> pos_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())
[('Barack', 'PROPN'), ('Obama', 'PROPN'), ('salió', 'VERB'), ('con', 'ADP'), ('Michael', 'PROPN'), ('Jackson', 'PROPN'), ('.', 'PUNCT')]
>>> ner_tagger = CoreNLPParser('http://localhost:9003', tagtype='ner')
>>> ner_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())
[('Barack', 'PERSON'), ('Obama', 'PERSON'), ('salió', 'O'), ('con', 'O'), ('Michael', 'PERSON'), ('Jackson', 'PERSON'), ('.', 'O')]

Устаревший ответ

Ответ ниже не рекомендуется, используйте решение по /questions/2670954/stenfordskij-parser-i-nltk/2670960#2670960 для NLTK v3.3 и выше.


отредактированный

По состоянию на текущий анализатор Stanford (2015-04-20), вывод по умолчанию для lexparser.sh изменился, поэтому скрипт ниже не будет работать.

Но этот ответ оставлен в наследство, он все равно будет работать с http://nlp.stanford.edu/software/stanford-parser-2012-11-12.zip.


Оригинальный ответ

Я предлагаю вам не связываться с Jython, JPype. Позвольте python делать Python, а Java делать Java, получать вывод Stanford Parser через консоль.

После того, как вы установили Stanford Parser в свой домашний каталог ~/, просто используйте этот рецепт Python, чтобы получить синтаксический анализ в скобках:

import os
sentence = "this is a foo bar i want to parse."

os.popen("echo '"+sentence+"' > ~/stanfordtemp.txt")
parser_out = os.popen("~/stanford-parser-2012-11-12/lexparser.sh ~/stanfordtemp.txt").readlines()

bracketed_parse = " ".join( [i.strip() for i in parser_out if i.strip()[0] == "("] )
print bracketed_parse

На странице программного обеспечения Stanford Core NLP есть список оболочек Python:

http://nlp.stanford.edu/software/corenlp.shtml

Есть интерфейс Python для Стэнфордского парсера

http://projects.csail.mit.edu/spatial/Stanford_Parser

Если я хорошо помню, парсер Stanford - это библиотека java, поэтому на вашем сервере / компьютере должен быть запущен интерпретатор Java.

Я использовал его один раз на сервере, в сочетании с PHP-скриптом. Сценарий использовал функцию phec exec () для вызова синтаксического анализатора из командной строки следующим образом:

<?php

exec( "java -cp /pathTo/stanford-parser.jar -mx100m edu.stanford.nlp.process.DocumentPreprocessor /pathTo/fileToParse > /pathTo/resultFile 2>/dev/null" );

?>

Я не помню всех деталей этой команды, она в основном открыла fileToParse, проанализировала его и записала вывод в resultFile. Затем PHP откроет файл результатов для дальнейшего использования.

Конец команды направляет подробный анализатор в NULL, чтобы лишняя информация командной строки не мешала сценарию.

Я не знаю много о Python, но может быть способ сделать вызовы командной строки.

Возможно, это не тот маршрут, на который вы надеялись, но, надеюсь, он вдохновит вас. Удачи.

Обратите внимание, что этот ответ относится к NLTK v 3.0, а не к более поздним версиям.

Вот адаптация кода danger98, который работает с nltk3.0.0 в windoze, а также, предположительно, с другими платформами, измените имена каталогов в соответствии с вашими настройками:

import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = 'd:/stanford-parser'
os.environ['STANFORD_MODELS'] = 'd:/stanford-parser'
os.environ['JAVAHOME'] = 'c:/Program Files/java/jre7/bin'

parser = stanford.StanfordParser(model_path="d:/stanford-grammars/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.", "What is your name?"))
print sentences

Обратите внимание, что команда синтаксического анализа была изменена (см. Исходный код по адресу www.nltk.org/_modules/nltk/parse/stanford.html) и что вам необходимо определить переменную JAVAHOME. Я пытался заставить его читать файл грамматики на месте в банке, но пока не смог этого сделать.

Вы можете использовать выходные данные Stanford Parsers для создания дерева в nltk (nltk.tree.Tree).

Предполагая, что анализатор Стэнфорда дает вам файл, в котором для каждого предложения есть ровно одно дерево анализа. Тогда этот пример работает, хотя может показаться не очень питоническим:

f = open(sys.argv[1]+".output"+".30"+".stp", "r")
parse_trees_text=[]
tree = ""
for line in f:
  if line.isspace():
    parse_trees_text.append(tree)
tree = ""
  elif "(. ...))" in line:
#print "YES"
tree = tree+')'
parse_trees_text.append(tree)
tree = ""
  else:
tree = tree + line

parse_trees=[]
for t in parse_trees_text:
  tree = nltk.Tree(t)
  tree.__delitem__(len(tree)-1) #delete "(. .))" from tree (you don't need that)
  s = traverse(tree)
  parse_trees.append(tree)

Обратите внимание, что этот ответ относится к NLTK v 3.0, а не к более поздним версиям.

Поскольку никто на самом деле не упомянул, и это как-то меня сильно беспокоит, вот альтернативный способ использования анализатора Stanford в python:

stanford_parser_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser.jar'
stanford_model_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar'    
parser = StanfordParser(path_to_jar=stanford_parser_jar, 
                        path_to_models_jar=stanford_model_jar)

таким образом, вам больше не нужно беспокоиться о пути.

Для тех, кто не может правильно использовать его в Ubuntu или запустить код в Eclipse.

Я на машине с Windows, и вы можете просто запустить анализатор, как вы делаете это с помощью команды вроде, но как в другом каталоге, так что вам не нужно редактировать файл lexparser.bat. Просто введите полный путь.

cmd = r'java -cp \Documents\stanford_nlp\stanford-parser-full-2015-01-30 edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat "typedDependencies" \Documents\stanford_nlp\stanford-parser-full-2015-01-30\stanford-parser-3.5.1-models\edu\stanford\nlp\models\lexparser\englishFactored.ser.gz stanfordtemp.txt'
parse_out = os.popen(cmd).readlines()

Для меня было непросто понять, как запустить Java-программу по другому пути. Должен быть лучший способ, но это работает.

Обратите внимание, что этот ответ относится к NLTK v 3.0, а не к более поздним версиям.

Вот версия ответа alvas для windows

sentences = ('. '.join(['this is sentence one without a period','this is another foo bar sentence '])+'.').encode('ascii',errors = 'ignore')
catpath =r"YOUR CURRENT FILE PATH"

f = open('stanfordtemp.txt','w')
f.write(sentences)
f.close()

parse_out = os.popen(catpath+r"\nlp_tools\stanford-parser-2010-08-20\lexparser.bat "+catpath+r"\stanfordtemp.txt").readlines()

bracketed_parse = " ".join( [i.strip() for i in parse_out if i.strip() if i.strip()[0] == "("] )
bracketed_parse = "\n(ROOT".join(bracketed_parse.split(" (ROOT")).split('\n')
aa = map(lambda x :ParentedTree.fromstring(x),bracketed_parse)

ЗАМЕТКИ:

  • В lexparser.bat вам нужно изменить все пути на абсолютные, чтобы избежать ошибок Java, таких как "класс не найден"

  • Я настоятельно рекомендую вам применять этот метод под окнами, так как я попробовал несколько ответов на странице, и все методы связывают Python с ошибками Java.

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

  • поиск оболочки Python для Stanford CoreNLP, чтобы получить версию Python


Обратите внимание, что этот ответ относится к NLTK v 3.0, а не к более поздним версиям.

Небольшое обновление (или просто альтернатива) об исчерпывающем ответе danger89 об использовании Stanford Parser в NLTK и Python

С stanford-parser-full-2015-04-20, JRE 1.8 и nltk 3.0.4 (python 2.7.6) кажется, что вам больше не нужно извлекать файл englishPCFG.ser.gz из stanford-parser-xxx-models.jar или настройка любого os.environ

from nltk.parse.stanford import StanfordParser

english_parser = StanfordParser('path/stanford-parser.jar', 'path/stanford-parser-3.5.2-models.jar')

s = "The real voyage of discovery consists not in seeking new landscapes, but in having new eyes."

sentences = english_parser.raw_parse_sents((s,))
print sentences #only print <listiterator object> for this version

#draw the tree
for line in sentences:
    for sentence in line:
        sentence.draw()

Устаревший ответ

Ответ ниже не рекомендуется, используйте решение по /questions/2670954/stenfordskij-parser-i-nltk/2670960#2670960 для NLTK v3.3 и выше.


РЕДАКТИРОВАНИЕ

Примечание: следующий ответ будет работать только на:

  • Версия NLTK == 3.2.5
  • Stanford Tools составлено с 2016-10-31
  • Python 2.7, 3.5 и 3.6

Поскольку оба инструмента меняются довольно быстро, и API может выглядеть совсем иначе через 3-6 месяцев. Пожалуйста, относитесь к следующему ответу как к временному, а не вечному исправлению.

Всегда обращайтесь к https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software за последней инструкцией о том, как взаимодействовать с инструментами Stanford NLP с помощью NLTK!!

TL; DR

Следующий код приходит с https://github.com/nltk/nltk/pull/1735

В терминале:

wget http://nlp.stanford.edu/software/stanford-corenlp-full-2016-10-31.zip
unzip stanford-corenlp-full-2016-10-31.zip && cd stanford-corenlp-full-2016-10-31

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-preload tokenize,ssplit,pos,lemma,parse,depparse \
-status_port 9000 -port 9000 -timeout 15000

В Python:

>>> from nltk.tag.stanford import CoreNLPPOSTagger, CoreNLPNERTagger
>>> from nltk.parse.corenlp import CoreNLPParser

>>> stpos, stner = CoreNLPPOSTagger(), CoreNLPNERTagger()

>>> stpos.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]

>>> stner.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]


>>> parser = CoreNLPParser(url='http://localhost:9000')

>>> next(
...     parser.raw_parse('The quick brown fox jumps over the lazy dog.')
... ).pretty_print()  # doctest: +NORMALIZE_WHITESPACE
                     ROOT
                      |
                      S
       _______________|__________________________
      |                         VP               |
      |                _________|___             |
      |               |             PP           |
      |               |     ________|___         |
      NP              |    |            NP       |
  ____|__________     |    |     _______|____    |
 DT   JJ    JJ   NN  VBZ   IN   DT      JJ   NN  .
 |    |     |    |    |    |    |       |    |   |
The quick brown fox jumps over the     lazy dog  .

>>> (parse_fox, ), (parse_wolf, ) = parser.raw_parse_sents(
...     [
...         'The quick brown fox jumps over the lazy dog.',
...         'The quick grey wolf jumps over the lazy fox.',
...     ]
... )

>>> parse_fox.pretty_print()  # doctest: +NORMALIZE_WHITESPACE
                     ROOT
                      |
                      S
       _______________|__________________________
      |                         VP               |
      |                _________|___             |
      |               |             PP           |
      |               |     ________|___         |
      NP              |    |            NP       |
  ____|__________     |    |     _______|____    |
 DT   JJ    JJ   NN  VBZ   IN   DT      JJ   NN  .
 |    |     |    |    |    |    |       |    |   |
The quick brown fox jumps over the     lazy dog  .

>>> parse_wolf.pretty_print()  # doctest: +NORMALIZE_WHITESPACE
                     ROOT
                      |
                      S
       _______________|__________________________
      |                         VP               |
      |                _________|___             |
      |               |             PP           |
      |               |     ________|___         |
      NP              |    |            NP       |
  ____|_________      |    |     _______|____    |
 DT   JJ   JJ   NN   VBZ   IN   DT      JJ   NN  .
 |    |    |    |     |    |    |       |    |   |
The quick grey wolf jumps over the     lazy fox  .

>>> (parse_dog, ), (parse_friends, ) = parser.parse_sents(
...     [
...         "I 'm a dog".split(),
...         "This is my friends ' cat ( the tabby )".split(),
...     ]
... )

>>> parse_dog.pretty_print()  # doctest: +NORMALIZE_WHITESPACE
        ROOT
         |
         S
  _______|____
 |            VP
 |    ________|___
 NP  |            NP
 |   |         ___|___
PRP VBP       DT      NN
 |   |        |       |
 I   'm       a      dog

Пожалуйста, взгляните на http://www.nltk.org/_modules/nltk/parse/corenlp.html для получения дополнительной информации о Стэнфордском API. Посмотрите на строки документов!

Я использую nltk версии 3.2.4. И следующий код работал для меня.

from nltk.internals import find_jars_within_path
from nltk.tag import StanfordPOSTagger
from nltk import word_tokenize

# Alternatively to setting the CLASSPATH add the jar and model via their 
path:
jar = '/home/ubuntu/stanford-postagger-full-2017-06-09/stanford-postagger.jar'
model = '/home/ubuntu/stanford-postagger-full-2017-06-09/models/english-left3words-distsim.tagger'

pos_tagger = StanfordPOSTagger(model, jar)

# Add other jars from Stanford directory
stanford_dir = pos_tagger._stanford_jar.rpartition('/')[0]
stanford_jars = find_jars_within_path(stanford_dir)
pos_tagger._stanford_jar = ':'.join(stanford_jars)

text = pos_tagger.tag(word_tokenize("Open app and play movie"))
print(text)

Выход:

[('Open', 'VB'), ('app', 'NN'), ('and', 'CC'), ('play', 'VB'), ('movie', 'NN')]

Я потратил много часов и наконец нашел простое решение для пользователей Windows. В основном это обобщенная версия существующего ответа от alvas, но она легка для отслеживания (надеюсь) для тех, кто новичок в Стэнфордском НЛП и является пользователем Windows.

1) Загрузите модуль, который вы хотите использовать, например, NER, POS и т. Д. В моем случае я хотел использовать NER, поэтому я скачал модуль с http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip

2) Распакуйте файл.

3) Установите переменные среды (classpath и stanford_modules) из разархивированной папки.

import os
os.environ['CLASSPATH'] = "C:/Users/Downloads/stanford-ner-2015-04-20/stanford-ner.jar"
os.environ['STANFORD_MODELS'] = "C:/Users/Downloads/stanford-ner-2015-04-20/classifiers/"

4) установите переменные среды для JAVA, например, там, где у вас установлена ​​JAVA. для меня это было ниже

os.environ['JAVAHOME'] = "C:/Program Files/Java/jdk1.8.0_102/bin/java.exe"

5) импортировать нужный модуль

from nltk.tag import StanfordNERTagger

6) вызвать предварительно подготовленную модель, которая находится в папке классификатора в папке с разархивированным содержимым. добавьте ".gz" в конце для расширения файла. для меня модель, которую я хотел использовать, была english.all.3class.distsim.crf.ser

st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')

7) Теперь запустите парсер!! и мы сделали!!

st.tag('Rami Eid is studying at Stony Brook University in NY'.split())

Обратите внимание, что этот ответ относится к NLTK v 3.0, а не к более поздним версиям.

Я не могу оставить это как комментарий из-за своей репутации, но, поскольку я потратил (впустую?) Некоторое время на решение этой проблемы, я бы предпочел поделиться своей проблемой / решением, чтобы заставить этот анализатор работать в NLTK.

В превосходном ответе от alvas упоминается, что:

например, для парсера не будет каталога модели.

Это привело меня неправильно к:

  • не будьте осторожны с ценностью, которую я ставлю STANFORD_MODELS (и заботиться только о моем CLASSPATH)
  • Покидать ../path/tostanford-parser-full-2015-2012-09/models directory * практически пустой * (или с файлом jar, имя которого не соответствует регулярному выражению nltk)!

Если OP, как и я, просто хотел использовать парсер, это может сбить с толку тем, что при отсутствии загрузки чего-либо еще (без POStagger, без NER,...) и следуя всем этим инструкциям, мы все равно получим ошибку.

В конце концов, для любого CLASSPATH учитывая (следующие примеры и пояснения в ответах из этой ветки) я все равно получу ошибку:

NLTK не удалось найти stanford-parser-(\d+)(.(\ D +))+-models.jar! Установите переменную среды CLASSPATH. Для получения дополнительной информации о stanford-parser-(\d+)(.(\ D +))+-models.jar,

см.: http://nlp.stanford.edu/software/lex-parser.shtml

ИЛИ ЖЕ:

NLTK не удалось найти stanford-parser.jar! Установите переменную среды CLASSPATH. Для получения дополнительной информации о stanford-parser.jar см.: http://nlp.stanford.edu/software/lex-parser.shtml

Хотя, что важно, я мог бы правильно загрузить и использовать синтаксический анализатор, если бы вызвал функцию со всеми указанными аргументами и путем, как в:

stanford_parser_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser.jar'
stanford_model_jar = '../lib/stanford-parser-full-2015-04-20/stanfor-parser-3.5.2-models.jar'    
parser = StanfordParser(path_to_jar=stanford_parser_jar, 
                    path_to_models_jar=stanford_model_jar)

Решение для одного парсера:

Поэтому ошибка пришла от NLTK и как он ищет банки с помощью прилагаемого STANFORD_MODELS а также CLASSPATH переменные среды Чтобы решить это, *-models.jar, с правильным форматированием (чтобы соответствовать регулярному выражению в NLTK код, поэтому no -corenlp-....jar) должен находиться в папке, обозначенной STANFORD_MODELS,

А именно, я впервые создал:

mkdir stanford-parser-full-2015-12-09/models

Затем добавил в .bashrc:

export STANFORD_MODELS=/path/to/stanford-parser-full-2015-12-09/models

И, наконец, путем копирования stanford-parser-3.6.0-models.jar (или соответствующая версия), в:

path/to/stanford-parser-full-2015-12-09/models/

Я мог бы получить StanfordParser загрузить гладко в Python с классическим CLASSPATH это указывает на stanford-parser.jar, На самом деле, как таковой, вы можете позвонить StanfordParser без параметров по умолчанию будет работать.

Совсем недавно новая разработка Стэнфордского парсера, основанная на нейронной модели, обученная с помощью Tensorflow, стала доступной для использования в качестве API-интерфейса Python. Предполагается, что эта модель будет намного более точной, чем модель на основе Java. Вы, безусловно, можете интегрироваться с конвейером NLTK.

Ссылка на парсер. Репозиторий содержит предварительно обученные модели парсеров для 53 языков.

Другие вопросы по тегам