python - 如何让 SpaCy 识别我所有给定的实体
问题描述
我有很多 JSONL 格式的模式列表,我加载并添加到实体标尺中
new_ruler = EntityRuler(nlp).from_disk(project_path + "data/skill_patterns.jsonl")
nlp.add_pipe(new_ruler)
当我打印结果时:print([(ent.text, ent.label_) for ent in doc.ents])
我的输出是:
[('data science','SKILL|data-science'), ('CV', 'ORG'), ('Kandidaat', 'FAC'), ('één', 'CARDINAL'), ('LSTM',
'ORG'), ('Parts', 'GPE'), ('Speech', 'GPE'), ('POS', 'ORG'), ('Entity Recognition', 'ORG'),
('NER', 'ORG'), ('Word2vec', 'ORG'), ('GloVe', 'ORG'), ('Recursive', 'NORP'), ('Neural Networks', 'ORG'),
('Ensemble', 'PERSON'), ('Dynamic', 'NORP'), ('Intent detection', 'PERSON'), ('Phrase matching.-', 'ORG'),
('Microsoft', 'NORP'), ('Azure.-', 'ORG'), ('één', 'CARDINAL'), ('Python', 'WORK_OF_ART'),
('Pytorch', 'GPE'), ('Django', 'GPE'), ('GoLanguage.-', 'GPE'), ('Kandidaat', 'FAC'), ('1 november 2020', 'DATE')]
现在我知道一个事实,例如('Pytorch', 'GPE')
or('Django', 'GPE')
在我的模式列表中,应该被识别为SKILL
而不是他们现在分配的实体。这也适用于许多其他“技能”。
{"label":"SKILL|django","pattern":[{"LOWER":"django"}]}
{"label":"SKILL|pytorch","pattern":[{"LOWER":"pytorch"}]}
有没有人知道为什么它不遵守我自己创建的实体?
有没有办法让我的实体优先于模型中已有的实体?
谢谢!
解决方案
我找到了解决方案。
通过new_ruler
在管道中添加 NER 之前(解析器之后),它赋予创建的实体优先级
nlp.add_pipe(new_ruler, after='parser')
推荐阅读
- sql - 同时发生的事务会产生错误的选择结果
- java - 循环完成后程序未终止
- amazon-web-services - 在 S3 存储桶中授予公共读取权限时遇到问题
- tensorflow - 无法理解 keras.datasets.imdb
- big-o - 为什么在计算大 O 时 O(n*n*n!) 会简化为 O((n+2)!)
- python - 从 Python 中的多个列表中仅选择一个唯一元素
- pine-script - 如何从 Pine Script 中函数中断的循环中获取值?
- python - 使用 pip 在 Windows 中安装 ZeroMQ / pyzmq 时遇到问题
- python - 已安装 CUDA 但未使用 GPU
- java - How to find the first three strings, which start with a lower-case `a` in a sorted order