#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 — симпатичный кот, например.