1.采用Scikit-learn工具包实现TF-IDF模型
1)TfidfVectorizer类
采用sklearn.feature_extraction.text.TfidfVectorizer类实现TF-IDF模型,其描述如下:
(1)参数:
input:字符串类型,有三个值可选:“filename”“file”“content”。如果是“filename”,作为参数传递的序列是一个文件名列表,需要读取这些原始内容进行分析。如果是“file”,序列项必须有一个“read”方法(类似文件的对象),该方法被调用来获取内存中的字节。如果是“content”,则输入将是一组string或byte类型的序列项。
encoding:字符串编码类型,默认编码值为“utf-8”。如果要分析字节或文件,则使用此编码进行解码。
ngram_range:元组类型,表示为tuple(min_n,max_n),默认值为(1,1),要提取不同n-grams的n-values的上限和下限范围,在min_n<=n<=max_n区间中n的所有值都会涉及。
max_df:其可为float和int类型。如果是float类型,其范围为[0.0,1.0],默认值为1.0。建立词汇表时严格忽略那些高于指定阈值的词,如果是float类型,该参数代表文档的比例。
min_df:其可为float和int类型。如果是float类型,其范围为[0.0,1.0],默认值为1.0。建立词汇表时严格忽略那些低于指定阈值的词,如果是float类型,该参数代表文档的比例。
(2)常用属性:
vocabulary_:功能字典类型,特征到特征索引的映射。
fixed_vocabulary_:bool类型,如果用户提供了从词汇表到索引的固定映射,则为真。
(3)常用方法:
①fit_transform(self,raw_documents[,y])。
功能:学习词汇和idf,返回词-文档矩阵。
②get_feature_names(self)。
功能:从特征索引到特征名的数组映射。
2)基于TF-IDF模型的文本特征选择和表示
采用Scikit-learn工具包实现TF-IDF模型并进行文本特征选择与表示的代码如下:
运行结果如下:
(1)词典。
(2)词列表。
(3)文档-词频矩阵稀疏表示见表5-2所示。
表5-2 文档-词频矩阵
(4)文档0和文档1中的各个词对应的TF-IDF值。
文档0:
文档1:
上述过程是采用TF-IDF计算方法获取每个特征词的值,并可根据文本集的词典将文本表示成统一的11维向量。从上述文本文档表示可以看出,文本集词典的大小直接决定文本向量的维度。
2.基于TF-IDF模型的文本特征选择
我们可以根据文本文档中特征的TF-IDF值排序,选择较大的n个特征作为文本的关键特征,这样可重新构建文本词典。
1)文本特征选择函数
基于TF-IDF的特征选择比较适合文档级的特征选择,获取按照TF-IDF值降序排列的特征选择函数定义如下:
(www.xing528.com)
参数:
terms:特征词。
tfidf_score:TF-IDF值。
返回值:
doc_words:返回包含按照TF-IDF值降序排列的特征集。
实现方案一:
实现方案二:
我们仍然采用上例中的语料进行分析。
则其排名前5的特征词及其TF-IDF值为:
这样,在原始文本中的词典(11个词)中选择5个词作为文本集的特征词,可将文本表示成基于这5个特征词的文本向量。
2)案例分析
我们采用清华大学自然语言处理与社会人文计算实验室提供的新闻语料库中的文本数据,采用原来我们已经处理好的数据集格式,并选择5个类别,每个类别包含4条数据,总共20条数据进行分析。
数据类别分别是:0家居、1房产、2教育、3股票、4财经。
(1)需要采用数据获取函数实现数据读取,获得文本集文本记录和文本对应的类别标签,数据获取函数的描述如下:
参数:
trainsetpath:数据集所在路径。
返回值:
corpus:语料集。
class_labels:文本类别标签。
class_names:类别名称集。
(2)定义feature_selection_tfidf()函数,调用get_sort_term()函数,获取按照tfidf值的大小进行降序排列的特征集。
feature_selection_tfidf(doc_term_li)函数描述如下:
参数:
doc_term_li:经过分词的文本数据集。
返回值:
term_set:按照tfidf降序排列的特征集。
可根据自己的需要选择最终特征词的个数,在这里我们选择10个特征作为最终的文本分类特征。通过以下语句就可以获取特征值的选择:
获得tfidf值排名前10的特征如下:
原始20篇文档包含的词典大小为3299,通过特征选择,可将原始文本表示成维度为10的特征向量。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。