TF-IDF(词频-逆文档频率)的sklearn实现

2021/4/11 18:56:45

本文主要是介绍TF-IDF(词频-逆文档频率)的sklearn实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在获取单词的TF-IDF值的时候,可以选用已有的库来实现,而不用再去手动去写。

这里使用sklearn中提供的已有的方法来获取TF-IDF:

TfidfVectorizer类

class sklearn.feature_extraction.text.TfidfVectorizer(*, 
input='content', 
encoding='utf-8', 
decode_error='strict', 
strip_accents=None, 
lowercase=True, 
preprocessor=None, 
tokenizer=None, 
analyzer='word',
stop_words=None, 
token_pattern='(?u)\b\w\w+\b', 
ngram_range=(1, 1), 
max_df=1.0, 
min_df=1, 
max_features=None, 
vocabulary=None, 
binary=False, 
dtype=<class 'numpy.float64'>, 
norm='l2', 
use_idf=True, 
smooth_idf=True, 
sublinear_tf=False)

 

参数详解:

input:

input:{‘filename’, ‘file’, ‘content’}, default=’content’

input参数有三个可选择的值,分别是filename、file、content,默认为content

filename则作为参数传递的序列应该是需要读取以获取原始内容进行分析的文件名列表
file

序列项必须有一个'read'方法(类似文件的对象),调用该方法来获取内存中的字节。

content输入应该是一系列string或byte类型的项。

 

 

 

 

 

 


encoding

encoding:str, default=’utf-8’

设置编码格式


decode_error

decode_error:{‘strict’, ‘ignore’, ‘replace’}, default=’strict’

如果要分析的字节序列存在不属于给定编码的字符(无法用指定好的编码格式解析),则执行什么操作的指令。

默认情况下,它是“strict”,将引发UnicodeDecodeError。

其他值为“ignore”和“replace”。


strip_accents

strip_accents{‘ascii’, ‘unicode’}, default=None

在预处理步骤中删除重音符号并执行其他字符规范化。“

ascii仅适用于具有直接ascii映射的字符的快速方法。
unicode一种处理任何字符的稍慢的方法。
None(默认值)不执行任何操作。

 

 

 

 


lowercase

lowercase:bool, default=True

在标记化之前将所有字符转换为小写。


preprocessor

preprocessor:callable, default=None

重写预处理(字符串转换)阶段,同时保留标记化和n-grams生成步骤。

只有当analyzer不调用时才有用。


tokenizer

tokenizer:callable, default=None

重写字符串标记化步骤,同时保留预处理和n-grams生成步骤。

仅当analyzer=='word'时适用。


analyzer

analyzer{‘word’, ‘char’, ‘char_wb’} or callable, default=’word’

特征是否应该由单词或字符n-grams构成。

选项“char_wb”仅从单词边界内的文本创建字符n-gram;

单词边缘的n-gram用空格填充。


stop_words

stop_words:{‘english’}, list, default=None 

对于字符串,它被传递到_check_stop_list,并返回相应的stop list。

目前只支持英语!

如果是列表,这个列表中包含所有的停止词,结果中的这些词将会被过滤——仅当analyzer的取值为'word'时适用。

如果没有,将不使用停止词。

max_df 可以设置为[0.7,1.0)范围内的值,以根据语料库内的文档术语频率自动检测和过滤停止词。


max_df

max_df:float or int, default=1.0

在构建词汇表时,忽略文档频率严格高于给定阈值的术语(语料库特定的停止词)。

如果浮动范围为[0.0,1.0],则该参数表示文档的比例,整数绝对计数。

如果词汇表不是“无”,则忽略此参数。

 

相关的类属性:

属性名解释

vocabulary_:dict

term到 featur indices的映射。
fixed_vocabulary_: bool如果用户提供了term到featur indices的固定词汇表,则为True

idf_:array of shape (n_features,)

反向文档频率(IDF)向量;仅当“use_index”为True时定义。

stop_words_:set

被忽略的术语,包含三种情况:

出现在太多文档中(max_df)

出现的文档太少(min_df)

被特征选择切断(max_feature)

只有在没有给出词汇表的情况下才可以使用。

 

 

 

 

 

相关类方法:

函数功能
build_analyzer()返回处理预处理、标记化和n-grams生成的可调用函数。
build_preprocessor()返回一个函数,在标记化之前对文本进行预处理。
build_tokenizer()返回一个函数,该函数将字符串拆分为一系列标记(tokens)。
decode(doc)将输入解码为unicode符号字符串。
fit(raw_documents[, y])从训练集中学习词汇和idf。
fit_transform(raw_documents[, y])学习vocabulary和idf,返回document-term矩阵。
get_feature_names()特征整数索引特征名称的数组映射。
get_params([deep])获取TfidfVectorizer类的参数。
get_stop_words()建立或获取有效的停止词列表。
inverse_transform(X)返回X中所有idf不是0的值
set_params(**params)设置此估计器的参数。
transform(raw_documents)将 documents 转换为 document-term矩阵。

 

fit_transform与transform的区别:

fit_transform()的作用就是先拟合数据,然后转化它将其转化为标准形式

tranform()的作用是通过找中心和缩放等实现标准化

前者多了一个fit数据的步骤

训练集上调用fit_transform(),其实找到了均值和方差,即我们已经找到了转换规则,

把这个规则利用在训练集上,同样,可以直接将其运用到测试集上(甚至交叉验证集),所以在测试集上的处理,只需要标准化数据而不需要再次拟合数据。

from sklearn.feature_extraction.text import TfidfVectorizer
corpus=['This is the first document.',
'This document is the second document.',
'And this is the third one.',
'Is this the first document?',]


vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)

print(vectorizer.get_feature_names())
print(X.shape)


这篇关于TF-IDF(词频-逆文档频率)的sklearn实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程