python学习 文本特征提取(二) CountVectorizer TfidfVectorizer 中文处理

上一篇博客shuihupo 博客地址https://blog.csdn.net/shuihupo/article/details/80923414 shuihupo对字典储存的的数据,我们使用CountVectorizer对特征进行抽取和向量化。
在文本数据处理中,我们遇到的经常是一个个字符串,且对于中文来说,经常要处理没有分割符的大段最原始的字符串(这种数据需要先分词,转化为一个分割好的字符串)。
对于这些数据我们会想到它们的哪些特点呢?词,统计他们包含词语的特点。python Scikit-learn 中有两个非常好的工具,CountVectorizer TfidfVectorizer。

目录

CountVectorize 主要是词频特点

  1. 对中文数据进行分词处理
  2. 创建停用词列表,文本转化为代表词频的特征向量(矩阵)
  3. 训练集和测试集分割代码
  4. 关于token_pattern参数:

TfidfVectorizer 逆文档频率

思想

Tfidf考虑到一些非常大众化的词,如“我们”等词,几乎所有或者绝大多数文章都会出现,这些词它们对文本特点刻画的贡献就比较小了(甚至影响),所以考虑要考虑在文本含义中有更高贡献的词啦,这就是逆文档频率的思想。这种方法,文档数目越多,优势更明显。

  1. 对中文数据进行分词处理
  2. 创建停用词列表,文本转化为代表逆文档频率的特征向量(矩阵)
ps:百度百科TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。

CountVectorize

常用数据输入形式为:列表,列表元素为代表文章的字符串,一个字符串代表一篇文章,字符串是已经分割好的
CountVectorizer同样适用于中文
参数表 作用
stop_words 停用词表;自定义停用词表
token_pattern 过滤规则;
>
属性表 作用
vocabulary_ 词汇表;字典型
get_feature_names() 所有文本的词汇;列表型
stop_words_ 返回停用词表

CountVectorizer是通过fit_transform函数将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在第i个文本下的词频。即各个词语出现的次数,通过get_feature_names()可看到所有文本的关键字,通过toarray()可看到词频矩阵的结果。

方法表 作用
fit_transform(X) 拟合模型,并返回文本矩阵

1.对中文数据进行分词处理

a ="自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学"
b = "因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。"
c ="因而它是计算机科学的一部分。自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。"
import jieba
all_list= ['  '.join(jieba.cut(s,cut_all = False)) for s in [a,b,c]]
print(all_list)

分词后的结果为:

['自然语言  处理  是  计算机科学  领域  与  人工智能  领域  中  的  一个  重要  方向  。  它  研究  能  实现  人  与  计算机  之间  用  自然语言  进行  有效  通信  的  各种  理论  和  方法  。  自然语言  处理  是  一门  融  语言学  、  计算机科学  、  数学  于  一体  的  科学', '因此  ,  这一  领域  的  研究  将  涉及  自然语言  ,  即  人们  日常  使用  的  语言  ,  所以  它  与  语言学  的  研究  有着  密切  的  联系  ,  但  又  有  重要  的  区别  。  自然语言  处理  并  不是  一般  地  研究  自然语言  ,  而  在于  研制  能  有效  地  实现  自然语言  通信  的  计算机系统  ,  特别  是  其中  的  软件系统  。', '因而  它  是  计算机科学  的  一部分  。  自然语言  处理  (  NLP  )  是  计算机科学  ,  人工智能  ,  语言学  关注  计算机  和  人类  (  自然  )  语言  之间  的  相互作用  的  领域  。']

对于停用词,可以在这个阶段去除,代码参考https://blog.csdn.net/u012052268/article/details/77825981,不过CountVectorize是有停用词去除的机制的,在这里我在在下一步去除。

关于上面的代码:

要关注分词输出的形式和CountVectorize所需要的数据形式统一。

2.创建停用词列表,文本转化为代表词频的特征向量(矩阵)

#从文件导入停用词表
stpwrdpath ="C:\\Users\\Administrator\Desktop\lect09_codes\lect09_proj\stop_words\\中文停用词库.txt"
with open(stpwrdpath, 'rb') as fp:
    stopword = fp.read().decode('utf-8')  # 提用词提取
#将停用词表转换为list  
stpwrdlst = stopword.splitlines()
# 从sklearn.feature_extraction.tex
  • 7
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值