jieba分词的Python与R语言基础用法介绍
人们说话不是一个词一个词崩出来的,文章也就由句子组成。要想让机器识别美文,体会中华名族汉语的博大精深,不是不可能。但是,首先需要将其转化成其可以识别的模式——词语。分词是自然语言处理(NLP)中最底层、最基本的模块,分词精度的好坏将直接影响文本分析的结果。
这里介绍著名的分词方法:结巴分词以及基本分词方法在Python和R语言中的用法。
Python中的结巴分词
Python中文分词的三种常用模式
- 精确模式:
- 全模式
- 搜索引擎模式
三种模式默认都采用隐马尔科夫模型分词;同时,结巴分词支持繁体分词和自定义字典方法。
导入模块:import jieba
(1)、精确模式:
[code]>>> test = '十堰有道家发源地武当山' >>> cut1 = jieba.cut(test) >>> type(cut1) <class 'generator'> >>> print('精确分词结果:',' '.join(cut1))
Cut1不能直接查看,‘ ‘.join(cut1)函数指用空格分开cut1里面的元素,然后通过print()函数才能查看。
精确分词结果: 十堰 有 道家 发源地 武当山
(2)、全模式:
[code]>>> cut2 = jieba.cut(test,cut_all = True) >>> print('全模式分词结果:',' '.join(cut2))
全模式分词结果: 十堰 有 道家 发源 发源地 源地 武当 武当山
把所有可能的词都考虑进来了。“精确模式”其实有默认参数cut_all = False。显然,全模式不管分词后意思会不会有歧义,只管快速分出所有可能的词,不适合做文本分析。
(3)、搜索引擎模式:
[code]>>> cut3 = jieba.cut_for_search(test) >>> print('搜索引擎模式分词结果:',' '.join(cut3))
搜索引擎模式分词结果: 十堰 有 道家 发源 源地 发源地 武当 武当山
搜索引擎模式也会给出所有可能的分词结果,但是搜索引擎模式对于词典中不存在的词,比如一些很少见、新词,却能给出正确的分词结果。
添加自定义词典
[code]Path = ‘词典路径’ jieba.load_userdict (path2)
然后分词即可。
提取关键词
对于一篇文章,提取关键词,比如指定提取5个关键词:
[code]jieba.analyse.extract_tags(dat,topK = 5)
注意:亲测,词典一般是.txt,默认是ASCII格式,应该另存为utf8模式,为什么?——有中文。其实,帮助文档里面有的。
更多用法:help('jieba')获得更多详细介绍。
R语言结巴分词
"结巴"中文分词的R语言版本,支持最大概率法,隐式马尔科夫模型,索引模型,混合模型,共四种分词模式,同时有词性标注,关键词提取,文本Simhash相似度比较等功能。
包的下载与安装:
[code]>install.packages('jiebaRD') >install.packages('jiebaR') > library(jiebaRD) > library(jiebaR)
分词
[code]> test <- '革命尚未成功,同志仍需努力!' 首先需要建立分词引擎 > seg<-worker() 这里“<=”表示分词运算符 > seg<=test [1] "革命" "尚未" "成功" "同志" "仍" "需" "努力" 与下面这句效果一样 > segment(test,seg) [1] "革命" "尚未" "成功" "同志" "仍" "需" "努力" 也就是有两种写法: (1)、seg<=test (2)、segment(test,seg)
后面的类似都有两种写法。
词性标注:可以使tag来进行分词和词性标注, 词性标注使用混合模型分词,标注采用和 ictclas 兼容的标记法。
[code]>seg<-woker('tag') > test <- '革命尚未成功,同志仍需努力!' > segment(test,seg) vn d a n zg v ad "革命" "尚未" "成功" "同志" "仍" "需" "努力"
这里seg <= test也是一样的,后面一样有这样写法,只写一种,不再强调指出。
关键词提取:
关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,使用方法与分词类似。topn参数为关键词的个数,这里只提取一个关键词:
[code]> seg2<-worker('keywords',topn = 1) > keywords(test,seg2) 6.13553 "同志"
Simhash 与海明距离:
对中文文档计算出对应的simhash值。simhash是谷歌用来进行文本去重的算法,现在广泛应用在文本处理中。Simhash引擎先进行分词和关键词提取,后计算Simhash值和海明距离。
[code]> test <- '革命尚未成功,同志仍需努力!' > seg3<-worker('simhash',topn = 2) > simhash(test,seg3) $simhash [1] "13489182016966018967" $keyword 6.13553 6.0229 "同志" "努力"
列表分词:
支持一次性对多个列表(每个元素为文本)进行分词。
[code]test2 <- '十堰有道家发源地武当山' > apply_list(list(test,test2), seg) [[1]] vn d a n zg v ad "革命" "尚未" "成功" "同志" "仍" "需" "努力" [[2]] ns v n n ns "十堰" "有" "道家" "发源地" "武当山"
去除停止词
[code]>seg <- worker(stop_word = STOPPATH)
还有一些其它设置,比如:
show_dictpath():显示默认的词典路径,有jieba.dict.utf8(最大概率法)、hmm_model.utf8(隐式马尔科夫模型),这两个都是作为分词需要用到的词典;idf.utf8(TF-IDF算法)、stop_words.utf8(停用词词典),这两个词典是做关键词抽取之用。
edit_dict(name = "user"):默认编辑用户自定义词典,还有system(可以打开编辑jieba.dict.utf8),stop_word(停用词典)两个参数值供选择。
还有一些其它参数,具体参见help("jiebaR"),获取更多详细信息,学习利用帮助信息对于R语言的学习很重要。
其实,具体分词引擎worker()怎么设置,我们可以帮助一下:help('worker')就会有:
[code]worker(type = "mix", dict = DICTPATH, hmm = HMMPATH, user = USERPATH,idf = IDFPATH, stop_word = STOPPATH, write = T, qmax = 20, topn = 5,encoding = "UTF-8", detect = T, symbol = F, lines = 1e+05,output = NULL, bylines = F, user_weight = "max")
这里的一些参数:
[code]type, 引擎类型 dict, 系统词典 hmm, HMM模型路径 user, 用户词典 idf, IDF词典 stop_word, 关键词用停止词库 write, 是否将文件分词结果写入文件,默认FALSE qmax, 最大成词的字符数,默认20个字符 topn, 关键词数,默认5个 encoding, 输入文件的编码,默认UTF-8 detect, 是否编码检查,默认TRUE symbol, 是否保留符号,默认FALSE lines, 每次读取文件的最大行数,用于控制读取文件的长度。大文件则会分次读取。 output, 输出路径 bylines, 按行输出 user_weight, 用户权重
- python jieba分词模块的基本用法
- python基础之__new__的用法介绍
- 好玩的分词——python jieba分词模块的基本用法
- Python基础学习教程-第1讲 python语言介绍
- Python基础1语言介绍+数据类型+print语句
- python 3.x 结巴(jieba)分词基础知识
- $好玩的分词——python jieba分词模块的基本用法
- python基础===jieba模块,Python 中文分词组件
- Python中文分词_使用介绍(wordcloud+jieba)
- 【转帖】}$好玩的分词——python jieba分词模块的基本用法
- 浅谈python jieba分词模块的基本用法
- python jieba分词模块的基本用法
- 好玩的分词——python jieba分词模块的基本用法
- 【脚本语言系列】关于Python基础知识处理字符串,你需要知道的事
- python中partial()基础用法说明
- python中有关列表的基础用法
- Python编程语言介绍
- Python的基础—pip介绍
- python语言基础之基本数据类型及其运算(2)
- Python基础用法_字典dict