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

Spacy NLP中将Token转小写出现AttributeError错误的解决方案求助

问题原因

AttributeError报错的核心原因是:doc[match[1]:match[2]]返回的是spaCy的Span(文本跨度)对象,lower_是单个Token对象才有的属性,Span本身不支持该属性调用。同时你的原代码还存在缩进逻辑问题:遍历found_items的逻辑放在了评论循环外层,只会处理最后一条评论的匹配结果。

解决方法

根据你的实际需求选对应方案即可:

方案1:将整个匹配到的短语整体转小写

如果你需要的是把匹配到的连续文本片段整体作为一个条目转小写,直接获取Span的文本内容后调用Python原生的小写转换方法即可,修正后完整代码如下:

from collections import defaultdict
item_ratings = defaultdict(list)

for idx, review in data.iterrows():
    doc = nlp(review.text)
    matches = matcher(doc)
    # Span.text获取匹配到的文本字符串,再调用lower()转小写
    found_items = set(doc[match[1]:match[2]].text.lower() for match in matches)
    # 缩进放到当前评论的循环内部,处理每条评论的匹配结果
    for item in found_items:
        item_ratings[item].append(review.stars)

方案2:单独提取匹配片段中每个Token的小写

如果你需要的是把匹配到的片段里每个单词单独拆出来转小写,遍历Span内的每个Token取lower_属性即可:

# 遍历匹配到的每个Span,再遍历Span里的每个Token取小写
found_items = set(token.lower_ for match in matches for token in doc[match[1]:match[2]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:09:04