Стэнфордский парсер и 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.
Монтаж
Загрузите NLTK v3 с веб-сайта https://github.com/nltk/nltk. И установить NLTK:
sudo python setup.py установить
Вы можете использовать загрузчик NLTK, чтобы получить Stanford Parser, используя Python:
import nltk nltk.download()
Попробуйте мой пример! (не забудьте изменить пути jar и изменить путь модели в местоположение ser.gz)
ИЛИ ЖЕ:
Скачайте и установите NLTK v3, как описано выше.
Загрузите последнюю версию (текущая версия файла - stanford-parser-full-2015-01-29.zip): http://nlp.stanford.edu/software/lex-parser.shtml
Извлеките standford-parser-full-20xx-xx-xx.zip.
Создайте новую папку ("jars" в моем примере). Поместите извлеченные файлы в эту папку jar: stanford-parser-3.xx-models.jar и stanford-parser.jar.
Как показано выше, вы можете использовать переменные среды (STANFORD_PARSER & STANFORD_MODELS), чтобы указывать на эту папку 'jars'. Я использую Linux, поэтому, если вы используете Windows, пожалуйста, используйте что-то вроде: C://folder//jars.
Откройте файл stanford-parser-3.xx-models.jar с помощью диспетчера архивов (7zip).
Просмотрите файл фляги; Edu / Стэнфорд / NLP / модели / lexparser. Снова извлеките файл с именем "englishPCFG.ser.gz". Запомните место, где вы извлекаете этот файл ser.gz.
При создании экземпляра StanfordParser вы можете указать путь к модели в качестве параметра. Это полный путь к модели, в нашем случае /location/of/englishPCFG.ser.gz.
Попробуйте мой пример! (не забудьте изменить пути 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-разрядную двоичную установку):
- Установите Python 3.4: http://www.python.org/downloads/ (избегайте 64-битных версий)
- Установите Numpy (необязательно): http://sourceforge.net/projects/numpy/files/NumPy/ (версия, в которой указан pythnon3.4)
- Установите NLTK: http://pypi.python.org/pypi/nltk
- Тестовая установка: Пуск>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:
- Загрузите и разархивируйте анализатор с http://nlp.stanford.edu/software/lex-parser.shtml
- Загрузите и распакуйте тегер FULL VERSION с http://nlp.stanford.edu/software/tagger.shtml
- Загрузите и распакуйте тег NER с http://nlp.stanford.edu/software/CRF-NER.shtml
ШАГ 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
- например, для NER, это будет
Добавьте соответствующий каталог модели в
STANFORD_MODELS
переменная (т. е. каталог, в котором вы можете найти предварительно сохраненные модели)- например, для NER, это будет в
stanford-ner-2015-04-20/classifiers/
- например, для POS, это будет в
stanford-postagger-full-2015-04-20/models/
- например, для парсера не будет каталога модели.
- например, для NER, это будет в
В коде видно, что он ищет STANFORD_MODELS
каталог перед добавлением названия модели. Также обратите внимание, что API также автоматически пытается найти в средах ОС `CLASSPATH)
Обратите внимание, что начиная с NLTK v3.1, STANFORD_JAR
переменные устарели и больше не используются. Фрагменты кода, найденные в следующих вопросах Stackru, могут не работать:
- Stanford Dependency Parser Setup и NLTK
- Интерфейс nltk для анализатора Стэнфорда
- Проблемы с импортом Стэнфордского Pos Tagger в NLTK
- Stanford Entity Recognizer (без учета регистра) в Python Nltk
- Как улучшить скорость с Stanford NLP Tagger и NLTK
- Как я могу получить модуль Stanford NLTK Python?
- Стэнфордский парсер и окна NLTK
- Функциональность Stanford Named Entity Recognizer (NER) с NLTK
- Стэнфордский парсер с NLTK выдает пустой вывод
- Извлечь список лиц и организаций, использующих Stanford NER Tagger в NLTK
- Ошибка использования Stanford POS Tagger в NLTK Python
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:
Есть интерфейс Python для Стэнфордского парсера
Если я хорошо помню, парсер 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 языков.