在spaCy PhraseMatcher上使用正则表达式

时间:2018-08-24 21:12:52

标签: regex python-3.x pattern-matching spacy

我有以下代码,尝试使用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]+)')返回我的文档中的任何数字。

我在这里使用示例来构造它:linguistic-features#regex ...另外,我在python解释器中测试了我的正则表达式模式([0-9]+) ?([M-m][P-p][H-h]),它确实起作用。

我意识到原来的示例是使用Matcher完成的,并且我尝试使用PhraseMatcher,来接受此错误输入(即,词典列表)。

关于如何实现这一目标的任何想法。

0 个答案:

没有答案