我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在结巴分词里面,有个.lcut()还有个.cut()方法。那么,这两个方法有什么区别呢?按照既往经验trimltrim的区别来说,l意思是left,那么lcut()中的l也是left的意思么?这就是本文中要讨论的问题。

苏南大叔:jieba结巴分词,分词方法cut和lcut有什么区别? - 结巴分词lcut
jieba结巴分词,分词方法cut和lcut有什么区别?(图2-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述结巴分词中的lcut函数和cut函数的区别。本文测试环境:win10python@3.6.8

测试代码

测试代码如下:

import jieba
import jieba.posseg
words = "苏南大叔毕业于北京大学"

_generator  = jieba.cut(words)                      
_generator2 = jieba.posseg.cut(words)
# print(type(_generator2), type(_generator2))      # <class 'generator'>
print('/ '.join(_generator))                       #苏南/ 大叔/ 毕业/ 于/ 北京大学
for w in _generator2:
    print(w.word+"/"+w.flag + " ", end="")         #苏南/ns 大叔/n 毕业/n 于/p 北京大学/nt

_list  = jieba.lcut(words)
_list2 = jieba.posseg.lcut(words)
# print(type(_list), type(_list2))                 # <class 'list'>
print(_list)                                       #['苏南', '大叔', '毕业', '于', '北京大学']
print(_list2)                                      #[pair('苏南', 'ns'), pair('大叔', 'n')]

lcut()函数有两个,一个是“jieba.lcut()”,另外一个是:“jieba.posseg.lcut()”。

苏南大叔:jieba结巴分词,分词方法cut和lcut有什么区别? - lcut
jieba结巴分词,分词方法cut和lcut有什么区别?(图2-2)

结果遍历

普通的cut的返回值是个generator,好处是可以节省内存,缺点是只可以遍历一次。而lcut返回值是个list,可以多次遍历。但是,如果量大的时候,效果就不如generator好用了。

但是,遍历的方式,都是一致的。

方案一[for in]【推荐】:

_result = jieba.posseg.cut(words)
list = [ w.word+"/"+w.flag for w in _result ]
print(" ".join(list))

_result2 = jieba.posseg.lcut(words)
list = [ w.word+"/"+w.flag for w in _result2 ]
print(" ".join(list))

方案二[set add join]【不推荐】:

_result = jieba.posseg.cut(words)
_aaa = set() # set 无序可添加add
for w in _result:
    _aaa.add(w.word+"/"+w.flag)
print(" ".join(_aaa))

方案三[list append join]:

_result = jieba.posseg.cut(words)
_aaa = [] # 有序
for w in _result:
    _aaa.append(w.word+"/"+w.flag)
print(" ".join(_aaa))

函数区别

通过测试结果可以看到,cut函数和lcut基本一样,只是返回值不一样

名字说明返回值遍历
jieba.cut分词generator只能遍历一次
jieba.posseg.cut分词带词性generator只能遍历一次
jieba.lcut分词list可以遍历多次
jieba.posseg.lcut分词带词性list可以遍历多次

同样,原理cut()的参数在lcut()中也是存在的。下面的调用形式也是可以的:

jieba.lcut(words, cut_all=False)
jieba.posseg.lcut(words, cut_all=True)

相关文章

苏南大叔写过几篇有关结巴分词的文章了,列表如下:

综述

lcut中的l并不是left的意思,而是返回结果是list的意思。更多结巴分词的经验文章,请点击苏南大叔的博客文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python    jieba