Python中'TypeError: 'generator' object is not subscriptable' 错误解决方法
Python中'TypeError: 'generator' object is not subscriptable' 错误解决方法
在使用jieba库对中文文本进行分词,并解析地址信息时,遇到如下错误:
Traceback (most recent call last):
File 'C:\Users\TX\Desktop\Networkofdata\实验报告\11\q\中文NLP地址要素解析v4.py', line 330, in <module>
province, city, district, street, community, devzone, houseno, cellno, floorno, intersection, subpoi, assist, tags = parse_address(info)
File 'C:\Users\TX\Desktop\Networkofdata\实验报告\11\q\中文NLP地址要素解析v4.py', line 256, in parse_address
if i > 0 and words[i - 1].isdigit():
TypeError: 'generator' object is not subscriptable
错误分析:
这个错误提示是因为 words 变量是一个生成器对象(generator object),无法使用下标索引。
原因:
jieba库的 cut() 方法返回的是一个生成器,而不是列表。生成器是一种节省内存的数据结构,它不会一次性生成所有结果,而是逐个生成。
解决方法:
将 words 生成器转换成列表对象,就可以使用下标索引了。
# 将生成器转换为列表
words = list(jieba.cut(info))
# 然后就可以正常使用下标索引了
if i > 0 and words[i - 1].isdigit():
# ...
代码示例:
import jieba
info = 'XX小区1号楼2单元301室'
# 使用list()函数将生成器转换为列表
words = list(jieba.cut(info))
tag_list = []
cellno = ''
for i, word in enumerate(words):
# 判断是否为数字
if word.isdigit():
if i > 0 and words[i-1].isdigit():
tag_list.append('I-cellno')
cellno += word
else:
tag_list.append('B-cellno')
cellno = word
# 判断是否为单元
elif word.endswith('单元'):
if i > 0 and words[i-1].isdigit():
for char in word:
if char == word[0]:
tag_list.append('I-cellno')
elif char == word[-1]:
tag_list.append('E-cellno')
else:
tag_list.append('I-cellno')
cellno += char
else:
for char in word:
if char == word[0]:
tag_list.append('B-cellno')
elif char == word[-1]:
tag_list.append('E-cellno')
else:
tag_list.append('I-cellno')
cellno = word
print(tag_list)
print(cellno)
通过将 jieba.cut(info) 的结果用 list() 函数转换为列表,就能解决 'TypeError: 'generator' object is not subscriptable' 错误,并顺利进行后续的地址信息解析。
原文地址: https://www.cveoy.top/t/topic/f2fU 著作权归作者所有。请勿转载和采集!