文本处理方法概述

来源:互联网 发布:苹果分区数据恢复 编辑:程序博客网 时间:2024/06/06 20:28

说明:本篇以实践为主,理论部分会尽量给出参考链接

摘要:
  1.分词
  2.关键词提取

  3.主题模型(LDA/TWE)
  4.词的两种表现形式(词袋模型和分布式词向量)
  5.关于文本的特征工程
  6.文本挖掘(文本分类,文本用户画像)

内容:

  1.分词

  分词是文本处理的第一步,词是语言的最基本单元,在后面的文本挖掘中无论是词袋表示还是词向量形式都是依赖于分词的,所以一个好的分词工具是非常重要的。
这里以python的jieba分词进行讲解分词的基本流程,在讲解之前还是想说一下jieba分词的整个工作流程:

 

图1是jieba切词函数的4个可能过程,图2是一个根据DAG图计算最大概率路径,具体的代码走读请参考jieba cut源码
讲了这么多,我们还是要回归到实践中去,看下jieba的分词接口

 1 # encoding=utf-8 2 import jieba 3  4 seg_list = jieba.cut("我来到北京清华大学", cut_all=True) 5 print("Full Mode: " + "/ ".join(seg_list))  # 全模式 9 10 seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式11 print(", ".join(seg_list))12 13 seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式14 print(", ".join(seg_list))
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学【精确模式】: 他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

其中全模式切词不会发生图1中的第3,4步,也不会发现新词,是一种完全依赖于词典的分词方式
精确模式是会全部计算最大概率路径和新词发现的。

我们都知道分词最重要的是字典,所以jieba也提供了若干方法对词典进行设置:

 jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径#词典文件举例:#创新办 3 i#云计算 5#凱特琳 nz#台中add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来

  2.关键词提取

文本被分词之后和数据处理一样,也会有如下两个问题:

其一,并不是所有的词都是有用的;其二,一个语料库的词量是非常大的,传统的文本挖掘方法又是基于向量空间模型表示的,所以这会造成数据过于稀疏。

为了解决这两个问题一般会进行停用词过滤和关键字提取,而后者现有基于频率的TF-IDF计算方法和基于图迭代的TextRank的计算方法两种。下面看看这两种方法是怎么工作的

 

 这里TF表示词在文章中的重要性,因为我们知道一个文章的主题一多次出现;IDF表示词的区分度,因为专业词汇在整个语料库中出现越少,越能关联文章主题。具体来说就是信息熵越低。

   

图1是一个文章的上下文词构造的无向加权图(UWG),图2是叶结点的权重迭代公式,其中d是阻尼系数。可见textRank认为一个节点如果入度多且权重大,那么这个节点越重要。

具体理论和代码走读参考: 关键词抽取源码,TextRank: Bringing Order into Texts;下面我们就动手试试吧!

import jieba.analyse#设置停词表路径jieba.analyse.set_stop_words(file_name) # file_name为自定义语料库的路径#默认tfidf提取关键词jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())#sentence 为待提取的文本#topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20#withWeight 为是否一并返回关键词权重值,默认值为 False#allowPOS 仅包括指定词性的词,默认值为空,即不筛选jieba.analyse.TFIDF(idf_path=None) #新建 TFIDF 实例,idf_path 为 IDF 频率文件#textrank提取关键词jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))

上面jieba的TFIDF是通过需要指定IDF文件预先指定词的IDF值的,同时textrank中比较重要的参数有一个上下文窗口。jieba通过了这两个方法让我们筛选出前多少个关键词。然而sklearn提供了一种构建文档词矩阵(稀疏矩阵)的方法,可以让我们直接构建文本训练集。

>>> from sklearn.feature_extraction.text import TfidfVectorizer>>> vectorizer = TfidfVectorizer()>>> vectorizer.fit_transform(corpus)...                                <4x9 sparse matrix of type '<... 'numpy.float64'>'    with 19 stored elements in Compressed Sparse ... format>

待续~~~

 

 

  

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机屏幕边缘掉漆了怎么办 十八k白金变色了怎么办 手机后面掉漆了怎么办 玫瑰金戒指刮花了怎么办 玫瑰金手镯刮花了怎么办 玫瑰金链子断了怎么办 dw玫瑰金掉色了怎么办 6s玫瑰金氧化了怎么办 书本湿的很严重怎么办 除湿盒的水满了怎么办 书被水泡变黄了怎么办 文件纸被弄皱了怎么办 纸的一角皱了怎么办 裤子被雨水打湿变色了怎么办 书本上粘了有油怎么办 手被水泡了皱了怎么办 水泡破了感染了怎么办 夏天腋下出汗会弄湿衣服怎么办 夏天腋下出汗多弄湿衣服怎么办 上眼皮干燥起皮怎么办 怀孕下面湿又痒怎么办 内裤穿久了有异味怎么办 刨腹产私处捂烂了怎么办 猫咬手指出血了怎么办 老有白带涌出来怎么办 耳朵里塞了珠子怎么办 树脂发光字烧了怎么办 马蹄莲长得太高怎么办 百合球的芽断了怎么办 种的百合开败怎么办 盆栽百合花开完之后怎么办 土养百合花谢了怎么办 多肉叶子不饱满怎么办 冬天富贵竹叶子发黄怎么办水养 富贵竹叶子发黄怎么办水养 水养富贵竹有虫怎么办 水养的富贵竹叶子发黄怎么办 百合花水里的盐放多了怎么办 芦荟叶子发黄干瘪了怎么办 水插百合不开花怎么办 干百合冷水泡了怎么办