在没有模型的情况下使用 spacy 的匹配器

Using spacy's Matcher without a model

我想在 spaCy 还没有可用模型的新语言(希伯来语)上使用 spaCy 的匹配器 class。

我找到了一个有效的分词器 + 词性标注器(来自 Stanford NLP),但我更喜欢 spaCy,因为它的 Matcher 可以帮助我做一些基于规则的 NER。

基于规则的 Matcher 可以使用 POS 标记的文本而不是标准的 NLP 管道吗?

如果您想使用 spaCy 训练新的统计模型,您应该阅读 Training spaCy’s Statistical Models 上的文档。

据我所知,spaCy 还没有经过训练的希伯来语模型。为了让你使用没有模型的语言,

from spacy.lang.he import Hebrew
nlp = Hebrew()
#or
nlp = spacy.blank("he")

很确定您可以从这里构建基于规则的匹配器。

您可以手动为来自其他来源的空间文档设置单词和标签,然后使用匹配器。这是一个使用英语 words/tags 的示例,只是为了演示:

from spacy.lang.he import Hebrew
from spacy.tokens import Doc
from spacy.matcher import Matcher

words = ["my", "words"]
tags = ["PRP$", "NNS"]

nlp = Hebrew()
doc = Doc(nlp.vocab, words=words)
for i in range(len(doc)):
    doc[i].tag_ = tags[i]

# This is normally set by the tagger. The Matcher validates that
# the Doc has been tagged when you use the `"TAG"` attribute.
doc.is_tagged = True

matcher = Matcher(nlp.vocab)
pattern = [{"TAG": "PRP$"}]
matcher.add("poss", None, pattern)
print(matcher(doc))
# [(440, 0, 1)]

因为我正在使用 stanfordnlp - 似乎差距更近了:-)

https://github.com/explosion/spacy-stanfordnlp