使用Spacy检测动态模式并提取变量



我如何使用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})?-额外可选两位数字
  • $-令牌结束

最新更新