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
相关产品推荐
相关产品推荐

