python3 jieba分词
一.jieba库用于分词,https://github.com/fxsjy/jieba
二.分词:分词精细:全局(文本分析)<精确(快速成词)<搜素(搜素引擎分词)
1 #分词 2 str=r'今天我们中出了一个叛徒,不想领导领导的领导不是好领导' 3 a=jieba.cut(str,cut_all=True,HMM=False) 4 #分词(字符串,是否采用全局模式(默认False精确模式),是否使用HMM模式(默认True)) 5 print(a)#返回可迭代的生成器 6 print(','.join(a)) 7 8 b=jieba.lcut(str)#lcut_for_search直接返回列表 9 print(b) 10 11 print(jieba.lcut_for_search(str, HMM=True))#搜索模式 12 --------------------------------------------------------- 13 Building prefix dict from the default dictionary ... 14 <generator object Tokenizer.cut at 0x0368E8A0> 15 Loading model from cache C:\Users\11373\AppData\Local\Temp\jieba.cache 16 今天,我们,中出,了,一个,叛徒,,,不想,领导,领导,的,领导,不是,好,领导 17 Loading model cost 0.784 seconds. 18 ['今天', '我们', '中出', '了', '一个', '叛徒', ',', '不想', '领导', '领导', '的', '领导', '不是', '好', '领导'] 19 Prefix dict has been built succesfully. 20 ['今天', '我们', '中出', '了', '一个', '叛徒', ',', '不想', '领导', '领导', '的', '领导', '不是', '好', '领导']
三.导入用户字典
1 #导入用户的字典 2 #词典格式:一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。 3 #file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码 4 jieba.load_userdict('dict.txt') 5 print(jieba.lcut(str)) 6 -------------------------------------------------------- 7 ['今天', '我们', '中出了', '一个', '叛徒', ',', '不想', '领导领导', '的', '领导', '不是', '好', '领导']
中出了
领导领导
四.实时操作字典
1 jieba.add_word('一个叛徒')#实时在字典中添加某个词 2 print(jieba.lcut(str)) 3 jieba.del_word('领导')#删除字典的某个词 4 print(jieba.lcut(str)) 5 jieba.suggest_freq(('一个','叛徒'),True)#可调节单个词语的词频,使其能(或不能)被分出来 6 print(jieba.lcut(str)) 7 jieba.suggest_freq(('中','出'),True) 8 print(jieba.lcut(str))#自动计算的词频在使用 HMM 新词发现功能时可能无效。 9 print(jieba.lcut(str,HMM=False))#自动计算的词频在使用 HMM 新词发现功能时可能无效。 10 ---------------------------------------------------------------------- 11 ['今天', '我们', '中出', '了', '一个叛徒', ',', '不想', '领导', '领导', '的', '领导', '不是', '好', '领导'] 12 Loading model cost 0.751 seconds. 13 Prefix dict has been built succesfully. 14 ['今天', '我们', '中出', '了', '一个叛徒', ',', '不想', '领', '导', '领', '导', '的', '领', '导', '不是', '好', '领', '导'] 15 ['今天', '我们', '中出', '了', '一个', '叛徒', ',', '不想', '领', '导', '领', '导', '的', '领', '导', '不是', '好', '领', '导'] 16 ['今天', '我们', '中出', '了', '一个', '叛徒', ',', '不想', '领', '导', '领', '导', '的', '领', '导', '不是', '好', '领', '导'] 17 ['今天', '我们', '中', '出', '了', '一个', '叛徒', ',', '不想', '领', '导', '领', '导', '的', '领', '导', '不是', '好', '领', '导']
五.关键字提取
1 import jieba.analyse 2 3 str='今天我们中出了一个叛徒,不想领导领导的领导不是好领导' 4 5 #关键字提取 6 a=jieba.analyse.extract_tags(str, topK=20, withWeight=False, allowPOS=()) 7 # (文本,为返回几个 TF/IDF 权重最大的关键词,默认值为 20, 8 # 为是否一并返回关键词权重值,默认值为 False,仅包括指定词性的词,默认值为空,即不筛选) 9 print(a) 10 11 #基于 TextRank 算法的关键词抽取 12 # 1.将待抽取关键词的文本进行分词 13 # 2.以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图 14 # 3.计算图中节点的PageRank,注意是无向带权图 15 b=jieba.analyse.textrank(str, topK=20, withWeight=True, allowPOS=('n','nr','ns')) 16 print(b) 17 ------------------------------------------------------------------------- 18 ['领导', '中出', '叛徒', '不想', '今天', '不是', '我们', '一个'] 19 [('领导', 1.0), ('叛徒', 0.2510095552068219)]
六.其他
1 import jieba.posseg as pseg 2 import jieba 3 str='今天我们中出了一个叛徒,不想领导领导的领导不是好领导' 4 print(pseg.lcut(str))#词性标注 5 6 #并行分词,不支持windows 7 # jieba.enable_parallel(2)# 开启并行分词模式,参数为并发执行的进程数 8 # jieba.disable_parallel()# 关闭并行分词模式 9 10 #Tokenize:返回词语在原文的起止位置 11 result = jieba.tokenize(str,mode='search')#输入参数只接受 unicode 12 for i in result: 13 print(i) 14 --------------------------------------------------------------------- 15 [pair('今天', 't'), pair('我们', 'r'), pair('中', 'f'), pair('出', 'v'), pair('了', 'ul'), pair('一个', 'm'), pair('叛徒', 'n'), pair(',', 'x'), pair('不想', 'v'), pair('领导', 'n'), pair('领导', 'n'), pair('的', 'uj'), pair('领导', 'n'), pair('不是', 'c'), pair('好', 'a'), pair('领导', 'n')] 16 ('今天', 0, 2) 17 ('我们', 2, 4) 18 ('中出', 4, 6) 19 ('了', 6, 7) 20 ('一个', 7, 9) 21 ('叛徒', 9, 11) 22 (',', 11, 12) 23 ('不想', 12, 14) 24 ('领导', 14, 16) 25 ('领导', 16, 18) 26 ('的', 18, 19) 27 ('领导', 19, 21) 28 ('不是', 21, 23) 29 ('好', 23, 24) 30 ('领导', 24, 26)