Я работаю над использованием пространства для некоторых задач NLP, таких как вычисление частоты сущностей и оценок PMI (ранжирование отношений между сущностями организации и леммами). В моем корпусе часто есть c организаций с различными перестановками (например, Harman, HARMAN, Harman International ...), которые я хочу всегда признавать как одно целое. Таким образом, при подсчете частот все они рассматриваются как одна организационная сущность, а не как отдельные уникальные сущности.
Я считаю, что spacy.pipeline.EntityRuler должен быть способом редактирования и обновления пространственного модуля, но я не получить желаемого результата. После выполнения приведенного ниже кода список объектов не обновляется. Я все еще возвращаю различные перестановки организации как уникальные сущности.
Я не уверен, что я делаю не так, поэтому приветствую любую помощь!
Спасибо.
Код:
import spacy
from spacy.pipeline import EntityRuler
nlp = spacy.load('en_core_web_sm', disable = ['parser','tagger'])
ruler = EntityRuler(nlp, overwrite_ents = True) #replace entities that may exist with the following
patterns = [{"label": "ORG", "pattern": [{"TEXT":"HARMAN"}, {"TEXT":"International"}], "id": "harman"},
{"label": "ORG", "pattern": [{"TEXT":"HARMAN"}], "id": "harman"},
{"label": "ORG", "pattern": [{"TEXT":"Harman"}], "id": "harman"},
{"label": "ORG", "pattern": [{"TEXT":"Harman"}, {"TEXT":"International"}], "id": "harman"}
]
ruler.add_patterns(patterns)
nlp.add_pipe(ruler, before="ner")
corpus_nlp = [nlp(corpus['Body'][i]) for i in corpus.index]
corpus_nlp[49].ents
(Харман, Зиннов, ХАРМАН, «Зона лидерства»)