首页 > 解决方案 > spaCy 匹配器无法识别除第一个之外的模式

问题描述

无法找到我的模式在哪里出错导致结果。

我要查找的句子:“#1 – January 31, 2015”以及遵循此格式的任何日期。

图案pattern1=[{'ORTH':'#'},{'is_digital':True},{'is_space':True},{'ORTH':'-'},{'is_space':True},{'is_alpha':True},{'is_space':True},{'is_digital':True},{'is_punct':True},{'is_space':True},{'is_digital':True}]

打印代码:print("Matches1:", [doc[start:end].text for match_id, start, end in matches1])

结果:['#', '#', '#']

预期结果:['#1 – January 31, 2015','#5 – March 15, 2017','#177 – Novenmber 22, 2019']

标签: pythonnlpspacy

解决方案


Spacy 的匹配器对标记进行操作,句子中的单个空格不会产生标记。还有一些类似于连字符的不同字符:破折号、减号等。对此必须小心。以下代码有效:

import spacy
nlp = spacy.load('en_core_web_lg')
from spacy.matcher import Matcher
pattern1=[{'ORTH':'#'},{'IS_DIGIT':True},{'ORTH':'–'},{'is_alpha':True},{'IS_DIGIT':True},{'is_punct':True},{'IS_DIGIT':True}]

doc = nlp("#1 – January 31, 2015")

matcher = Matcher(nlp.vocab)
matcher.add("p1", None, pattern1)

matches1 = matcher(doc)
print(" Matches1:", [doc[start:end].text for match_id, start, end in matches1])
# Matches1: ['#1 – January 31, 2015']



推荐阅读