我如何使用spacy来检测像这样的模式
mygov-24.mygov.ca - last updated: 06/05/21
我想检测以下模式:
- mygov-24.my.gov.ca-上次更新时间:06/05/21
- mygov-24.my.gov.ca-上次更新时间:02/04/21
- mygov-24.my.gov.ca-上次更新时间:01/02/21
正如你所看到的,日期发生了变化,但一切都保持不变。如何使用spacy来创建模式匹配器,以告诉输入字符串是否具有相同的模式?此外,如果检测到模式,我想提取日期。斯帕西可能这样吗?
我经历了,https://spacy.io/usage/rule-based-matching但不确定从哪里开始。
EDIT给定一组如上所述的动态短语,是否有方法识别短语中的变量?
您可以使用匹配器检测它们,使用类似的代码
import spacy
from spacy.matcher import Matcher
nlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)
pattern = [{'ORTH': 'mygov-24.mygov.ca'}, {'ORTH':'-'}, {'ORTH':'last'}, {'ORTH':'updated'}, {'ORTH':':'},
{'ORTH': {'REGEX':r'^d{1,2}/d{1,2}/d{2}(?:d{2})?$'}}];
matcher.add("last_updated", [pattern])
text = r'It was here, mygov-24.mygov.ca - last updated: 06/05/21. Next: mygov-24.mygov.ca - last updated: 02/04/21. And one more: mygov-24.mygov.ca - last updated: 01/02/21'
doc = nlp(text)
matches = matcher(doc)
matches = matcher(doc, as_spans=True)
for span in matches:
print(span.text)
输出:
mygov-24.mygov.ca - last updated: 06/05/21
mygov-24.mygov.ca - last updated: 02/04/21
mygov-24.mygov.ca - last updated: 01/02/21
^d{1,2}/d{1,2}/d{2}(?:d{2})?$
正则表达式匹配
^
-以开头d{1,2}
-一位或两位/
-然后有一个/
d{1,2}/
-然后有一个或两个数字和/
d{2}
-两位数(?:d{2})?
-额外可选两位数字$
-令牌结束