问题描述
有人知道如何在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等),但这实际上取决于您要使用的内容