背景:
今天在学wordcloud时,用到jieba包分词,写了以下代码:
tex=("惊世骇俗者寥若晨星,大多数人,只能走不出平凡,而又乐意在平凡中默默生存。 ")
cut=jieba.cut(tex)
print(cut)
以为会输出分好的词,结果输出结果为:
<generator object Tokenizer.cut at 0x107f89bc0>
问题原因:
当在Python中打印一个生成器对象(Generator Object),如使用print()函数处理一个由Tokenizer.cut()方法生成的结果,你看到类似 generator object Tokenizer.cut at 的输出,是因为生成器的工作原理决定了它不会立即计算所有结果,而是按需生成。
Tokenizer.cut() 函数通常是用于文本处理,如分词,它返回一个生成器,每次迭代都会提供一部分切分后的单词或者其他处理过的元素。当你打印这个生成器时,实际上并没有遍历完整个序列,所以只显示了生成器的状态以及当前位置(即at后面的部分),而没有显示所有的元素。这并不是错误,而是生成器的特性之一。如果你想查看整个序列的内容,应该对生成器进行完全迭代,例如使用for循环或者将生成器转换成列表。
解决方案:
方法一:使用for循环
tex=("惊世骇俗者寥若晨星,大多数人,只能走不出平凡,而又乐意在平凡中默默生存。 ")
cut=jieba.cut(tex)
for item in cut:
print(item)
输出:
惊世骇俗
者
寥若晨星
,
大多数
人
,
只能
走不出
平凡
,
而
又
乐意
在
平凡
中
默默
生存
。
方法二:将生成器转换成列表
tex=("惊世骇俗者寥若晨星,大多数人,只能走不出平凡,而又乐意在平凡中默默生存。 ")
cut=jieba.cut(tex)
print(list(cut))
输出:
['惊世骇俗', '者', '寥若晨星', ',', '大多数', '人', ',', '只能', '走不出', '平凡', ',', '而', '又', '乐意', '在', '平凡', '中', '默默', '生存', '。', ' ']
方法三:使用join语句
tex=("惊世骇俗者寥若晨星,大多数人,只能走不出平凡,而又乐意在平凡中默默生存。 ")
cut=jieba.cut(tex)
string=' '.join(cut) #用空格分隔
print(string)
输出:
惊世骇俗 者 寥若晨星 , 大多数 人 , 只能 走不出 平凡 , 而 又 乐意 在 平凡 中 默默 生存 。