Я пытаюсь выполнить сопоставление строки даты в пространстве, и две части совпадают по отдельности, но объединенный результат не возвращает совпадение.
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'},
{'IS_PUNCT': True, 'OP': '?'},
{'IS_DIGIT': True}
]
},
{
"label": "DATE_NUM",
"pattern": [
{'TEXT': {"REGEX": "^[0-9](st|nd|rd|th)", '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_)
Строка для сопоставления равна
4 января 2013 г.
Результат выполнения:
4th DATE_NUM
January, 2013 DATE_TEXT
Я не могу получить совпадение на DATE_COMBINED, что я делаю неправильно
ОБНОВЛЕНИЕ Я замечаю, когда я печатаю все токены, пространство между 4-м и январем также считается токеном.
[
{'TEXT': {"REGEX": "^[0-9]{1,2}(st|nd|rd|th)$", 'LENGTH': 3}},
{"IS_SPACE": True},
{'POS': 'PROPN'},
{'IS_PUNCT': True, 'OP': '?'},
{'IS_DIGIT': True}
]
Это работает