python中文分词
1. 如何用python对文章中文分词并统计词频
1、全局变量在函数中使用时需要加入global声明
2、获取网页内容存入文件时的编码为ascii进行正则匹配时需要decode为GB2312,当匹配到的中文写入文件时需要encode成GB2312写入文件。
3、中文字符匹配过滤正则表达式为ur'[\u4e00-\u9fa5]+',使用findall找到所有的中文字符存入分组
4、KEY,Value值可以使用dict存储,排序后可以使用list存储
5、字符串处理使用split分割,然后使用index截取字符串,判断哪些是名词和动词
6、命令行使用需要导入os,os.system(cmd)
2. python问题
#python3
importre
importsys
a='''我是中国人
巴林公主将于今日举行婚礼'''
b='''我
我是
是中国人
中国人
我是中国
人
巴林
公主
将
于
今日
举行
婚礼
举行婚礼'''
b=b.splitlines()
defsolve(a=a,b=b,file=sys.stdout):
def_f(s,start,temp=[]):
forpinb:
ifs[start:].startswith(p):
temp.append(p)
end=start+len(p)+1
ifend>=len(s):
file.write(str(temp)+' ')
temp.pop()
return
else:
_f(s,end,temp)
temp.pop()
forsina.splitlines():
_f(s,0)
>>>solve()
['我','是中国人']
['我是','中国人']
['我是中国','人']
['巴林','公主','将','于','今日','举行','婚礼']
['巴林','公主','将','于','今日','举行婚礼']
3. python数据挖掘——文本分析
作者 | zhouyue65
来源 | 君泉计量
文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程。
一、语料库(Corpus)
语料库是我们要分析的所有文档的集合。
二、中文分词
2.1 概念:
中文分词(Chinese Word Segmentation):将一个汉字序列切分成一个一个单独的词。
eg:我的家乡是广东省湛江市-->我/的/家乡/是/广东省/湛江市
停用词(Stop Words):
数据处理时,需要过滤掉某些字或词
√泛滥的词,如web、网站等。
√语气助词、副词、介词、连接词等,如 的,地,得;
2.2 安装Jieba分词包:
最简单的方法是用CMD直接安装:输入pip install jieba,但是我的电脑上好像不行。
后来在这里:https://pypi.org/project/jieba/#files下载了jieba0.39解压缩后 放在Python36Libsite-packages里面,然后在用cmd,pip install jieba 就下载成功了,不知道是是什么原因。
然后我再anaconda 环境下也安装了jieba,先在Anaconda3Lib这个目录下将jieba0.39的解压缩文件放在里面,然后在Anaconda propt下输入 pip install jieba,如下图:
2.3 代码实战:
jieba最主要的方法是cut方法:
jieba.cut方法接受两个输入参数:
1) 第一个参数为需要分词的字符串
2)cut_all参数用来控制是否采用全模式
jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
注意:待分词的字符串可以是gbk字符串、utf-8字符串或者unicode
jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode),也可以用list(jieba.cut(...))转化为list代码示例( 分词 )
输出结果为: 我 爱
Python
工信处
女干事
每月 经过 下属 科室 都 要 亲口
交代
24 口 交换机 等 技术性 器件 的 安装
工作
分词功能用于专业的场景:
会出现真武七截阵和天罡北斗阵被分成几个词。为了改善这个现象,我们用导入词库的方法。
但是,如果需要导入的单词很多,jieba.add_word()这样的添加词库的方法就不高效了。
我们可以用jieba.load_userdict(‘D:PDM2.2金庸武功招式.txt’)方法一次性导入整个词库,txt文件中为每行一个特定的词。
2.3.1 对大量文章进行分词
先搭建语料库:
分词后我们需要对信息处理,就是这个分词来源于哪个文章。
四、词频统计
3.1词频(Term Frequency):
某个词在该文档中出现的次数。
3.2利用Python进行词频统计
3.2.1 移除停用词的另一种方法,加if判断
代码中用到的一些常用方法:
分组统计:
判断一个数据框中的某一列的值是否包含一个数组中的任意一个值:
取反:(对布尔值)
四、词云绘制
词云(Word Cloud):是对文本中词频较高的分词,给与视觉上的突出,形成“关键词渲染”,从而国旅掉大量的文本信息,使浏览者一眼扫过就可以领略文本的主旨。
4.1 安装词云工具包
这个地址:https://www.lfd.uci.e/~gohlke/pythonlibs/ ,可以搜到基本上所有的Python库,进去根据自己的系统和Python的版本进行下载即可。
在python下安装很方便,在anaconda下安装费了点劲,最终将词云的文件放在C:UsersAdministrator 这个目录下才安装成功。
五、美化词云(词云放入某图片形象中)
六、关键词提取
结果如下:
七、关键词提取实现
词频(Term Frequency):指的是某一个给定的词在该文档中出现的次数。
计算公式: TF = 该次在文档中出现的次数
逆文档频率(Inverse Document Frequency):IDF就是每个词的权重,它的大小与一个词的常见程度成反比
计算公式:IDF = log(文档总数/(包含该词的文档数 - 1))
TF-IDF(Term Frequency-Inverse Document Frequency):权衡某个分词是否关键词的指标,该值越大,是关键词的可能性就越大。
计算公式:TF - IDF = TF * IDF
7.1文档向量化
7.2代码实战
4. 中科院汉语分词系统:在python中的安装步骤
1、打开anaconda的Anaconda Prompt界面。
2、使用pip安装中科院汉语分词系统的第三方库文件(pynlpir)
3、接着按一下键盘上的enter键,开始安装。
4、接着需要更新一下pynlpir,不然会出现许可证过期的情况。
5、然后按一下键盘上的enter键,开始更新。
6、最后我们就可以在python的编辑上使用中科院汉语分词系统了
5. python 中文分词后存在空格问题
感觉这是控件的问题,空行是方便用户增加新行。
最好写到文件来检查有没有空格。
6. 怎么是用python 语言 使用结巴分词 呢
Python代码
#encoding=utf-8
importjieba
seg_list=jieba.cut("我来到北京清华大学",cut_all=True)
print"FullMode:","/".join(seg_list)#全模式
seg_list=jieba.cut("我来到北京清华大学",cut_all=False)
print"DefaultMode:","/".join(seg_list)#默认模式
seg_list=jieba.cut("他来到了网易杭研大厦")
print",".join(seg_list)
输出:
FullMode:我/来/来到/到/北/北京/京/清/清华/清华大学/华/华大/大/大学/学
DefaultMode:我/来到/北京/清华大学
他,来到,了,网易,杭研,大厦(此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
7. Python中文分词的原理你知道吗
中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那么回事,但分词效果好不好对信息检索、实验结果还是有很大影响的,同时分词的背后其实是涉及各种各样的算法的。
中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,需要人为切分。根据其特点,可以把分词算法分为四大类:
基于规则的分词方法
基于统计的分词方法
基于语义的分词方法
基于理解的分词方法
下面我们对这几种方法分别进行总结。
基于规则的分词方法
这种方法又叫作机械分词方法、基于字典的分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配。若在词典中找到某个字符串,则匹配成功。该方法有三个要素,即分词词典、文本扫描顺序和匹配原则。文本的扫描顺序有正向扫描、逆向扫描和双向扫描。匹配原则主要有最大匹配、最小匹配、逐词匹配和最佳匹配。
最大匹配法(MM)。基本思想是:假设自动分词词典中的最长词条所含汉字的个数为 i,则取被处理材料当前字符串序列中的前 i 个字符作为匹配字段,查找分词词典,若词典中有这样一个 i 字词,则匹配成功,匹配字段作为一个词被切分出来;若词典中找不到这样的一个 i 字词,则匹配失败,匹配字段去掉最后一个汉字,剩下的字符作为新的匹配字段,再进行匹配,如此进行下去,直到匹配成功为止。统计结果表明,该方法的错误率 为 1/169。
逆向最大匹配法(RMM)。该方法的分词过程与 MM 法相同,不同的是从句子(或文章)末尾开始处理,每次匹配不成功时去掉的是前面的一个汉字。统计结果表明,该方法的错误率为 1/245。
逐词遍历法。把词典中的词按照由长到短递减的顺序逐字搜索整个待处理的材料,一直到把全部的词切分出来为止。不论分词词典多大,被处理的材料多么小,都得把这个分词词典匹配一遍。
设立切分标志法。切分标志有自然和非自然之分。自然切分标志是指文章中出现的非文字符号,如标点符号等;非自然标志是利用词缀和不构成词的词(包 括单音词、复音节词以及象声词等)。设立切分标志法首先收集众多的切分标志,分词时先找出切分标志,把句子切分为一些较短的字段,再用 MM、RMM 或其它的方法进行细加工。这种方法并非真正意义上的分词方法,只是自动分词的一种前处理方式而已,它要额外消耗时间扫描切分标志,增加存储空间存放那些非 自然切分标志。
最佳匹配法(OM)。此法分为正向的最佳匹配法和逆向的最佳匹配法,其出发点是:在词典中按词频的大小顺序排列词条,以求缩短对分词词典的检索时 间,达到最佳效果,从而降低分词的时间复杂度,加快分词速度。实质上,这种方法也不是一种纯粹意义上的分词方法,它只是一种对分词词典的组织方式。OM 法的分词词典每条词的前面必须有指明长度的数据项,所以其空间复杂度有所增加,对提高分词精度没有影响,分词处理的时间复杂度有所降低。
此种方法优点是简单,易于实现。但缺点有很多:匹配速度慢;存在交集型和组合型歧义切分问题;词本身没有一个标准的定义,没有统一标准的词集;不同词典产生的歧义也不同;缺乏自学习的智能性。
基于统计的分词方法
该方法的主要思想:词是稳定的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻出现的概率或频率能较好地反映成词的可信度。可以对训练文本中相邻出现的各个字的组合的频度进行统计,计算它们之间的互现信息。互现信息体现了汉字之间结合关系的紧密程度。当紧密程 度高于某一个阈值时,便可以认为此字组可能构成了一个词。该方法又称为无字典分词。
该方法所应用的主要的统计模型有:N 元文法模型(N-gram)、隐马尔可夫模型(Hiden Markov Model,HMM)、最大熵模型(ME)、条件随机场模型(Conditional Random Fields,CRF)等。
在实际应用中此类分词算法一般是将其与基于词典的分词方法结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。
基于语义的分词方法
语义分词法引入了语义分析,对自然语言自身的语言信息进行更多的处理,如扩充转移网络法、知识分词语义分析法、邻接约束法、综合匹配法、后缀分词法、特征词库法、矩阵约束法、语法分析法等。
扩充转移网络法
该方法以有限状态机概念为基础。有限状态机只能识别正则语言,对有限状态机作的第一次扩充使其具有递归能力,形成递归转移网络 (RTN)。在RTN 中,弧线上的标志不仅可以是终极符(语言中的单词)或非终极符(词类),还可以调用另外的子网络名字分非终极符(如字或字串的成词条件)。这样,计算机在 运行某个子网络时,就可以调用另外的子网络,还可以递归调用。词法扩充转移网络的使用, 使分词处理和语言理解的句法处理阶段交互成为可能,并且有效地解决了汉语分词的歧义。
矩阵约束法
其基本思想是:先建立一个语法约束矩阵和一个语义约束矩阵, 其中元素分别表明具有某词性的词和具有另一词性的词相邻是否符合语法规则, 属于某语义类的词和属于另一词义类的词相邻是否符合逻辑,机器在切分时以之约束分词结果。
基于理解的分词方法
基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。目前基于理解的分词方法主要有专家系统分词法和神经网络分词法等。
专家系统分词法
从专家系统角度把分词的知识(包括常识性分词知识与消除歧义切分的启发性知识即歧义切分规则)从实现分词过程的推理机中独立出来,使知识库的维护与推理机的实现互不干扰,从而使知识库易于维护和管理。它还具有发现交集歧义字段和多义组合歧义字段的能力和一定的自学习功能。
神经网络分词法
该方法是模拟人脑并行,分布处理和建立数值计算模型工作的。它将分词知识所分散隐式的方法存入神经网络内部,通过自学习和训练修改内部权值,以达到正确的分词结果,最后给出神经网络自动分词结果,如使用 LSTM、GRU 等神经网络模型等。
神经网络专家系统集成式分词法
该方法首先启动神经网络进行分词,当神经网络对新出现的词不能给出准确切分时,激活专家系统进行分析判断,依据知识库进行推理,得出初步分析,并启动学习机制对神经网络进行训练。该方法可以较充分发挥神经网络与专家系统二者优势,进一步提高分词效率。
以上便是对分词算法的基本介绍。
8. 用python怎么能够将一句中文分割为单个的字
字符串可以直接分片或者索引访问,比如s[0]=我,s[-1]=做。等等。
如果是要转成list,可以直接构造,如: l=list('abc')或者l=list(s)
分词需要相应的算法和词典支持。pymmseg-cpp是一个不错的python中文分词库。你可以试试。
https://github.com/pluskid/pymmseg-cpp/