TfidfVectorizer函数主要用于,将文档(句子)等通过 tf-idf值来进行表示,也就是用一个tf-idf值的矩阵来表示文档(句子也可)。

from sklearn.feature_extraction.text import TfidfVectorizer

1. 其函数源代码很长,这里只展示:

class TfidfVectorizer(CountVectorizer):
"""Convert a collection of raw documents to a matrix of TF-IDF features. Equivalent to CountVectorizer followed by TfidfTransformer. Read more in the :ref:`User Guide <text_feature_extraction>`.

其参数主要有:

input,encoding,decode_error,strip_accents,analyzer,preprocessor,tokenizer,ngram_range,stop_words,lowercase,token_pattern,max_df,min_df,max_features,vocabulary,binary,dtype,norm,use_idf,smooth_idf,sublinear_tf

其属性主要有:

vocabulary_,idf_,stop_words_

2. 常用的参数意义:

encoding:编码格式,默认是 utf-8

ngram_range:N元Gram,元组形式 tuple (min_n, max_n),表示最后得到的特征可以由几个单部分(词/句子等)构成,min_n <= n <= max_n,例如(1,2)表示,得到的特征可以由1个或者2个连续的部分构成

stop_words:string {'english'}, list, or None (default),停用词,可以用列表导入自己的停用词

lowercase:将英文全部小写,默认是True

max_df:float in range [0.0, 1.0] or int, default=1.0,表示得到的词/部分出现在文档中的最大次数,如果大于该次数,则会去掉该词/部分,例如,若设置为0-1之间的浮点数0.6,表示所提取的特征出现在60%以下的文档中,如果大于60%,则会从特征中删除。如果为整数mm,表示该特征(很多时候是词或者句子)出现的文档数必须不大于mm,否则也会删除。

min_df:float in range [0.0, 1.0] or int, default=1,同理max_df,只不过是设置的下阈值,表示该特征出现的文档数小于该值则会被删除。

vocabulary:Mapping or iterable, optional,可以用字典,例如{"华为":0, "小米":1,"ov":2},其中键值keys表示要关注的词/句子等特征,values值表示该值在特征矩阵中的索引;用于传入需要重点关注的词/句子等特征。不为空None时,max_df 和 min_df参数会失效。

use_idf:表示是否使用idf,也就是逆文档词频方法,默认是True

smooth_idf:表示在计算 idf 的时候,为了防止出现除以0的错误,会在公式中加上1。

3. 代码示例:

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd test_txt = [
'一向年光有限身。等闲离别易销魂。酒筵歌席莫辞频。满目山河空念远,落花风雨更伤春。不如怜取眼前人。',
'燕鸿过后莺归去,细算浮生千万绪。长于春梦几多时,散似秋云无觅处。闻琴解佩神仙侣,挽断罗衣留不住。劝君莫作独醒人,烂醉花间应有数。',
'绿杨芳草长亭路,年少抛人容易去。楼头残梦五更钟,花底离愁三月雨。无情不似多情苦,一寸还成千万缕。天涯地角有穷时,只有相思无尽处。',
'槛菊愁烟兰泣露,罗幕轻寒,燕子双飞去。明月不谙离恨苦,斜光到晓穿朱户。昨夜西风凋碧树,独上高楼,望尽天涯路。欲寄彩笺兼尺素,山长水阔知何处。'
] tfidf_ = TfidfVectorizer(max_df = 0.6, ngram_range = (1,1)) #中文是按照单个句子作为N元句法的,以标点为边界
tfidf_matrix = tfidf_.fit_transform(test_txt) print(tfidf_.get_feature_names()) # 输出所提取的文本关键字,也就是特征,或者说词/句子
print(tfidf_.vocabulary_) # 输出文本的关键字和其索引 print(tfidf_matrix.toarray()) # 输出最终形成的词频矩阵
X = pd.DataFrame(tfidf_matrix.toarray(), columns=tfidf_.get_feature_names()) #即可形成训练集的样本数据,加上自己的标签(例如y)就可以作为正式的训练集

输出为:

这里解释一下 ngram_range = (1,1),所以出现的是单个的部分,也就是单个句子组成的特征,例如'一向年光有限身',如果是(1,2),则出现的特征会更多,形成的是['一向年光有限身','一向年光有限身 等闲离别易销魂', '一寸还成千万缕', '一寸还成千万缕 天涯地角有穷时'......]的形式,其他的(1,3), (2,4)等都与此类似。

可以看到:句子依然是句子,如果想要得到词,该怎么办呢?

当然是先将各个句子分词,然后形成list,同样传入list参数取代上面的test_txt即可。

分词:可以使用jieba分词

import jieba
stop_words = [] #停用词需要自己加入
def cut_word(sentence):
words = [i for i in jieba.cut(sentence) if i not in stop_words]
# sentence是传入的单个句子,切完的词用空格隔开
result = ' '.join(words)
return result #返回的值形成了一个以空格分隔的字符串

参考:

https://blog.csdn.net/blmoistawinde/article/details/80816179

https://www.cnblogs.com/my-love-is-python/p/10324709.html

sklearn.feature_extraction.text 的TfidfVectorizer函数的更多相关文章

  1. sklearn.feature_extraction.text.CountVectorizer 学习

    CountVectorizer: CountVectorizer可以将文本文档集合转换为token计数矩阵.(token可以理解成词) 此实现通过使用scipy.sparse.csr_matrix产生 ...

  2. 理解sklearn.feature.text中的CountVectorizer和TfidfVectorizer

    """ 理解sklearn中的CountVectorizer和TfidfVectorizer """ from collections im ...

  3. 特征抽取: sklearn.feature_extraction.FeatureHasher

    sklearn.feature_extraction.FeatureHasher(n_features=1048576, input_type="dict", dtype=< ...

  4. 特征抽取: sklearn.feature_extraction.DictVectorizer

    sklearn.featture_extraction.DictVectorizer: 将特征与值的映射字典组成的列表转换成向量. DictVectorizer通过使用scikit-learn的est ...

  5. sklearn.feature_extraction.DictVectorizer

    sklearn.feature_extraction.DictVectorizer:将字典组成的列表转换成向量.(将特征与值的映射字典组成的列表转换成向量) 1. 特征矩阵行代表数据,列代表特征,0表 ...

  6. sklearn中,数据集划分函数 StratifiedShuffleSplit.split() 使用踩坑

    在SKLearn中,StratifiedShuffleSplit 类实现了对数据集进行洗牌.分割的功能.但在今晚的实际使用中,发现该类及其方法split()仅能够对二分类样本有效. 一个简单的例子如下 ...

  7. Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别

    敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: ...

  8. 【学亮IT手记】jQuery text()/html()回调函数实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  9. 显示定位方法,提取中间text 封装成函数的方法

    tager='工作台' element=WebDriverWait(self.dr,15,0.1).until( eval("lambda x: x."+'find_element ...

随机推荐

  1. Linux终端复制粘贴后前后会多出0~和~1

    在终端中执行即可 printf "\e[?2004l" 在终端无法复制问题 set mouse=r

  2. Vue组件注册与数据传递

    父子组件创建流程 1.构建父子组件 1.1 全局注册 (1)构建注册子组件 //构建子组件child var child = Vue.extend({ template: '<div>这是 ...

  3. Android Studio使用adb命令连接平板

    有需要使用adb命令连接调试平板的同学可以参考下(下面是android官方文档,有点老). http://donandroid.com/how-to-install-adb-interface-dri ...

  4. ClickHouse中的循环复制集群拓扑

    关系型数据库,但千万级表关联数据库基本上不太可能做到秒出:考虑过Sharding,但数据量大, 各种成本都很高:热数据存储到ElasticSearch,但无法跨索引关联,导致不得不做宽表, 因为权限, ...

  5. IntelliJ IDEA 常用快捷键 之 Windows 版

    IntelliJ IDEA(简称 IDEA),是 Java 语言开发的集成环境,IDEA 在业界被公认为最好的 Java 开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE 支持.各类版本 ...

  6. c++项目经验分享

    1.C++的const比C语言#define更好的原因? 首先,它能够明确指定类型,有类型检查功能. 其次,可以使用C++的作用域规则将定义限制在特定的函数[常函数]或文件中. 第三,可以将const ...

  7. Django框架(十一)--cookie和session

    cookie和session组件 cookie 1.cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它 ...

  8. C# 简单的定时器使用

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  9. form表单提交数据给后台

    1.完整登录示例 1. form表单往后端提交数据注意三点 1.所有获取用户输入标签都应该放在form表单里面 2.action属性控制往哪儿提交,method一般都是设置成post 3.提交按钮必须 ...

  10. Thymeleaf前后端分页查询

    分页查询是一个很常见的功能,对于分页也有很多封装好的轮子供我们使用. 比如使用mybatis做后端分页可以用Pagehelper这个插件,如果使用SpringDataJPA更方便,直接就内置的分页查询 ...