前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >词频统计与TF-IDF

词频统计与TF-IDF

作者头像
MinChess
发布2022-12-27 20:03:43
7170
发布2022-12-27 20:03:43
举报
文章被收录于专栏:九陌斋九陌斋

词频统计

TF-IDF和词频是脱不了关系的,所以在这里再记录一下关于词频的内容。 其实在词云图那块儿就已经完成了词频统计,这里记录另一种方法,即利用NLTK包实现统计与可视化。

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time : 2022/5/1 17:07
# @Author : MinChess
# @File : test5.py
# @Software: PyCharm 

from nltk import *
from StopWords import readFile,seg_doc #这里是基于jieba分词中的方法
import matplotlib
# 设置使用字体
matplotlib.rcParams['font.sans-serif'] = 'SimHei'

# 利用nltk进行词频特征统计
def nltk_wf_feature(word_list=None):
    fdist=FreqDist(word_list)
    print(fdist.keys(),fdist.values())

    print('='*3,'指定词语词频统计','='*3)
    w='关键词'
    print(w,'出现频率:',fdist.freq(w)) # 给定样本的频率
    print(w,'出现次数:',fdist[w]) # 出现次数

    print('='*3,'频率分布表','='*3)
    fdist.tabulate(10) # 频率分布表(前n个词)

    # 可视化
    fdist.plot(30) # 频率分布图
    fdist.plot(30,cumulative=True) # 频率累计图

    print('='*3,'根据词语长度查找词语','='*3)
    wlist =[w for w in fdist if len(w)>2]
    print(wlist)

    return fdist

if __name__=='__main__':
    path= r'xxxx.txt'
    str_doc = readFile(path)
    # print(str_doc)

    # 2 词频特征统计
    word_list =seg_doc(str_doc)
    fdist = nltk_wf_feature(word_list)
  • 输出结果,分别对应频率分布图与频率累计图
image-20220501171217754
image-20220501171217754
image-20220501171245119
image-20220501171245119

TF-IDF计算

TF-IDF (Term Frequency-nversDocument Frequency)是一种常用于信息处理和数据挖掘的加权技术。该技术采用一种统计方法,根据字词的在文本中出现的次数和在整个语料中出现的文档频率来计算一个字词在整个语料中的重要程度。它的优点是能过滤掉一些常见的却无关紧要本的词语,同时保留影响整个文本的重要字词。计算方法如下面公式所示:

TF−IDF=TF∗IDFTF- IDF= TF* IDF TF−IDF=TF∗IDF

TF (Term Frequency)为某个关键词在整篇文章中出现的频率。IDF (InversDocument Frequency)计算倒文本率。文本频率是指某个关键词在整个语料所有文章中出现的次数。倒文档频率又称为逆文档频率,它是文档频率的倒数,主要用于降低所有文档中一些常见却对文档影响不大的词语的作用。

TF-IDF统计可视化的完整代码

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time : 2022/5/1 16:55
# @Author : MinChess
# @File : tfidf.py
# @Software: PyCharm 
import os
import time
import pandas as pd
import numpy as np
import jieba
import jieba.analyse
import matplotlib.pyplot as plt
from PIL import Image
from datetime import datetime
from matplotlib.font_manager import FontProperties


cut_words = ""
for line in open('待处理.txt', encoding='utf-8'):
    line.strip('\n')
    seg_list = jieba.cut(line,cut_all=False)
    cut_words += (" ".join(seg_list))

# jieba.load_userdict("userdict.txt")
# jieba.analyse.set_stop_words('stop_words.txt')

# 提取主题词 返回的词频其实就是TF-IDF
keywords = jieba.analyse.extract_tags(cut_words,
                                      topK=50,
                                      withWeight=True,
                                      allowPOS=('a','e','n','nr','ns', 'v'))

# 以列表形式返回
print(keywords)

# 数据存储
pd.DataFrame(keywords, columns=['词语','重要性']).to_excel('关键词前50.xlsx')

# keyword本身包含两列数据
ss = pd.DataFrame(keywords,columns = ['词语','重要性'])     
# print(ss)

# 可视化
plt.figure(figsize=(10,6))
plt.title('TF-IDF Ranking')
fig = plt.axes()
plt.barh(range(len(ss.重要性[:25][::-1])),ss.重要性[:25][::-1])
fig.set_yticks(np.arange(len(ss.重要性[:25][::-1])))
font = FontProperties(fname=r'simsun.ttc')
fig.set_yticklabels(ss.词语[:25][::-1],fontproperties=font)
fig.set_xlabel('Importance')
plt.show()

TF-IDF还有很对方面值得探索,绝不仅上述的内容而已。后续还会不断完善

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 词频统计
  • TF-IDF计算
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档