python - 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']
解决方案
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']
推荐阅读
- php - OAuth - Google API unsupported_grant_type
- python - for 循环未完成
- django - 用户自定义模板
- reactjs - React 助手以响应组件
- c - 'For' 循环作为 (i
我的 for循环在此代码中无法正常工作。
#include <stdio.h> #include <string.h> #include <math.h> #inclu
- java - 在自定义 Android 相机应用中拍照时如何只允许特定比例?
- android - 我如何知道是否安装了任何导航应用程序(例如 Google Maps、Yandex Navigator 等)?
- kubernetes - 如何从我的 k3s 中删除 calicoctl 和 iptables(由 calico 安装创建)
- c++ - GNUMakefile 中 INCS 、 LIBS 和 OBJS 的可选包含,制作版本 3.82
- javascript - 实现了具有意外价值的 AES 256