Быстрое сопоставление условных или / и Python

#python #nlp #spacy #matcher

#python #nlp #spacy #сопоставитель

Вопрос:

Я хочу классифицировать следующие ключевые слова:

 import spacy
from spacy.matcher import PhraseMatcher

nlp = spacy.load("en_core_web_sm")
phrase_matcher = PhraseMatcher(nlp.vocab)

cat_patterns = [nlp(text) for text in ('cat', 'cute', 'fat')]
dog_patterns = [nlp(text) for text in ('dog', 'fat')]

matcher = PhraseMatcher(nlp.vocab)
matcher.add('Category1', None, *cat_patterns)
matcher.add('Category2', None, *dog_patterns)

doc = nlp("I have a white cat. It is cute and fat; I have a black dog. It is fat,too")
matches = matcher(doc)
for match_id, start, end in matches:
    rule_id = nlp.vocab.strings[match_id]  # get the unicode ID, i.e. 'CategoryID'
    span = doc[start : end]  # get the matched slice of the doc
    print(rule_id, span.text)

#Output
#Category1 cat
#Category1 cute
#Category1 fat
#Category2 fat
#Category2 dog
#Category1 fat
#Category2 fat
 

Однако мой ожидаемый результат: если текст содержит cat и cute или cat и fat вместе, он попадет в первую категорию; если текст содержит dog и fat вместе, то он попадет во вторую категорию.

 #Category1 cat cute
#Category1 cat fat
#Category2 dog fat
 

Возможно ли это сделать, используя аналогичный алгоритм? Спасибо

Комментарии:

1. Что вы подразумеваете под «текстом, содержащим cat и cute или cat и fat вместе»? В том же предложении?

2. Привет, это выглядит как ожидаемый результат: категория 1 — симпатичный кот, например.