当前位置:   article > 正文

Tf-Idf的python实现_python tf-idf

python tf-idf

现如今,深度学习的神经网络在处理文本方面也逐渐被人们挖掘出来,而神经网络只能接受数值类型的输入,所以在做文本情感分析的时候,就需要对文本进行处理,使之变成数值类型,因而向量化也就出现了。在向量化时我们也不必将分词结果中每个词都进行向量化,因为有些单词出现次数特别多,而且对情感分类是毫无意义的。比如之类的单词。这类词有个名字,叫“Stop_Word“(停用词)常用的停用词下载地址。这类词是可以完全忽略掉不做统计的。显然忽略掉这些词,词频记录的存储空间能够得到优化,而且构建速度也更快。那么如何来判断词语对文档的重要度呢,这里介绍一种方法:TF-IDF。TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上是:TF * IDF。

TF(词频)的计算很简单,就是针对一个文件t,某个单词Nt 出现在该文档中的频率。比如文档“I love this movie”,单词“love”的TF为1/4。如果去掉停用词“I"和”it“,则为1/2。

IDF(逆向文件频率)的意义是,对于某个单词t,凡是出现了该单词的文档数Dt,占了全部测试文档D的比例,再求自然对数。比如单词“movie“一共在5个文档中出现,而文档总数为12,因此IDF为ln(12/5)。


nlp_test0.txt文本内容如下:
沙瑞金赞叹易学习的胸怀,是金山的百姓有福,可是这件事对李达康的触动很大。易学习又回忆起他们三人分开的前一晚,大家一起喝酒话别,易学习被降职到道口县当县长,王大路下海经商,李达康连连赔礼道歉,觉得对不起大家,他最对不起的是王大路,就和易学习一起给王大路凑了5万块钱,王大路自己东挪西撮了5万块,开始下海经商。没想到后来王大路竟然做得风生水起。沙瑞金觉得他们三人,在困难时期还能以沫相助,很不容易。


nlp_test1.txt文本内容如下:
沙瑞金向毛娅打听他们家在京州的别墅,毛娅笑着说,王大路事业有成之后,要给欧阳菁和她公司的股权,她们没有要,王大路就在京州帝豪园买了三套别墅,可是李达康和易学习都不要,这些房子都在王大路的名下,欧阳菁好像去住过,毛娅不想去,她觉得房子太大很浪费,自己家住得就很踏实。

newDit.txt内容:自己新建一个txt文档,须注意每个词独占一行。
在这里插入图片描述

具体代码如下所示:

# encoding=utf-8
import jieba
jieba.load_userdict("newDict.txt")   # 加载用户自定义词典
from sklearn.feature_extraction.text import TfidfVectorizer
# print(dir(TfidfVectorizer))

def cut(txt_name1, txt_name2):
    with open(txt_name1, 'r') as f1:    # 以只读方式打开文件
        txt = f1.read()
        txt_encode = txt.encode('utf-8')
        txt_cut = jieba.cut(txt_encode)         # 切词
        result = ' '.join(txt_cut)
        # print(result)
    with open(txt_name2, 'w') as f2:    # 分词结果写入文件保存
        f2.write(result)
    f1.close()
    f2.close()

cut('nlp_test0.txt', 'nlp_test0_0.txt')     # 分别对文件调用cut方法分词
cut('nlp_test1.txt', 'nlp_test1_1.txt')

# 将停用词表从文件读出,并切分成一个数组备用
stopWords_dic = open('stop_words.txt', 'r')     # 从文件中读入停用词
stopWords_content = stopWords_dic.read()
stopWords_list = stopWords_content.splitlines()     # 转为list备用
stopWords_dic.close()

with open('nlp_test0_0.txt', 'r') as f3:
    res3 = f3.read()
with open('nlp_test1_1.txt', 'r') as f4:
    res4 = f4.read()

corpus = [res3, res4]
# print(corpus)
vector = TfidfVectorizer(stop_words=stopWords_list)
tf_idf = vector.fit_transform(corpus)
# print(tf_idf)

word_list = vector.get_feature_names()      # 获取词袋模型的所有词
weight_list = tf_idf.toarray()
# result1 = ''.join(word_list)
# result2 = ''.join(weight_list)
# print(result1, result2)
# with open('words_list.txt', 'w') as f3:
#     f3.write(result)


# 打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重
for i in range(len(weight_list)):
    print("-------第", i+1, "段文本的词语tf-idf权重------")
    for j in range(len(word_list)):
        print(word_list[j], weight_list[i][j])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

最后的运行结果如下图所示:
在这里插入图片描述
在这里插入图片描述
有了每段文本的TF-IDF的特征向量,就可以利用这些数据作为神经网络的输入建立分类模型了。

如有错误,欢迎指正。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/342910
推荐阅读
相关标签
  

闽ICP备14008679号