regex - 在 spaCy PhraseMatcher 上使用正则表达式
问题描述
我有以下代码,尝试使用 PhraseMatcher 匹配是否有速度,例如句子中的“44 mph”。
import spacy
from spacy.matcher import PhraseMatcher
import re
nlp = spacy.load('en_core_web_sm')
speed_flag = lambda text: bool(re.search(r'(?i)\d+\s?mph', text))
IS_SPEED = nlp.vocab.add_flag(speed_flag)
matcher = PhraseMatcher(nlp.vocab)
matcher.add('MPH', None, [{IS_SPEED: True}])
doc = nlp(u'Car was going 44 mpH.')
matches = matcher(doc)
print(matches)
for match_id, start, end in matches:
span = doc[start:end]
print(span.text)
这会返回一个空列表,但是re.compile(r'([M-m][P-p][H-h])')
会返回“Mph”、“mpH”、“mPh”等的正确答案,并re.compile(r'([0-9]+)')
返回我文档中的任何数字。
我在这里使用示例来构造它:language-features#regex ...另外,我([0-9]+) ?([M-m][P-p][H-h])
在 python 解释器中测试了我的正则表达式模式,它确实有效。
我意识到原始示例是使用完成的,Matcher
并且我正在尝试使用PhraseMatcher,
不接受正确输入(即字典列表)来执行此操作。
关于如何实现这一目标的任何想法。
解决方案
推荐阅读
- artifactory - 从 docker artifactory 存储库中删除文件夹不会释放磁盘空间
- python - Python重叠过程?
- 3d - 点云围绕任意轴的 3D 旋转
- c# - 给定用户名、密码和子域名,如何获取用户帐户的顶级域名?
- asp.net - 我的 aspx 注册页面的代码不起作用
- r - 使用 rvest 从 ballball-reference.com 获取表格
- c++ - 更好(更快)的算法来比较整数向量的 2 个向量?
- javascript - Html/Js 帮助尝试允许用户从文本框和保存按钮进行编辑
- javascript - 无法将超时设置为无穷大
- php - 使用条带支付商家给客户