NLTK Chunk Parser:如何逃避特殊字符

时间:2017-02-11 15:47:59

标签: python nlp nltk pos-tagger text-chunking

所以我试图从文本中提取一些信息,我正在使用NLTK分块。

这是我的输入

The stocks show 67% rise, last year it was 12% fall

我想抓拍

67% rise12% fall

POS标记上面的句子显示

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

但在我的数据集中,我有像

这样的东西

5 million dollars

('5', 'CD'), ('man', 'NN'), ('stock', 'NN')

并且也被错误捕获。所以我想在我的规则中包含%符号

Stat: {<CD><%>(<NN>+|<VBN>|JJ)?}

但此规则现在与任何内容都不匹配。如何在我的块规则中转义/包含%

更新

所以,我不明白的是我可以匹配其他特殊字符。例如,如果我有一个规则

XYZ:{<:>}

这匹配输入中的所有:。所以我要做的就是

XYZ:{<%>}

这不起作用。我试图通过

逃避%

XYZ:{<\%>}

但这也不起作用。我试过\\但无济于事。我真的不想修改输入字符串,因为我已经匹配,我想找出匹配字符串的索引。因此,如果我修改输入字符串,那将抛弃我的索引,除非我先进行反向转换

2 个答案:

答案 0 :(得分:0)

好吧,因为它是一个正则表达式,你可以逃脱它。

Stat: {<CD><\%>(<NN>+|<VBN>|JJ)?}

您还可以拥有要替换的关键字列表,以便您的块规则不会变得过长。

e.g。

s = '56% rise and 75% fall'
gen_replacements = [('%', 'PERCENTAGE'), ('perc.', 'PERCENTAGE'), etc]
for ndl, rpl in gen_replacements:
    s = s.replace(' %s ' % ndl, ' %s ' % rpl)

Stat: {<CD><PERCENTAGE>(<NN>+|<VBN>|JJ)?}

答案 1 :(得分:0)

使用类似的模式 &LT; CD &GT;&LT; NN &GT; +