天天看点

[python] 使用Jieba工具中文分词及文本聚类概念

        内容如下图所示,共204个国家5a级景点的摘要信息。这里就不再叙述:

[python] 使用Jieba工具中文分词及文本聚类概念
[python] 使用Jieba工具中文分词及文本聚类概念

        结巴中文分词涉及到的算法包括:

        (1) 基于trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(dag);

        (2) 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;

        (3) 对于未登录词,采用了基于汉字成词能力的hmm模型,使用了viterbi算法。

        结巴中文分词支持的三种分词模式包括:

        (1) 精确模式:试图将句子最精确地切开,适合文本分析;

        (2) 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义问题;

        (3) 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

        同时结巴分词支持繁体分词和自定义字典方法。

        输出如下图所示:

[python] 使用Jieba工具中文分词及文本聚类概念

        代码中函数简单介绍如下:

        jieba.cut():第一个参数为需要分词的字符串,第二个cut_all控制是否为全模式。

        jieba.cut_for_search():仅一个参数,为分词的字符串,该方法适合用于搜索引擎构造倒排索引的分词,粒度比较细。

        其中待分词的字符串支持gbk\utf-8\unicode格式。返回的结果是一个可迭代的generator,可使用for循环来获取分词后的每个词语,更推荐使用转换为list列表。

        2.添加自定义词典

        由于"国家5a级景区"存在很多旅游相关的专有名词,举个例子:

   [输入文本] 故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等

   [精确模式] 故宫/的/著名景点/包括/乾/清宫/、/太和殿/和/黄/琉璃瓦/等

   [全 模 式] 故宫/的/著名/著名景点/景点/包括/乾/清宫/太和/太和殿/和/黄/琉璃/琉璃瓦/等

        显然,专有名词"乾清宫"、"太和殿"、"黄琉璃瓦"(假设为一个文物)可能因分词而分开,这也是很多分词工具的又一个缺陷。但是jieba分词支持开发者使用自定定义的词典,以便包含jieba词库里没有的词语。虽然结巴有新词识别能力,但自行添加新词可以保证更高的正确率,尤其是专有名词。

        基本用法:jieba.load_userdict(file_name) #file_name为自定义词典的路径

        词典格式和dict.txt一样,一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略,ns为地点名词),用空格隔开。

        强烈推荐一篇词性标注文章,链接如下:

        输出结果如下所示,其中专有名词连在一起,即"乾清宫"和"黄琉璃瓦"。

[python] 使用Jieba工具中文分词及文本聚类概念

        3.关键词提取

        在构建vsm向量空间模型过程或者把文本转换成数学形式计算中,你需要运用到关键词提取的技术,这里就再补充该内容,而其他的如词性标注、并行分词、获取词位置和搜索引擎就不再叙述了。

        基本方法:jieba.analyse.extract_tags(sentence, topk) 

        需要先import jieba.analyse,其中sentence为待提取的文本,topk为返回几个tf/idf权重最大的关键词,默认值为20。

        输出结果如下,其中"午门"出现3次、"乾清宫"出现2次、"著名景点"出现1次,按照顺序输出提取的关键词。如果topk=5,则输出:"午门 乾清宫 著名景点 太和殿 向阳"。

        4.对百度百科获取摘要分词

        从baiduspider文件中读取0001.txt~0204.txt文件,分别进行分词处理再保存。

        运行结果如下图所示:

[python] 使用Jieba工具中文分词及文本聚类概念

        5.去除停用词

        在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为stop words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。但是,并没有一个明确的停用词表能够适用于所有的工具。甚至有一些工具是明确地避免使用停用词来支持短语搜索的。[参考百度百科]

[python] 使用Jieba工具中文分词及文本聚类概念

        文本聚类的主要依据聚类假设是:同类的文档相似度较大,而非同类文档相似度较小。同时使用无监督学习方法,聚类不需要训练过程以及不需要预先对文档手工标注类别,因此具有较高的灵活性和自动化处理能力。主要分为以下部分:

        (1) 预处理常用方法

        文本信息预处理(词性标注、语义标注),构建统计词典,对文本进行词条切分,完成文本信息的分词过程。

        (2) 文本信息的特征表示

        采用方法包括布尔逻辑型、概率型、混合型和向量空间模型。其中向量空间模型vsm(vector space model)是将文档映射成向量的形式,(t1, t2, ..., tn)表示文档词条,(w1, w2, ..., wn)文档词条对应权重。建立文本特征主要用特征项或词条来表示目标文本信息,构造评价函数来表示词条权重,尽最大限度区别不同的文档。

        (3) 文本信息特征缩减

        vsm文档特征向量维数众多。因此,在文本进行聚类之前,应用文本信息特征集进行缩减,针对每个特征词的权重排序,选取最佳特征,包括tf-idf。推荐向量稀疏表示方法,提升聚类的效果,其中(d1, d2, ..., dn)表示权重不为0的特征词条。

        (4) 文本聚类

        文本内容表示成数学课分析形势后,接下来就是在此数学基础上进行文本聚类。包括基于概率方法和基于距离方法。其中基于概率是利用贝叶斯概率理论,概率分布方式;基于聚类是特征向量表示文档(文档看成一个点),通过计算点之间的距离,包括层次聚类法和平面划分法。

       后面我可能也会写具体的python聚类算法,vsm计算相似度我前面已经讲过。同时,他的实验数据是搜狐中心的10个大类,包括汽车、财经、it、体育等,而我的数据都是旅游,如何进一步聚类划分,如山川、河流、博物馆等等,这是另一个难点。

        最后还是那句话:不论如何,希望文章对你有所帮助,如果文章中有错误或不足之处,还请海涵~写文不易,且看且分析。加油!!!