一、文本特征抽取之TF-IDF
上一篇博文中介绍了计数文本特征的处理。由于一个词出现的数量往往并不能很好地反映这个文章的类型,对于文章的文分类误差较大,故计数往往在现实生活中并不常用。这篇文章主要是我们在机器学习中常用的一种方法,TF和IDF
(一)、TF
TF(term frequency):检索词语或单词在文章中出现的频率,也是统计词语出现的数量。
(二)、IDF
IDF(inverse document frequency):逆文档频率。公式如下: log(文章中词语的总数量/每一个词语在该文章中出现的次数。
(三)、 TF*IDF
TF*IDF这一公式反映的是某一个词语在该篇文章中的重要性。在sklearn中对应的API为TfidfVectorizer
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
def Chinese():
"""
中文文本的特征提取
:return:
"""
# 将中文文本通过空格的形式分成词语
T1 = jieba.cut("一叶知秋,是一个孤单的词。")
T2 = jieba.cut("铅灰的天空,覆雪的原野,冰封的河面,构成了冷色。")
# 将词语拼接成列表的形式
word_list1 = list(T1)
word_list2 = list(T2)
# 将列表转换成字符串的形式
string1 = " ".join(word_list1)
string2 = " ".join(word_list2)
# 实例化
TI = TfidfVectorizer()
# 将中文文本进行特征提取
data = TI.fit_transform([string1, string2])
print(TI.get_feature_names())
# 将sparce矩阵转化成数字矩阵并且打印
print(data.toarray())
输出结果如下:
['一个', '一叶知秋', '冰封', '冷色', '原野', '天空', '孤单', '构成', '河面', '覆雪']
[[0.57735027 0.57735027 0. 0. 0. 0.
0.57735027 0. 0. 0. ]
[0. 0. 0.37796447 0.37796447 0.37796447 0.37796447
0. 0.37796447 0.37796447 0.37796447]]
从上述结果我们可以看出,数值越大的词语在文章中越为重要,数值越小的在文章种越为次要(由于文本数据太小,仅仅举例)。这样就能更好的判别文章的类别了。相较于之前的计数方法要好得多。
|