2016-10-04 1 views
0

Ich möchte nicht nur das Ergebnis von RegexpParser, sondern auch den Index des Ergebnisses erhalten. Zum Beispiel der Startindex des Wortes und der Endindex des Wortes.Wie bekomme ich den Index des Ergebnisses von nltk.RegexpParser?

import nltk 
from nltk import word_tokenize, pos_tag 
text = word_tokenize("6 ACCESSKEY attribute can be used to specify many 6.0 shortcut key 6.0") 
tag = pos_tag(text) 

print tag 

# grammar = "NP: {<DT>?<JJ>*<NN|NNS|NNP|NNPS>}" 
grammar2 = """Triple: {<CD>*<DT>?<CD>*<JJ>*<CD>*<VBD|VBG>*<CD>*<NN.*>+<CD>*<MD>*<VB.*>+<JJ>?<RB>?<CD>*<DT>?<NN.*>*<IN*|TO*>?<DT>?<CD>*<JJ>*<CD>*<VBD|VBG>*<CD>*<NN.*>+<CD>*} 
       Triple: {<CD>*<DT>?<CD>*<JJ>*<CD>*<VBD|VBG>*<CD>*<NN.*>+<CD>*<MD>*<VB.*>+<JJ>?<RB>?<CD>*<DT>?<NN.*>*<TO>?<VB><DT>?<CD>*<JJ>*<CD>*<VBD|VBG>*<CD>*<NN.*>+<CD>*} 
       """ 

grammar = """ 
       NP: {<CD>*<DT>?<CD>*<JJ>*<CD>*<VBD|VBG>*<CD>*<NN.*>+<CD>*} 
       VP: {<VB.*>+<JJ>*<RB>*<JJ>*<VB.*>?<DT>?<NN|NP>?<IN*|TO*>?} 
       """ 
cp = nltk.RegexpParser(grammar) 
result = cp.parse(tag) 
print(result) 

result.draw() 

Antwort

0

Da Sie den Parser tokengekennzeichneten Text geben, gibt es keine Möglichkeit, es die Original-Offsets erraten kann (wie könnte es wissen, wie viel Platz zwischen den Tokens war). Aber glücklicherweise akzeptiert die parse() Methode zusätzliche Informationen, die einfach an die Ausgabe weitergegeben werden.

In Ihrem Beispiel der Eingang (Sie gespeichert es in die Variable tag schlecht genannt) sieht wie folgt aus:

[('6', 'CD'), 
('ACCESSKEY', 'NNP'), 
('attribute', 'NN'), 
... 

Wenn Sie es

[('6', 'CD', 0, 1), 
('ACCESSKEY', 'NNP', 2, 11), 
('attribute', 'NN', 12, 21), 
... 

zu

verwalten zu ändern und füttern diese zu der Parser, dann werden die Offsets in den Parser-Baum aufgenommen:

Tree('S', 
    [Tree('NP', [('6', 'CD', 0, 1), 
        ('ACCESSKEY', 'NNP', 2, 11), 
        ('attribute', 'NN', 12, 21)]), 
     ... 

Wie d o Sie erhalten die Offsets in die markierte Sequenz? Nun, ich werde dies als Programmierübung für Sie verlassen. Hinweis: Suchen Sie nach der span_tokenize() Methode der Wort-Tokenizer.

+0

Warum bist du so schlau und geduldig, zu cool! –

+0

Eigentlich kann ich die Offsets bekommen, es ist nicht so schwer. Auf jeden Fall vielen Dank! –

Verwandte Themen