使用 Displacy 的自定义实体的 Displacy Custom Colors
Displacy Custom Colors for custom entities using Displacy
我有一个单词、名词-动词短语列表,我想:
- 在文本语料库中搜索依赖模式、单词
- 识别出现在
中的匹配段落
- 提取段落
- 突出显示段落中的匹配词
- 创建段落的 snip/jpeg,并突出显示匹配的词
- 将图像保存在 excel 中。
下面的 MWE 与突出显示匹配的单词并使用位移显示它们有关。我提到我的其余任务只是为了提供上下文。输出未使用自定义颜色为自定义实体着色。
import spacy
from spacy.matcher import PhraseMatcher
from spacy.tokens import Span
good = ['bacon', 'chicken', 'lamb','hot dog']
bad = [ 'apple', 'carrot']
nlp = spacy.load('en_core_web_sm')
patterns1 = [nlp(good) for good in good]
patterns2 = [nlp(bad) for bad in bad]
matcher = PhraseMatcher(nlp.vocab)
matcher.add('good', None, *patterns1)
matcher.add('bad', None, *patterns2)
doc = nlp("I like bacon and chicken but unfortunately I only had an apple and a carrot in the fridge")
matches = matcher(doc)
for match_id, start, end in matches:
span = Span(doc, start, end, label=match_id)
doc.ents = list(doc.ents) + [span] # add span to doc.ents
print([(ent.text, ent.label_) for ent in doc.ents])
上面的代码产生了这个输出:
[('bacon', 'good'), ('chicken', 'good'), ('apple', 'bad'), ('carrot', 'bad')]
但是当我尝试为实体自定义颜色时,它似乎不起作用。
from spacy import displacy
colors = {'good': "#85C1E9", "bad": "#ff6961"}
options = {"ents": ['good', 'bad'], "colors": colors}
displacy.serve(doc, style='ent',options=options)
这是我得到的输出:
我只是 copy/pasted 你的代码,它在这里工作正常。我正在使用 spaCy v3.1.1.
HTML 输出源是什么样的?
我能够在 spaCy 2.3.5 上重现您的问题。我能够通过将标签设为大写(GOOD 和 BAD)来修复它。我找不到关于此的错误,但由于模型通常只使用大写标签,我猜这是旧版本的问题。
我有一个单词、名词-动词短语列表,我想:
- 在文本语料库中搜索依赖模式、单词
- 识别出现在 中的匹配段落
- 提取段落
- 突出显示段落中的匹配词
- 创建段落的 snip/jpeg,并突出显示匹配的词
- 将图像保存在 excel 中。
下面的 MWE 与突出显示匹配的单词并使用位移显示它们有关。我提到我的其余任务只是为了提供上下文。输出未使用自定义颜色为自定义实体着色。
import spacy
from spacy.matcher import PhraseMatcher
from spacy.tokens import Span
good = ['bacon', 'chicken', 'lamb','hot dog']
bad = [ 'apple', 'carrot']
nlp = spacy.load('en_core_web_sm')
patterns1 = [nlp(good) for good in good]
patterns2 = [nlp(bad) for bad in bad]
matcher = PhraseMatcher(nlp.vocab)
matcher.add('good', None, *patterns1)
matcher.add('bad', None, *patterns2)
doc = nlp("I like bacon and chicken but unfortunately I only had an apple and a carrot in the fridge")
matches = matcher(doc)
for match_id, start, end in matches:
span = Span(doc, start, end, label=match_id)
doc.ents = list(doc.ents) + [span] # add span to doc.ents
print([(ent.text, ent.label_) for ent in doc.ents])
上面的代码产生了这个输出:
[('bacon', 'good'), ('chicken', 'good'), ('apple', 'bad'), ('carrot', 'bad')]
但是当我尝试为实体自定义颜色时,它似乎不起作用。
from spacy import displacy
colors = {'good': "#85C1E9", "bad": "#ff6961"}
options = {"ents": ['good', 'bad'], "colors": colors}
displacy.serve(doc, style='ent',options=options)
这是我得到的输出:
我只是 copy/pasted 你的代码,它在这里工作正常。我正在使用 spaCy v3.1.1.
HTML 输出源是什么样的?
我能够在 spaCy 2.3.5 上重现您的问题。我能够通过将标签设为大写(GOOD 和 BAD)来修复它。我找不到关于此的错误,但由于模型通常只使用大写标签,我猜这是旧版本的问题。