spacy 如何制作一个名词-名词匹配器,里面没有白色 space?

spacy how do I make a matcher which is noun-noun without white space within it?

我试图制作一个可以检测像

这样的词的匹配器

'all-purpose'

我正在尝试制作类似

的图案

pattern=[{'POS':'NOUN'}, {'ORTH':'-'},{'POS':'NOUN'}]

但是,我意识到它只能找到像

这样的匹配项

'all - purpose' 标记之间带有白色 space 而不是 'all-purpose'.

如何制作这样的匹配器? 它必须是像名词-名词这样的通用模式,而不是 spacy 文档

中示例中的特定词,如 'Barak Obama'

最佳,

你到底想匹配什么?使用 en_core_web_sm,“通用”是三个标记,all 为我提供了 ADV POS 标签。所以这可能是您的匹配模式的问题。如果您只想要带连字符的单词,这可能是更好的匹配:

pattern = [{'IS_ALPHA': True}, {'ORTH':'-'}, {'IS_ALPHA': True}]

更一般地说,您的模式只匹配三个标记是正确的,尽管这不需要白色 space - 这取决于标记器的工作方式。例如,that's 没有 space 而是两个标记。

如果您正在查找作为一个标记出现的带连字符的词并希望匹配它们,您可以使用 regular expressions in Matcher rules。这是文档中如何工作的示例:

pattern = [{"TEXT": {"REGEX": "deff?in[ia]tely"}}]

在你的情况下,它可能看起来像这样:

pattern = [{"TEXT": {"REGEX": "-"}}]