python - 如何在 Spacy 中向匹配器中添加多个模式
问题描述
我想知道如何向匹配器添加不同的模式。我想要的是做这样的事情
matcher.add("COUNTRIES",None,*patterncountry)
matcher.add("ZONES",None,*patternzones)
matcher.add("DAYS",None,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",None, *days)
text = 'On Monday I travelled to Canada.'
doc = nlp(text)
matches = phrase_matcher(doc)