如何将Spacy中Rule-based Matcher的匹配结果可视化生成HTML页面?
高亮spaCy Rule-based Matcher匹配结果的实现方法
核心逻辑:displacy没有单独针对Matcher匹配结果的渲染配置,你只需要将匹配到的文本片段标注为自定义实体,再调用displacy的实体渲染能力即可实现自定义高亮,无需额外开发前端逻辑。
完整代码示例
import spacy from spacy.matcher import Matcher from spacy import displacy # 加载模型初始化Matcher nlp = spacy.load("en_core_web_sm") matcher = Matcher(nlp.vocab) # 填入你的原有pattern和待处理文本 text = "GDP in developing countries such as Vietnam will continue growing at a high rate." pattern = [ {'DEP':'amod', 'OP':'?'}, {'POS':'NOUN'}, {'LOWER': 'such'}, {'LOWER': 'as'}, {'POS': 'PROPN'} ] matcher.add("CUSTOM_PATTERN", [pattern]) # 执行匹配 doc = nlp(text) matches = matcher(doc) # 将匹配结果转为spaCy的Span对象,设置为自定义实体 match_spans = [doc[start:end] for match_id, start, end in matches] # 过滤重叠的匹配结果避免报错 match_spans = spacy.util.filter_spans(match_spans) doc.set_ents(match_spans, label="MATCHED_RESULT", default="unmodified") # 方式1:直接启动本地服务预览高亮效果 displacy.serve( doc, style="ent", options={ "ents": ["MATCHED_RESULT"], # 只渲染我们自定义的匹配实体,隐藏spaCy默认识别的实体 "colors": {"MATCHED_RESULT": "#fff176"} # 自定义高亮颜色 } ) # 方式2:生成HTML字符串,嵌入到你自己的网页中 # html_code = displacy.render( # doc, # style="ent", # options={"ents": ["MATCHED_RESULT"], "colors": {"MATCHED_RESULT": "#fff176"}} # )
配置说明
- 调用
displacy.serve后默认在本地127.0.0.1:5000端口启动临时服务,打开浏览器访问对应地址即可看到高亮效果 - 如果需要调整高亮的样式,可直接修改生成的HTML中
.ent类的CSS属性,自定义内边距、圆角、字体样式等效果 - 若存在多个匹配pattern,可给不同pattern设置不同的实体标签,分别配置不同的高亮颜色
内容的提问来源于stack exchange,提问作者ary
相关产品推荐
相关产品推荐

