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

如何使用Spacy将Token跨度转换为原始文本的字符跨度

spaCy中Token跨度转原始文本字符跨度实现方法

核心方案

spaCy生成的所有Span类型对象(包括命名实体、句子、自定义Token切片等)都内置了字符偏移属性,直接调用即可得到符合Python切片规则的原始文本字符位置,不需要手动计算:

  • Span.start_char:跨度对应的原始文本起始字符索引(切片时包含该位置)
  • Span.end_char:跨度对应的原始文本结束字符索引(切片时不包含该位置,和Python列表/字符串切片逻辑完全一致)

示例代码

针对给出的场景,直接替换注释部分的逻辑即可:

import spacy
N = spacy.load('en_core_web_md')
text = 'Joe Biden is president of the US'
doc = N(text)
e = doc.ents[0]

# 获取对应字符跨度
char_span_start = e.start_char
char_span_end = e.end_char

# 结果校验
print(text[char_span_start:char_span_end]) # 输出 Joe Biden
print(char_span_start, char_span_end) # 输出 0 9,对应切片[0:9]
assert text[char_span_start:char_span_end] == e.text # 校验通过,二者完全相等

注意事项

不要手动遍历Token累加字符长度计算偏移:spaCy在分词阶段已经精准记录了每个Token、每个Span的字符位置,手动计算很容易因为空白字符、特殊符号、语言特定分词规则出现偏移错误,直接调用内置属性是最稳定、最高效的方案。

该属性对所有Span对象生效,哪怕是自定义的Token切片,比如custom_span = doc[2:5],同样可以通过custom_span.start_char和custom_span.end_char拿到正确的字符位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:48:14