如何在SpaCy中定义“或”匹配器模式?

问题描述

有人知道如何在SpaCy中定义“ NNP / NN NNP / NN”的匹配模式,这意味着所需的匹配是“ NNP NNP”,“ NNP NN”,“ NN NNP”或“ NN NN” ?谢谢!

解决方法

使用IN运算符,该运算符检查列表中的值:

tag_nn_nnp = {"TAG": {"IN": ["NN","NNP"]}}
pattern = [tag_nn_nnp,tag_nn_nnp]
matcher.add("NN_NNP_2",[pattern])

请参阅:https://spacy.io/usage/rule-based-matching#adding-patterns-attributes-extended

,

没有or逻辑运算符,但是在您的特定情况下,您可以使用规则列表或正则表达式规则进行模拟:

规则列表:

patterns = [
   [{'TAG': 'NNP'},{'TAG': 'NN'}],[{'TAG': 'NN'},{'TAG': 'NNP'}],# add more if required
]

,然后将所有模式添加到匹配器。参见this example

正则表达式

仅适用于现代spacy版本,但我承认我尚未对此进行测试):

pattern = [{"POS": {"REGEX": "^NNP?$"}},{"POS": {"REGEX": "^NNP?$"}}]

注释

“ POS”属性是指通用PoS标记集,该标记集将名词标记为PROPN或NOUN。对于英语,您可以使用“ TAG”,它会为您提供PTB标签集(NN,NNP等),但这实际上取决于您要使用的内容