2017-02-19 2 views
4

Учитывая следующее предложение:Как получить дерево разбора с помощью python nltk?

The old oak tree from India fell down. 

Как я могу получить следующее дерево разбора представление предложения с помощью питона NLTK?

(ROOT (S (NP (NP (DT The) (JJ old) (NN oak) (NN tree)) (PP (IN from) (NP (NNP India)))) (VP (VBD fell) (PRT (RP down))))) 

Мне нужен полный пример, который я не мог найти в Интернете!


Редактировать

Я прошел через this book chapter, чтобы узнать о разборе использовании NLTK, но проблема, мне нужна грамматику для разбора предложения или фразы, которые у меня нет. Я нашел this stackoverflow post, который также спросил о грамматике для синтаксического анализа, но там нет убедительного ответа.

Итак, я ищу полный ответ, который может дать мне дерево синтаксического анализа, заданное предложением.

+0

NLTK имеет несколько анализаторов (http://www.nltk.org/api/nltk.parse.html) IIRC I для предпочтений использовать один Стэнфорд. –

+0

Можете ли вы дать мне пример кода? У меня действительно тяжелое время в этом. –

+0

Мне нужно убежать, если никто не опубликует ничего в ближайшие 12 часов, я вернусь и отправлю что-нибудь. Прошло некоторое время, я должен был выкопать часть своего старого кода (и, возможно, перевести его из julia на python). –

ответ

4

Это альтернативное решение, использующее StanfordCoreNLP вместо nltk. Немного библиотеки, которая построена поверх StanfordCoreNLP, я лично использую pycorenlp для разбора предложения.

Сначала вы должны скачать stanford-corenlp-full папку, в которой у вас есть *.jar файл внутри. И запустите сервер внутри папки (порт по умолчанию - 9000).

export CLASSPATH="`find . -name '*.jar'`" 
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer [port?] # run server 

Затем в Python вы можете выполнить следующее, чтобы пометить предложение.

from pycorenlp import StanfordCoreNLP 
nlp = StanfordCoreNLP('http://localhost:9000') 

text = "The old oak tree from India fell down." 

output = nlp.annotate(text, properties={ 
    'annotators': 'parse', 
    'outputFormat': 'json' 
}) 

print(output['sentences'][0]['parse']) # tagged output sentence 
+0

спасибо, что это сработало для меня. просто интересно, доступен ли какой-либо более простой метод для выполнения этой задачи! –

+0

А, я не уверен, есть ли в NLTK быстрое решение для разбора дерева. Использование StanfordCoreNLP с обложкой pycorenlp кажется хорошим для этой задачи. Может быть, есть способ, которым вы можете добавить путь StanfordNLP для NLTK, чтобы разобрать текст? Мне также хотелось бы узнать альтернативные решения! – titipata

+0

Стартовый сервер @titipat дает следующее сообщение об ошибке: 'Недопустимый максимальный размер кучи: -Xmx4g. указанный размер превышает максимально отображаемый размер. Ошибка: не удалось создать виртуальную машину Java. Ошибка: произошло фатальное исключение. Программа выйдет. ' – user1700890

Смежные вопросы