Spacy-lookup是非常大的词典的实体匹配器,它使用FlashText模块。在下面的第二种情况下,标点符号似乎阻止了它与实体的匹配。
有人知道为什么会发生这种情况以及如何解决吗?
import spacy
from spacy_lookup import Entity
nlp = spacy.load("en_core_web_sm", disable = ['NER'])
entity = Entity(keywords_list=['vitamin D'])
nlp.add_pipe(entity, last=True)
#works for this sentence:
doc = nlp("vitamin D is contained in this.")
print([token.text for token in doc if token._.is_entity])
#['vitamin D']
#does not work for this sentence:
doc = nlp("This contains vitamin D.")
print([token.text for token in doc if token._.is_entity])
#[]
解决方案非常简单,在
>>> doc = nlp("This contains vitamin D .") #<-- space after D
>>> print([token.text for token in doc if token._.is_entity])
['vitamin D']
为什么会发生?仅仅是因为spaCy认为“ D”。整体标记与“ D”相同。名称为“ D. Cooper”的用户将被视为整个令牌!