【发布时间】:2019-10-25 06:27:40
【问题描述】:
我正在尝试将由正则表达式定义的实体添加到 SpaCy 的 NER 管道。理想情况下,我应该能够使用从具有已定义实体类型的 json 文件加载的任何正则表达式。例如,我正在尝试执行下面的代码。
下面的代码显示了我正在尝试做的事情,遵循 Spacy 关于使用正则表达式的自定义属性的讨论中给出的示例。我曾尝试以各种方式(对 Doc、Span、Token)调用“set_extension”方法,但无济于事。我什至不确定我应该将它们设置为什么。
nlp = spacy.load("en_core_web_lg")
matcher = Matcher(nlp.vocab)
pattern = [{"_": {"country": {"REGEX": "^[Uu](\.?|nited) ?[Ss](\.|tates)$"}}}]
matcher.add("US", None, pattern)
doc = nlp(u"I'm from the United States.")
matches = matcher(doc)
for match_id, start, end in matches:
string_id = nlp.vocab.strings[match_id]
span = doc[start:end]
print(match_id, string_id, start, end, span.text)
我希望match_id, string_id 3 4 United States 被打印出来。
相反,我收到的是AttributeError: [E046] Can't retrieve unregistered extension attribute 'country'. Did you forget to call the 'set_extension' method?
【问题讨论】: