作家
登录

如何使用Scikit-learn实现用于机器学习的文本数据准备

作者: 来源: 2017-11-03 14:15:10 阅读 我要评论


若何应用Scikit-learn实现用于机械进修的文本数据预备

在应用文本数据来搭建猜测模型前,都须要特别的预备工作。

下面是一个应用上述的词条化对象对文档进行编码的示例,该文档中含有一个词汇表中的词,以及一个不在词汇表中的词。

文本起重要经由过程解析来提取悼?船这一过程称为词条化。然后单词须要编码为整数或浮点值,作为机械进修算法的输入,称为特点提取(或量化)。

scikit-learn供给了简单的对象赞助我们对你的文本数据进行词条化和特点提取。

在这篇文┞仿中,你会学到在Python中若何应用scikit-learn实现用于机械进修的文本数据预备。

在读完这篇文┞仿后,你会懂得到:

  • 若何应用CountVectorizer将文本的转化成单词频数向量。
  • 若何应用TfidfVectorizer提取文本的单词权重向量。
  • 若何应用HashingVectorizer将文本映射到特点索引。

让我们开端吧。

“词袋(Bag-of-words)”模型

在应用机械进修算法时,我们不克不及直接用文本进交运算。相反,我们须要将文本转换成数字。

我们想对文档进行分类时,每个文档作为“输入”,文档的类别标签是我们猜测算法的“输出”。算法只能接法术字向量作为输入,所以须要将文档转换成固定长度的数字向量。

机械进修范畴有一个简单且有效的模型,实用于文本文档,叫做“词袋”(Bag-of-Words)模型,简称为BOW。

该模型的简单之处在于,它舍弃了单词中的所有次序信息,并重要存眷文档中单词典出现频率。

我们选择了一个固定长度为20的随便率性向量。这个值对应哈希函数典范围,小的值(例如20)可能会导致哈希碰撞。在之前的计算机科学课程中,我们介绍过一些启发式算法,可以根据估计的词汇量来选择哈希长度和碰撞概率。

这一点可以经由过程分派给每个单词一个独一的数字来实现。如许一来,我们看到的任何文档都可以编码成一个固定长度的向量,长度为已知单词所构成的词汇表的长度。该向量中每个地位的值是编码文档中的每个单词出现的次数或频率。

这就是“词袋”模型,我们只关怀编码办法,能表示哪些词语在文档中出现了,或者他们在编码文档中出现的频率,而不推敲任何干于次序的信息。

这个简单的办法有很多种扩大,既可以更好地解释“单词”的含义,也可以定义向量中每个单词典编码方法。

scikit-learn供给了3种可供我们应用的不合办法,我们将扼要地看一下每种办法。

  1. from sklearn.feature_extraction.text import CountVectorizer 
  2. # 文本文档列表 
  3. text = ["The quick brown fox jumped over the lazy dog."
  4. # 构造变换函数 
  5. vectorizer = CountVectorizer() 
  6. # 词条化以及建立词汇表 
  7. vectorizer.fit(text) 
  8. # 总结 
  9. print(vectorizer.vocabulary_) 
  10. # 编码文档 
  11. vector = vectorizer.transform(text) 
  12. # 总结编码文档 
  13. print(vector.shape) 
  14. print(type(vector)) 
  15. print(vector.toarray()) 

CountVectorizer——量化单词数量

CountVectorizer供给了一种简单的办法,不仅可以将文本文档的数据集转化成词条并建立一个已知单词典词汇表,并且还可以用该词汇表对新文本进行编码。

编码获得的向量可以或许返回全部词汇表的长度,以及每个单词在该文档中出现的次数。

下面是一个应用CountVectorizer来词条化、构造词汇表,以及编码文档的示例。

调用transform()所返回的向量是稀少向量,你可以将它们转换为numpy数组,看起来更直不雅也更好懂得,这一步可以经由过程调用toarray()函数完成。

大年夜上例中可以看到,我们经由过程词汇表来查看到底是什么被词条化了:

  1. print(vectorizer.vocabulary_) 

应用办法如下:

  1. 创建CountVectorizer类的一个实例。
  2. 调用fit()函数,经由过程进修年腋荷琐或多个文档中得出一个词汇表。
  3. 对一或多个文档应用transform()函数,将每个文档编码成一个向量。

可以看到,所有单词默认情况下是小写,并且忽视掉落标点符号。词条化的┞封些参数以及其他方面是可设备的,我建议你在API文档中查看所有选项。

运行这个示例,起首会显示出词汇表,然后显示出编码文档的外形。我们可以看到,词汇表中有8个悼?船于是编码向量的长度为8。

可以看出,编码向量是一个稀少矩阵。最后,我们可以看到以数组情势出现的编码向量,显示出每个单词典出现次数为1,除了索引号为7的单词出现次数为2。

  1. {'dog': 1, 

      推荐阅读

      互联网政务服务平台检查:一些平台搜索功能成摆设

    传递提到,本次本次对31个省(区、市)及新疆临盆扶植兵团的互联网政务办事平台进行了检查,共随机抽查平台201个,个中省级平台30个、地市级平台42个、区县级平台129个。除核查各平台功能是>>>详细阅读


    本文标题:如何使用Scikit-learn实现用于机器学习的文本数据准备

    地址:http://www.17bianji.com/lsqh/38463.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)