lcut在python_jieba结巴分词使用

在中文的自然语言处理中,需要对中文进行分词。在python3的中文分词中,可以使用jieba来进行中文分词。

jieba分词是一款免费的中文分词工具,既然是免费的,就凑合用吧。和不同领域专业的分词工具,区别在于词库上。像医疗中的很多名词,显然jieba是不认识的,用jieba进行分词,会将专业名词拆解,就比较外行了。但是应付日常的使用,是够用了。

jieba的分词主要是用jieba.cut() 和jieba.lcut()两种方法 ,使用参数一致,区别在于返回的对象,一个是可迭代对象,一个是返回的列表

jieba.cut() 分词使用

.cut()的方法使用

defcut(self, sentence, cut_all=False, HMM=True, use_paddle=False):

"""The main function that segments an entire sentence that containsChinese characters into separated words.Parameter:- sentence: The str(unicode) to be segmented.- cut_all: Model type. True for full pattern, False for accurate pattern.- HMM: Whether to use the Hidden Markov Model.

查看.cut()的定义文档,cut方法有主要三个参数:sentence 中文字符串, cut_all 切割的模式,HMM 是否使用隐马模型。

cut_all 默认False,为accurate pattern精确分割。 精确分割和非精确分割的区别在于,分词的时候,对长尾词,是否进行来分的区分。

.cut()方法返回的是一个可迭代对象,不能直接打印。需要转换一下。

.lcut()方法,和.cut()方法的区别在于, .lcut()直接将分割的词返回成一个list,而不是迭代对象,使用方法和.cut()一致。

if__name__ == "__main__":

# 非精确模式str = '今天天气真的是很好'split_list = jieba.cut(str, cut_all=True)

print("全模式: ", " ".join(split_list))

# 精确模式split_list = jieba.cut(str, cut_all=False)

print("精确模式: ", " ".join(split_list))

split_list = jieba.cut_for_search(str)

print("cut_for_search : ", " ".join(split_list))

全模式: 今天 今天天气 天天 天气 真的 是 很 好

精确模式: 今天天气 真的 是 很 好

cut_for_search: 今天 天天 天气 今天天气 真的 是 很 好

对文本今天天气真的是很好,用.cut分词时,非精确模式下,对文本来回切分,把可能的词都进行提取。精确模式下,将文本进行精确的划分,

.cut还有一种 cut_for_search() 方法,是在精确模式下,对长尾词进行继续划分

当然, .lcut()方法,也要配套的.lcut_for_search方法,返回的也是list而不是迭代对象。

自定义词库add_word,load_userdict

在大部分专业的领域,有专用的术语。在jieba结巴分词的语料库里,显然是涵盖不了专业的术语的。

例如在医学领域,有关电子烟的内容‘想戒烟吗?选择电子烟代替尼古丁贴片,更有可能获得成功呦’,直接用jieba分词时,专业的术语:电子烟、尼古丁贴片都不能识别,都被切分,显得不够专业。

text = "想戒烟吗?选择电子烟代替尼古丁贴片,更有可能获得成功呦"split_list = jieba.cut(text, cut_all=True)

print("全模式: ", " ".join(split_list))

# 精确模式split_list = jieba.cut(text, cut_all=False)

print("精确模式: ", " ".join(split_list))

split_list = jieba.cut_for_search(text)

print("cut_for_search : ", " ".join(split_list))

全模式: 想 戒烟 吗 ? 选择 电子 烟 代替 尼古丁 贴片 , 更 有 可能 获得 获得成功 得成 成功 呦

精确模式: 想 戒烟 吗 ? 选择 电子 烟 代替 尼古丁 贴片 , 更 有 可能 获得成功 呦

cut_for_search : 想 戒烟 吗 ? 选择 电子 烟 代替 尼古丁 贴片 , 更 有 可能 获得 得成 成功 获得成功 呦

要解决专业名词的问题,除了是更换专业领域的分词工具之外,jieba提供了自定义词库,可以加入特定的词。

.add_word() 添加关键词

jieba.add_word()可以手动添加一个关键词进入词库

jieba.add_word('尼古丁贴片')

jieba.add_word('电子烟')

text = "想戒烟吗?选择电子烟代替尼古丁贴片,更有可能获得成功呦"

# 精确模式split_list = jieba.cut(text, cut_all=False)

print("精确模式: ", " ".join(split_list))

精确模式: 想 戒烟 吗 ? 选择 电子烟 代替 尼古丁贴片 , 更 有 可能 获得成功 呦

通过用 .add_word() 添加了电子烟和尼古丁贴片后,在使用分词工具时jieba就认识这两个关键词,就不会对这两个词进行切割。

.load_userdict() 批量设置关键词

当然,用 .add_word() 是一个一个添加,如果是批量添加大量的关键词,就需要使用load_userdict

查看 load_userdict 的定义文档,寻找这个方法的使用方式:

defload_userdict(self, f):

'''

Load personalized dict to improve detect rate.

Parameter:

- f : A plain text file contains words and their ocurrences.

Can be a file-like object, or the path of the dictionary file,

whose encoding must be utf-8.

Structure of dict file:

word1 freq1 word_type1

word2 freq2 word_type2

...

Word type may be ignored

'''

文档的描述说明,唯一的参数是一个类文件对象,必须是utf8编码格式。文本内容的格式是word1 freq1 word_type1:关键词 词频 词性 , 多个关键词每行一个。Word type may be ignored,词性可以忽略。

按照文档要求,制作一个文本文件,内容按格式写上:关键词 词频, 词性可以省略,起始词频也可以省略,直接一行写入一个关键词也可行。只是官方文档并没有这么写,就没有按照这种方式做。

jieba.load_userdict(r"C:\Users\abc\Desktop\a.txt")

text = "想戒烟吗?选择电子烟代替尼古丁贴片,更有可能获得成功呦"# 精确模式split_list = jieba.cut(text, cut_all=False)

print("精确模式: ", " ".join(split_list))

精确模式: 想 戒烟 吗 ? 选择 电子烟 代替 尼古丁贴片 , 更 有 可能 获得成功 呦

extract_tags关键词提取

用jieba对文本进行关键词切割之后,已经能获取到文本内的所有关键词。

如何衡量一个文本的关键词的重要程度,通常用到tf-idf的逆概词频方式,提取出最核心的关键词。

importjieba

importjieba.analyse

if__name__ == "__main__":

text = "想戒烟吗?选择电子烟代替尼古丁贴片,更有可能获得成功呦"jieba.add_word('电子烟')

jieba.add_word('尼古丁贴')

split_list = jieba.lcut(text)

print('lcut分词',split_list)

tp10 = jieba.analyse.extract_tags(text, 5)

print('提取关键词',tp10)

lcut分词 [‘想’, ‘戒烟’, ‘吗’, ‘?’, ‘选择’, ‘电子烟’, ‘代替’, ‘尼古丁贴’, ‘片’, ‘,’, ‘更’, ‘有’, ‘可能’, ‘获得成功’, ‘呦’]

提取关键词 [‘电子烟’, ‘尼古丁贴’, ‘戒烟’, ‘获得成功’, ‘代替’]

通过.lcut 查看结巴对文本的分词效果, 使用extract_tags查看最核心的关键词。

提取关键词 extract_tags 的用法:第一个参数为文本,第二个参数为提取排名靠前的N个关键词,默认是20个。 extract_tags 详细用法可以参考文档标注,可以对特定的名称、动词、虚词进行过滤,通过allowPOS这个参数设置。如果不想深入研究的话,withWeight=False, allowPOS=(), withFlag=False这三个参数忽略吧,没大的影响。

extract_tags 的定义文档:

defextract_tags(self, sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False):

"""

Extract keywords from sentence using TF-IDF algorithm.

Parameter:

- topK: return how many top keywords. `None` for all possible words.

- withWeight: if True, return a list of (word, weight);

if False, return a list of words.

- allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v','nr'].

if the POS of w is not in this list,it will be filtered.

- withFlag: only work with allowPOS is not empty.

if True, return a list of pair(word, weight) like posseg.cut

if False, return a list of words

"""

你可能感兴趣的:(lcut在python)