You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义spaCy DisplaCy Span Categorizer的HTML输出?

自定义spaCy Span Categorizer的HTML渲染方案

因为displacy原生对Span Categorizer的可视化支持有限,无法直接给高亮标签添加独立类名,你可以通过以下两种方式实现自定义渲染:

方法一:手动提取Span数据,自行构建HTML(推荐)

直接从处理后的Doc对象中提取Span信息,手动拼接带自定义类名的HTML结构,完全控制样式和交互属性。

步骤1:加载模型并处理文本

import spacy

# 加载训练好的Span Categorizer模型
nlp = spacy.load("your_trained_span_model")
text = "需要分析的目标文本内容"
doc = nlp(text)

步骤2:编写自定义渲染函数

这个函数会按顺序遍历文本,将普通内容和带类名的Span标签拼接起来,类名直接使用Span的标签名(转为小写,避免CSS类名冲突):

def render_custom_span_cats(doc, spans_key="sc"):
    # 按起始位置排序Span,避免重叠渲染问题
    sorted_spans = sorted(doc.spans[spans_key], key=lambda x: x.start)
    html_parts = []
    last_pos = 0

    for span in sorted_spans:
        # 添加Span之前的普通文本
        if span.start > last_pos:
            html_parts.append(doc.text[last_pos:span.start])
        # 生成带自定义类名的Span标签,可额外添加data属性或点击事件
        class_name = f"span-category-{span.label_.lower()}"
        html_parts.append(
            f'<span class="{class_name}" data-label="{span.label_}" onclick="handleSpanClick(this)">{span.text}</span>'
        )
        last_pos = span.end
    
    # 添加最后一段未标记的文本
    if last_pos < len(doc.text):
        html_parts.append(doc.text[last_pos:])
    
    return "".join(html_parts)

步骤3:生成HTML并添加自定义CSS

调用函数生成HTML后,你可以搭配自定义CSS来控制样式:

/* 示例样式:不同类别的Span使用不同背景色,添加点击效果 */
.span-category-product {
    background-color: #e6f7ff;
    padding: 2px 4px;
    border-radius: 4px;
    cursor: pointer;
    transition: background-color 0.2s;
}

.span-category-brand {
    background-color: #fff7e6;
    padding: 2px 4px;
    border-radius: 4px;
    cursor: pointer;
    transition: background-color 0.2s;
}

.span-category-product:hover {
    background-color: #91d5ff;
}

方法二:修改Displacy的Jinja2模板(不推荐)

spaCy的displacy使用Jinja2模板渲染HTML,你可以找到spaCy安装目录下的spacy/displacy/templates文件夹,修改对应模板文件。但这种方法的问题是:spaCy版本更新会覆盖修改,且原生模板没有针对Span Categorizer的专门渲染逻辑,需要大幅修改模板代码,维护成本高。


内容的提问来源于stack exchange,提问作者goonhoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:28:17