我仍在尝试找到最通用的方法,即给定标准正则表达式(Python或Java可以识别),我可以将其传递给spaCy的Matcher或PhraseMatcher,而不必先将其预处理为SpaCy的格式,例如“ REGEX” “。
我已经在stackoverflow上的“向SPACy的Matcher中添加REGEX实体”中提出了一个更具体的问题。 Sophie VL提供了一种很好的可行方法,但是它需要将带有嵌入式\ s +的正则表达式分解为单独的匹配令牌。我尝试使用PhraseMatcher,但它似乎不接受任意的“ REGEX”模式。我要重复在早些时候的2019年6月11日查询中给出的示例。也许有一种方法可以使用自定义属性给出标准正则表达式,但是我一直找不到正确的方法。
nlp = spacy.load("en_core_web_lg")
matcher = PhraseMatcher(nlp.vocab)
pattern = [{"ORTH": {"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
打印出来。我知道现在我应该使用PhraseMatcher或自定义属性,但是还没有弄清楚怎么做。
我只想说Sophie的答案确实帮助我获得了一些不包含空格或连字符的正则表达式模式。我仍在努力处理有关PhraseMatcher和自定义属性的文档,但是期限已到,所以我再次发布此问题。