2016-01-23 18 views
5

Używam parsera Stanford z nltk w Pythonie i otrzymałem pomoc od Stanford Parser and NLTK, aby skonfigurować biblioteki Stanford nlp.Dlaczego parser Stanford z nltk nie przetwarza poprawnie zdania?

from nltk.parse.stanford import StanfordParser 
from nltk.parse.stanford import StanfordDependencyParser 
parser  = StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz") 
dep_parser = StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz") 
one = ("John sees Bill") 
parsed_Sentence = parser.raw_parse(one) 
# GUI 
for line in parsed_Sentence: 
     print line 
     line.draw() 

parsed_Sentence = [parse.tree() for parse in dep_parser.raw_parse(one)] 
print parsed_Sentence 

# GUI 
for line in parsed_Sentence: 
     print line 
     line.draw() 

jestem coraz niewłaściwych analizowania i zależnościami drzew, jak pokazano w poniższym przykładzie, to jest traktowanie „widzi” jako rzeczownik zamiast czasownika.

Example parse tree Example dependency tree

Co należy zrobić? Działa doskonale, gdy zmieniam zdanie, np. (Jeden = "John zobacz Bill"). Prawidłowe ouput tym zdaniu można oglądać stąd correct ouput of parse tree

Przykład prawidłowej mocy również pokazano poniżej:

correctly parsed

correct dependency parsed tree

+0

proszę opublikuj pełny fragment kodu, aby inni wiedzieli, skąd pochodzi 'dep_parser' z =) – alvas

Odpowiedz

6

Ponownie nie model jest idealny (patrz Python NLTK pos_tag not returning the correct part-of-speech tag); P

Możesz wypróbować "dokładniejszy" analizator składni, korzystając z NeuralDependencyParser.

Pierwsza konfiguracja parser właściwie z poprawnych zmiennych środowiskowych (patrz Stanford Parser and NLTK i https://gist.github.com/alvations/e1df0ba227e542955a8a), a następnie:

>>> from nltk.internals import find_jars_within_path 
>>> from nltk.parse.stanford import StanfordNeuralDependencyParser 
>>> parser = StanfordNeuralDependencyParser(model_path="edu/stanford/nlp/models/parser/nndep/english_UD.gz") 
>>> stanford_dir = parser._classpath[0].rpartition('/')[0] 
>>> slf4j_jar = stanford_dir + '/slf4j-api.jar' 
>>> parser._classpath = list(parser._classpath) + [slf4j_jar] 
>>> parser.java_options = '-mx5000m' 
>>> sent = "John sees Bill" 
>>> [parse.tree() for parse in parser.raw_parse(sent)] 
[Tree('sees', ['John', 'Bill'])] 

Należy pamiętać, że NeuralDependencyParser produkuje tylko drzewa Zależność:

enter image description here

+0

Używam modelu" englishPCFG.ser.gz "i korzystasz z modelu" e nglish_UD.gz ". Ale jak możemy wybrać te modele, abyśmy mogli wybrać właściwy? –

+0

Nie ma idealnego modelu, nie ma też dobrego/złego, tylko takiego, który najlepiej pasuje do danych. Powiedziałbym więc, wypróbuj wszystkie z nich, a następnie oceń je na podstawie tego, do czego służy ostateczny cel analiz. – alvas

+0

Naprawdę dziękuję, .... Mam błąd pomóżcie mi w tym: –