我正在尝试按日期对日期字符串进行匹配,并且两个部分分别匹配,但组合结果未返回匹配。
rule_patterns = [
{
"label": "DATE_COMBINED","pattern": [
{'TEXT': {"REGEX": "^[0-9](st|nd|rd|th)",'LENGTH': 3}},{'POS': 'PROPN'},{'IS_PUNCT': True,'OP': '?'},{'IS_DIGIT': True}
]
},{
"label": "DATE_TEXT","pattern": [
{'POS': 'PROPN'},{
"label": "DATE_NUM",'LENGTH': 3}}
]
},]
nlp = spacy.load("en_core_web_sm",disable=["ner"])
ruler = EntityRuler(nlp)
matcher = Matcher(nlp.vocab)
ruler.add_patterns(rule_patterns)
nlp.add_pipe(ruler)
doc = nlp(text)
for ent in doc.ents:
print(ent.text,ent.label_)
要匹配的字符串是
2013年1月4日
运行的输出是
4th DATE_NUM
January,2013 DATE_TEXT
我做错了任何事情,都无法在DATE_COMBINED上找到比赛
更新 我注意到当我打印所有令牌时,也将4月和1月之间的空间也视为令牌。
[
{'TEXT': {"REGEX": "^[0-9]{1,2}(st|nd|rd|th)$",{"IS_SPACE": True},{'IS_DIGIT': True}
]
这有效