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

spaCy准备训练数据时doc.char_span标注MONEY实体返回None怎么解决

问题原因

doc.char_span返回None的核心逻辑是你标注的字符起止位置,和spaCy实际拿到的文本的字符位置不匹配。
你标注£100的偏移量(24,28)是对着原始JSON文件里的文本统计的,但因为加载文件时编码错误,文本里多出来了一个Â字符,相当于spaCy拿到的文本比你标注时的文本多了1个字符,原来的偏移量就完全错位了,甚至刚好切到了字符中间或者跨了分词边界,char_span就会返回None。

解决方法

你当前读取JSON文件时没有指定编码,在Windows环境下会默认用GBK/GB2312编码读取UTF-8格式的文件:£的UTF-8编码占2个字节,用非UTF-8编码读取时就会被拆成Â和£两个字符,就是你看到的多余字符。
只要修改文件加载代码,明确指定编码为utf-8即可:

with open('training_data.json', encoding='utf-8') as train_data:
    train_data_json = json.load(train_data)

修改后可以先做两步验证:

  • 打印加载出来的对应文本,确认Â字符已经消失
  • 取text[24:28]查看结果是否正好是£100,确认偏移量匹配后再调用char_span就能正常返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:03