使用 Displacy 的自定义实体的 Displacy Custom Colors

Displacy Custom Colors for custom entities using Displacy

我有一个单词、名词-动词短语列表,我想:

下面的 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)来修复它。我找不到关于此的错误,但由于模型通常只使用大写标签,我猜这是旧版本的问题。