我编写了以下正则表达式来标记某些短语模式
pattern = """
P2: {<JJ>+ <RB>? <JJ>* <NN>+ <VB>* <JJ>*}
P1: {<JJ>? <NN>+ <CC>? <NN>* <VB>? <RB>* <JJ>+}
P3: {<NP1><IN><NP2>}
P4: {<NP2><IN><NP1>}
"""
此模式将正确标记短语,例如:
a = 'The pizza was good but pasta was bad'
并用两个短语给出所需的输出:
但是,如果我的句子是这样的:
a = 'The pizza was awesome and brilliant'
只匹配短语:
'pizza was awesome'
而不是想要的:
'pizza was awesome and brilliant'
如何为第二个示例合并regex模式?
首先,让我们看看NLTK提供的POS标签:
(注意:以上是NLTK v3.1的输出
pos_tag
,旧版本可能有所不同)你想要捕捉的本质是:
所以让我们用这些模式来捕捉它们:
这就是硬编码的“作弊”!!!
让我们回到POS模式:
可以简化为:
因此,您可以在regex中使用可选运算符,例如:
很可能你用的是旧的tagger,这就是为什么你的模式不同,但我想你看到了如何使用上面的例子捕捉你需要的短语。
步骤如下:
pos_tag
检查POS模式是什么RegexpParser
相关问题 更多 >
编程相关推荐