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

问题描述 投票:0回答:2

所以我试图从文本中提取一些信息,我正在使用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:{<:>}

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

XYZ:{<%>}

这不起作用。我试图逃避%

XYZ:{<\%>}

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

python nlp nltk pos-tagger text-chunking
2个回答
0
投票

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

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

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

EG

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)?}

0
投票

使用类似<CD> <NN> +的模式

© www.soinside.com 2019 - 2024. All rights reserved.