2015-10-12 158 views
0

我是NLTK的新手,我想爲我的玩具項目嘗試語法分析器。Python NLTK解析標籤文本:如何檢索標籤文本

這裏是我使用的代碼:

tokens = nltk.regexp_tokenize(test_sentence, ptrn_for_tokenizer, flags = flags) 
tagged_text = regexp_tagger.tag(tokens) 
only_tags = [tag for text, tag in tagged_text] 
grammar = CFG.fromstring(GRAMMAR) 
parser = nltk.ChartParser(grammar, trace=0) 
trees = parser.parse(only_tags) 

所以我記號化與regexs的文本,然後使用正則表達式的其他標記我的文本,最後我用解析器有語法樹。但是,解析僅通過標籤(only_tags)完成,我無法恢復標籤文本。

如何做到這一點?這是錯誤的方式嗎?

+0

mhhh ...沒有答案的評論。愚蠢的問題? – robob

回答

1

我明白你爲POS標籤編寫語法的動機:NLTK基於規則的解析器沒有足夠的詞彙量,因爲它們不是用於實際應用的教學工具。我不太清楚你的分析樹是什麼樣的,但是如果POS標籤是葉子節點,你可以編輯樹並把它放回去。

我會先手工編碼一個樣本樹什麼解析器可能給你:

mytree = nltk.Tree.fromstring("(S (DP D (AP A N)) (VP V))") 

因此,這裏是如何把話說回來:

>>> tokens = "the big dog runs".split() 
>>> for n, pos in enumerate(mytree.leaves()): 
     mytree[mytree.leaf_treeposition(n)] = nltk.Tree(pos, [ tokens[n] ]) 
>>> print(mytree) 
(S (DP (D the) (AP (A big) (N dog))) (VP (V runs))) 
+0

感謝您的評論。我現在用Chunk語法切換到RegexParser。 NLTK提供的CFG解析器似乎不那麼嚴格。 – robob

+1

我建議你看看統計分析。除非您有足夠的資源編寫成千上萬的書面規則,否則手寫規則不會被嚴重使用。 – alexis