我正在使用NLTK分块,我想捕获匹配我的规则的字符串。例如NLTK:如何访问分块字符串
这里是我的输入
The stocks show 67% rise, last year it was 12% fall
我想捕捉
67% rise
和12% fall
词性标注上面的句子表明
('The', 'DT'), ('stocks', 'NNS'), ('show', 'VBP'), ('67', 'CD'), ('%', 'NN'), ('rise', 'NN'), (',', ','), ('last', 'JJ'), ('year', 'NN'), ('it', 'PRP'), ('was', 'VBD'), ('12', 'CD'), ('%', 'NN'), ('fall', 'NN')
现在,我想出了一个简单的规则
Stat: {<CD><NN>(<NN>+|<VBN>|JJ)?}
效果很好,并且捕获
('67', 'CD'), ('%', 'NN'), ('rise', 'NN')
('12', 'CD'), ('%', 'NN'), ('fall', 'NN')
现在,我想提取被抓获的确切字符串。所以,我想
67% rise
和12% fall
我试图
current=[]
for word,tag in subtree.leaves():
current.append(word)
print ' '.join(current)
,但我得到
67 % rise
和12 % fall
通知空间%
和数字之间。这在逻辑上是正确的,但不是所需的输出。我想要确切的字符串,因为我想知道捕获的字符串的开始和结束索引。
我该如何做到这一点?
%_always_是否加入了数字,即您总是有'67%'而不是'67%'? – Chuck
是的,绝对是 – AbtPst
标记器不会跟踪字符串中的标记的来源,所以任何解决方案都会有些破解。我肯定会解决这个级别的问题(将简单标记与原始字符串相匹配),然后根据标记索引标识出您之后的块。 – alexis