在获取单词的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)