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

求助:spaCy Displacy结合Anvil展示实体时输出位置不符预期

解决spaCy displaCy实体渲染输出位置异常问题

问题根源

在Jupyter+Anvil的混合环境中,displacy.render默认会检测Jupyter环境并自动将渲染结果输出到当前代码单元格。但你的代码通过Anvil服务器函数调用,运行上下文与anvil.server.wait_forever()所在单元格绑定,导致渲染内容被定向到该单元格,而非期望的指定位置。

解决方案

1. 修改displaCy渲染参数,强制返回HTML字符串

在visualize_entities_in_sentences函数中添加jupyter=False参数,禁用displaCy的自动Jupyter输出功能,仅返回渲染后的HTML代码:

def visualize_entities_in_sentences(self, doc_id):
    """Visualize entities in the sentences of a document.

    :param doc_id: the id of the document to visualize
    :type doc_id: str
    """
    doc = self.get_document(doc_id)
    sentences = list(doc.sents)
    # 添加jupyter=False,禁止自动在Jupyter单元格输出,仅返回HTML字符串
    labels = displacy.render(sentences, style="ent", page=False, minify=True, jupyter=False)
    return labels

2. 在Anvil前端用HTML组件展示结果

displaCy返回的是HTML代码而非Markdown,因此不能用Markdown组件展示。在Anvil的Form中添加一个HTML组件,然后在客户端调用服务器函数后,将返回的HTML赋值给该组件:

# Anvil客户端示例代码(按钮点击事件)
def btn_render_click(self, **event_args):
    target_doc_id = self.txt_doc_id.text
    # 调用服务器函数获取实体渲染的HTML
    entity_render_html = anvil.server.call('get_visualize_entities_in_sentences', target_doc_id)
    # 将HTML赋值给指定的HTML组件
    self.html_entity_display.html = entity_render_html

额外说明

  • displacy.server不适配Anvil环境:它会启动独立Web服务器,与Anvil的Web应用架构冲突,直接返回HTML字符串是更合适的方案。
  • 确保Anvil服务器函数返回的HTML字符串被正确传递到前端,避免编码或转义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:53:12