结束了一整天的工作,来写一点东西记录一下吧。今天主要就是实现一下TF-IDF算法,这个相信接触过文本数据处理的人来说简直就是小儿科,所以原理什么的我就不多累赘了,这里直接看代码:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division'''
__Author__:沂水寒城
功能:  TF-IDF算法TF-IDF实际上是:TF * IDFTF:词频(Term Frequency)IDF:逆文档频率(Inverse Document Frequency)
'''import os
import re
import sys
import xlrd
import math
import json
import jieba
import sklearn
import numpy as np
import jieba.analyseif sys.version_info==2:reload(sys)sys.setdefaultencoding( "utf-8" )def dataPrepossing(one_line):'''数据内容去除无效字符,预处理'''sigmod_list=[',','。','(',')','-','——','\n','“','”','*','#','《','》','、','[',']','(',')','-','.','/','】','【']for one_sigmod in sigmod_list:one_line=one_line.replace(one_sigmod,'')return one_linedef seg(one_content, stopwords=[]):  ''' 分词并去除停用词 '''  segs=jieba.cut(one_content, cut_all=False)  # segs=[w.encode('utf8') for w in list(segs)]  segs=[unicode(w) for w in list(segs)]  seg_set=set(set(segs)-set(stopwords))  return list(seg_set) def cutData2Words(dataDir='data/',save_path='cut_words.json'):'''将原始的文本数据切分为词数据'''result={}txt_list=os.listdir(dataDir)for one_txt in txt_list:one_name=one_txt.split('.')[0].strip()one_txt_path=dataDir+one_txt with open(one_txt_path) as f:one_data=f.read()one_words_list=seg(one_data)result[one_name]=one_words_listwith open(save_path,'w') as f:f.write(json.dumps(result))def calWordsIdf(data='cut_words.json',save_path='word_idf.json'):'''将整个语料库读入矩阵,并计算每个词的idf值,写入文件'''with open(data) as f:data_dict=json.load(f)word_doc_list=[]for one_key in data_dict:word_doc_list.append(data_dict[one_key])word_dict={}for one_list in word_doc_list:for one in one_list:if one in word_dict:word_dict[one]+=1else:word_dict[one]=1print('='*60)idf_dict={}n=len(word_doc_list)for one_word in word_dict:idf_dict[one_word]=math.log(n*1.0/word_dict[one_word])with open(save_path,'w') as f:f.write(json.dumps(idf_dict))def calTxtKeyWords(data='data/1.txt',topK=30):'''计算单个文件数据的关键词[基于TF-IDF值降序筛选]'''with open('word_idf.json') as f:idf_dict=json.load(f)with open(data) as f:content=f.read()words_list=seg(content)tf_dict={}for one_word in words_list:if one_word in tf_dict:tf_dict[one_word]+=1else:tf_dict[one_word]=1tfidf_dict={}for oneW in tf_dict:try:tf=tf_dict[oneW]idf=idf_dict[oneW]tfidf_dict[oneW]=tf*idfexcept Exception,e:pass#print 'Exception: ',e sorted_list=sorted(tfidf_dict.items(),key=lambda e:e[1], reverse=True)for one in sorted_list[:5]:print(one)return sorted_list[:topK]if __name__ == '__main__':print('Loading.............................................')#数据集分词cutData2Words(dataDir='data/',save_path='cut_words.json')#计算词的逆文档频率calWordsIdf(data='cut_words.json',save_path='word_idf.json')#计算文档 1.txt 对的关键词calTxtKeyWords(data='data/01.txt',topK=30)

测试所用的数据内容如下所示:

由于限制原因未能上传

分词结果如下所示:

由于限制原因未能上传

IDF值计算如下所示:

由于限制原因未能上传

由于限制原因未能上传自己使用的语料数据,感兴趣的话可以自己找一篇文章试试,语料集我用的很小,这里最好用一个比较大的语料数据集来计算IDF值,这样最终计算得到的TF-IDF值可靠性较高。

Python实现基于TF-IDF抽取文本数据关键词相关推荐

  1. python库Camelot从pdf抽取表格数据以及python库camelot安装及使用中的一些注意事项

    一.python库camelot安装及使用中的一些注意事项 1)camelot方法有两种解析模式:流解析(stream).格子解析(lattice),其中格子解析能够保留表格完整的样式,对于复杂表格来 ...

  2. 基于深度学习的文本数据特征提取方法之Word2Vec

    点击上方"AI公园",关注公众号,选择加"星标"或"置顶" 作者:Dipanjan (DJ) Sarkar 编译:ronghuaiyang ...

  3. 基于深度学习的文本数据特征提取方法之Glove和FastText

    2019-12-03 20:49:51 作者:Dipanjan (DJ) Sarkar 编译:ronghuaiyang 导读 今天接着昨天的内容,给大家介绍Glove模型和FastText模型,以及得 ...

  4. 深度特征提取方法_基于深度学习的文本数据特征提取方法之Glove和FastText

    作者:Dipanjan (DJ) Sarkar 编译:ronghuaiyang 导读 今天接着昨天的内容,给大家介绍Glove模型和FastText模型,以及得到的词向量如何应用在机器学习任务里. ( ...

  5. python文本结构化处理_在Python中标记非结构化文本数据

    python文本结构化处理 Labelled data has been a crucial demand for supervised machine learning leading to a n ...

  6. 抽取文本数据(TSV文件的抽取)

    将一个TSV文件运用Kettle工具进行抽取并保存至数据库中的数据表TSV中.实现将一个保存在本地的TSV文件进行抽取 1.数据准备与查看数据 2.在Kettle新建转换,添加"文本输入&q ...

  7. [647]python库Camelot从pdf抽取表格数据

    Camelot: 一个友好的PDF表格数据抽取工具 一个python命令行工具,使任何人都能很轻松的从PDF文件中抽取表格数据. 安装 Camelot 安装非常简单! 在安装相关的依赖后,可以直接使用 ...

  8. 文本数据“关键词渲染”的高频词可视化——词云图。

    目录 前言: 官方示例: 实践示例: 背景说明:基于电影用户评论的数据,通过其中关键词出现的频率做出词云图,从而让阅览者一目了然的看出该电影的正反面评价,甚至电影的分类标签. 数据预处理 1.首先将我 ...

  9. 基于shell 脚本处理文本数据流程

    本次数据清洗场景: 根据数据库表imgs[记录有图片基本信息,和相应图片路径]记录清洗出对应图片信息(包括:briefImg[简图]/fullImg[全图])以及每天的csv文件. 目标目录存在较多各 ...

  10. 文本特征抽取的向量空间模型(VSM)和TF/IDF方法

    文本特征抽取 两组小说,一组是爱情的,另一组是科幻的.我们能否用支持向量机训练一个模型,用来识别小说类型呢? 这个并不容易.因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入.如果用它来做文 ...

最新文章

  1. 剑指offer:面试题16. 数值的整数次方
  2. 面试官:一个线程OOM,进程里其他线程还能运行么?
  3. Linux静态/动态链接库的创建和使用
  4. CoTNet 修改笔记
  5. windows下编译openssl
  6. Oracle 数据库-服务器端字符集查看方法
  7. SpringBoot应用日志通过logstash远程上传到ES
  8. python基础 协程
  9. 代理类 invoke方法没有返回值怎么办_何为动态代理?
  10. 性能测试(一)性能测试是什么?有哪些分类?
  11. 欢迎界面java_Linux命令行欢迎界面美化
  12. 学会使用box-sizing布局
  13. Python 多重共线性检验
  14. WordPress使用domain/wp-json/api/v1/test 无法到接口可能的原因
  15. Visual Paradigm创建UML的流程和一点实用技巧
  16. 什么是数据模型?常用的数据模型有哪些?
  17. 【游戏逆向】CS1.6无后坐力基址寻找
  18. Python中有关文件的操作
  19. 自我认知测试软件,自我认知-MBTI测试
  20. 岚图汽车中大型智能电动SUV完成高温高原严苛测试

热门文章

  1. matplotlib创建图的基本方法
  2. cesium之地图显示坐标、比例尺、海拔高度效果篇
  3. 大K提醒各位常备DOS杀毒盘
  4. mavean的依赖传递和排除依赖
  5. Android入门学习3
  6. 人和人之间不要靠的太近
  7. DPM 2007 BUG
  8. Timus 1318. Logarithm
  9. 一路去**ddss第4天
  10. ABP 集成 nswag 根据 Swagger API 自动生成操作类代码