2016-01-23 11 views
5

Stanford nlp kitaplıklarını kurmak için nltk ile Stanford ayrıştırıcısını kullanıyorum ve Stanford Parser and NLTK'dan yardım aldım. yerine fiilin isim olarak aşağıdaki örnekte görüldüğü gibiNeden nltk ile Stanford ayrıştırıcısı doğru bir cümle ayrıştırma değil?

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() 

Yanlış ayrıştırma ve bağımlılık ağaçlarını alıyorum, bu davranıyor 'gördüğünü'.

Example parse tree Example dependency tree

ne yapmalıyım? Cümleyi değiştirdiğimde (örn. "Faturalama" Bill) mükemmel şekilde çalışır. bu cümle için doğru çıkışına buradan izlenebilir correct ouput of parse tree

doğru çıktısı örneği de aşağıda gösterilmiştir:

correctly parsed

correct dependency parsed tree

+0

Lütfen tüm kod snippet'ini yayınlayın, böylece '' dep_parser' 'ifadesi nereden geliyor?) – alvas

cevap

6

Bir kez daha, bir model mükemmel değildir (Python NLTK pos_tag not returning the correct part-of-speech tag bakınız) NeuralDependencyParser'u kullanarak "daha doğru" bir ayrıştırıcıyı deneyebilirsiniz.

İlk kurulum sonra doğru ortam değişkenleri (Stanford Parser and NLTK ve https://gist.github.com/alvations/e1df0ba227e542955a8a bakınız), düzgün ayrıştırıcı:

>>> 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'])] 

NeuralDependencyParser sadece bağımlılık ağaçlarını üretir unutmayın yapın:

enter image description here

+0

"englishPCFG.ser.gz" modelini kullanıyorum ve model e kullanıyorsunuz nglish_UD.gz ". Ancak, bu modelleri nasıl seçebiliriz, böylece doğru olanı seçebilelim mi? –

+0

Mükemmel bir model yok, doğru/yanlış olan da yok, sadece verilerinize en uygun olanı. Yani, hepsini deneyin ve sonra ayrıştırmanın nihai amacının ne olduğuna dair temelini değerlendirin. – alvas

+0

Gerçekten teşekkürler, .... Bir hatam var lütfen bana yardım edin: –