Python如何实现分词逆操作及解决'str'对象无append属性报错
报错原因排查
问题出在循环内的变量覆盖逻辑:
- 初始定义的
data_untoken是列表类型,第一次循环执行data_untoken.append(text)时操作合法 - 紧随其后的赋值语句
data_untoken = TreebankWordDetokenizer().detokenize(text),直接将data_untoken变量重新绑定到了逆分词返回的字符串对象上,原本的列表引用被完全覆盖 - 第二次循环触发时,
data_untoken已经是字符串类型,不存在append方法,直接触发类型报错:'str' object has no attribute 'append'
正确实现方案
核心逻辑修正点:不要将存储结果的列表变量和逆分词返回的临时字符串变量重名,每轮逆分词完成后将结果追加到结果列表即可。
优化建议:提前初始化一次TreebankWordDetokenizer实例,无需在循环内重复创建对象,降低额外开销。
可运行的正确代码如下:
from nltk.tokenize.treebank import TreebankWordDetokenizer # 初始化逆分词器实例 detokenizer = TreebankWordDetokenizer() data_untoken = [] data = [['this', 'is', 'a', 'sentence'], ['this', 'is', 'a', 'sentence', '2']] for text in data: # 单独定义临时变量存储单条句子的逆分词结果 untokenized_sentence = detokenizer.detokenize(text) # 将结果追加到结果列表 data_untoken.append(untokenized_sentence) print(data_untoken) # 输出匹配预期:['this is a sentence', 'this is a sentence 2']
补充说明:如果数据集没有复杂标点、特殊符号的拼接规则,仅需空格分隔拼接的场景,也可以直接用列表推导式实现:
data_untoken = [' '.join(sent) for sent in data],无需依赖nltk库。
内容的提问来源于stack exchange,提问作者Tazz
相关产品推荐
相关产品推荐

