使用 Displaced 为自定义实体显示自定义颜色

Ama*_*tya 3 python spacy

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

  • 在文本语料库中搜索依赖模式、单词
  • 识别出现在的匹配段落
  • 提取段落
  • 突出显示段落中匹配的单词
  • 创建段落的片段/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])  
Run Code Online (Sandbox Code Playgroud)

上面的代码产生以下输出:

[('bacon', 'good'), ('chicken', 'good'), ('apple', 'bad'), ('carrot', 'bad')]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试自定义实体颜色时,它似乎不起作用。

from spacy import displacy
colors = {'good': "#85C1E9", "bad": "#ff6961"}
options = {"ents": ['good', 'bad'], "colors": colors}

displacy.serve(doc, style='ent',options=options)
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

在此输入图像描述

pol*_*m23 6

我只是复制/粘贴您的代码,它在这里工作正常。我正在使用 spaCy v3.1.1。

在此输入图像描述

HTML 输出源是什么样的?


我能够在 spaCy 2.3.5 上重现您的问题。我可以通过将标签设置为大写(好和坏)来修复它。我找不到与此相关的错误,但由于模型通常只使用大写标签,我猜这是旧版本的问题。