如何在SpaCy中定义"or"匹配器模式?



有人知道如何定义"NNP/NN NNP/NN";在SpaCy中,这意味着期望的匹配是"匹配";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-模式属性扩展

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

规则列表:

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

然后将所有图案添加到匹配器中。参见此示例

Regex

只适用于现代spacy版本,但我承认我还没有测试过(:

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

备注

";POS";属性是指通用的PoS标记集,它将名词标记为PROPN或NOUN。对于英语,你可以使用";TAG";,它会给你PTB标签集(NN、NNP等(,但这实际上取决于你在之后是什么