如何在Spacy中为匹配器添加多个模式

问题描述

我想知道如何为匹配器添加不同的模式。我想要做的是这样的事

matcher.add("COUNTRIES",None,*patterncountry)
matcher.add("ZOnes",*patternzones)
matcher.add("DAYS",patterndays)

所以现在我有3种模式。如何达到目的?

解决方法

在SpaCy中,Matcher使您可以根据标记描述列表来匹配序列,而PhraseMatcher使您可以有效地匹配大型术语列表。在您的情况下,PhraseMatcher更适合使用。

import spacy
from spacy.matcher import PhraseMatcher

nlp = spacy.load("en_core_web_sm")
phrase_matcher = PhraseMatcher(nlp.vocab)

countries = [nlp.make_doc(text) for text in ['Canada','United States','Mexico']]
days = [nlp.make_doc(text) for text in ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']]

phrase_matcher.add("COUNTRIES",None,*countries)
phrase_matcher.add("DAYS",*days)


text = 'On Monday I travelled to Canada.'
doc = nlp(text)
matches = phrase_matcher(doc)