python学习笔记002
2017-06-11 12:48
471 查看
哈哈一晃就是一个学期。
开始使用python做一些小玩意,比如写了爬虫,写了文本处理的小脚本(文本预处理,词频统计,实体抽取,,tfidf的计算……),但还是有点疑惑,为什么我所应用到python文本处理的程序,都没有使用面向对象呢?这可能是我一个很简单的程序还得写个100多行的原因。不过写python用的比较多的是模块——各种模块,比如BeautifulSoup、requests等,可能是这些开源的模块封装的太好,剩下的就是写过程了?不过,能抓到耗子的就是好猫,能够把结果运行出来的程序就是我要的程序。
最近王老师给买了几本书,感觉只要掌握其中一本书,我就“发”了~……咳咳。
努力!
———附上我渣渣的tfidf计算程序———
开始使用python做一些小玩意,比如写了爬虫,写了文本处理的小脚本(文本预处理,词频统计,实体抽取,,tfidf的计算……),但还是有点疑惑,为什么我所应用到python文本处理的程序,都没有使用面向对象呢?这可能是我一个很简单的程序还得写个100多行的原因。不过写python用的比较多的是模块——各种模块,比如BeautifulSoup、requests等,可能是这些开源的模块封装的太好,剩下的就是写过程了?不过,能抓到耗子的就是好猫,能够把结果运行出来的程序就是我要的程序。
最近王老师给买了几本书,感觉只要掌握其中一本书,我就“发”了~……咳咳。
努力!
———附上我渣渣的tfidf计算程序———
# coding = utf-8 # author:zzh-748 """ 程序功能:遍历名为“赫”的文件夹中所有文件集 计算每一篇文档的tfidf值,输出屏幕,并写入文档中 """ import os import math def list_dir(filepath):# 获得当前文件夹下所有文件名 # dir_names=os.listdir(filepath) dir_names=os.walk(filepath) return dir_names def lines_spilt(lines): # 将一篇文献,按照'/'切分,并存入列表tf_list t_list=[] # 存储切分词列表 for line in lines: line=line.split('/') for i in range(len(line)): buf_line=line[i].replace('\n','').replace(' ','').replace('\u3000','') if(buf_line!=''): t_list.append(str(buf_line)) return t_list def Num_in_set(tf_dic): global wordNum_in_set # 准备将此篇文献中的词,导入到词出现总数文档中 for term in tf_dic: if term in wordNum_in_set: wordNum_in_set[term]+=1 else: wordNum_in_set[term]=1 def dic_fw(a_dic,file,dicname): a_dic=sorted(a_dic.items(),key=lambda item:item[1]) # print(a_dic) max_num=a_dic[-1][-1] # 取本文中的最大词频 fw_path=dicname+'-result\\'+file.split('\\')[-3]+'\\'+file.split('\\')[-2]+'\\' if os.path.exists(fw_path)==False: os.makedirs(fw_path) if dicname=='tf': fw_path=fw_path+file.split('\\')[-1].replace('.txt','-'+dicname+'.txt') # 写入文档位置 fw=open(fw_path,'w+',encoding='utf-8') for term in a_dic: fw.write(term[0]+'\t'+str(term[1]/max_num)+'\n') # print(term[0]+'\t'+str(term[1]/max_num)) #计算出tf值 if dicname=='tf_idf': fw_path=fw_path+file.split('\\')[-1].replace('-tf.txt','-'+dicname+'.txt') # 写入文档位置 fw=open(fw_path,'w+',encoding='utf-8') for term in a_dic: fw.write(term[0]+'\t'+str(term[1])+'\n') # print(term[0]+'\t'+str(term[1]/max_num)) #计算出tf值 fw.close() def tf(lines,file): # 统计一篇文献的词频。lines=[]。获取路径 global stopword_list # 引入停用词表 tf_dic={} # 记录tf的初始字典 t_list=lines_spilt(lines) # 切分后列表 for term in t_list: if term not in stopword_list: # 去掉停用词 if term in tf_dic: tf_dic[term]+=1 else: tf_dic[term]=1 Num_in_set(tf_dic) dic_fw(tf_dic,file,'tf')#写入文档 def idf_write(): global wordNum_in_set wordNum_in_set=sorted(wordNum_in_set.items(),key=lambda item:item[1]) with open('idf.txt','w+',encoding='utf-8') as idf: for term in wordNum_in_set: idf.write(term[0]+'\t'+str(term[1])+'\n') print('词出现次数写入完成---idf.txt') def get_Doc_path_lists(filepath): # 获取文献地址,返回列表 filelists=[] dir_names=list_dir(filepath) for root,dirs,files in dir_names: for file in files: if '.txt' in file: # print(root+'\\'+file) filelists.append(root+'\\'+file) # 加地址 return filelists def tfidf(Doc_Num): fw=open("关键词.txt",'a+',encoding='utf-8') global wordNum_in_set files=get_Doc_path_lists(tf_filepath)#获得tf结果 for file in files: tf_idf_dic={} # 记录结果数字 with open(file,'r',encoding='utf-8') as f: lines=f.readlines() try: for line in lines: word=line.split('\t')[0].replace(' ','').replace('\n','') tf=line.split('\t')[1].replace('\n','') # tf值 buf=float(Doc_Num/(wordNum_in_set[word]+1)) tf_idf=float(tf)*math.log(buf) # print(word) tf_idf_dic[word]=tf_idf # print(file.replace('.txt','idf.txt')+': tfidf计算完成') dic_fw(tf_idf_dic,file,'tf_idf') tf_idf_dic=sorted(tf_idf_dic.items(),key=lambda item:item[1]) fw.write(file.split('\\')[-1].replace('.txt','idf.txt')+' 关键词:'+'\t'+tf_idf_dic[-1][0]+'\t'+tf_idf_dic[-2][0]+'\t'+tf_idf_dic[-3][0]+'\t'+tf_idf_dic[-4][0]+'\t'+tf_idf_dic[-5][0]+'\n') print(file.replace('.txt','idf.txt')+' 关键词:'+'\t'+tf_idf_dic[-1][0]+'\t'+tf_idf_dic[-2][0]+'\t'+tf_idf_dic[-3][0]+'\t'+tf_idf_dic[-4][0]+'\t'+tf_idf_dic[-5][0]+'\n') except Exception as e: pass print('ok') fw.close() def main(): global stopword_list with open('stop.txt','r',encoding='utf-8') as stopf: stopword_list = stopf.readlines() for i in range(len(stopword_list)): stopword_list[i]=stopword_list[i].replace('\n','') files=get_Doc_path_lists(filepath) Doc_Num=len(files) #文献总数 for file in files: try: with open(file,'r',encoding='utf-8') as f: lines=f.readlines() tf(lines,file) print(file+': 写入完成') except Exception as e: print(file+"------------error") # idf_write() # 记录idf tfidf(Doc_Num) #计算tf-idf global filepath # 根地址,可改 filepath=r"D:\python\workspace\tfidf\赫" global stopword_list # 停用词表 stopword_list=[] global wordNum_in_set # 记录出现过某词的文档数 wordNum_in_set={} global tf_filepath tf_filepath=r"D:\python\workspace\tfidf\tf-result" if __name__=='__main__': main()
相关文章推荐
- python学习笔记 ——python写的猜数字游戏 002
- python学习笔记之002.py
- python3学习笔记--002--写一个类
- python的学习笔记/002-1(2018-5-18 )
- 小甲鱼:Python学习笔记002_数组_元组_字符串
- python的学习笔记/002-4(2018-5-20)
- 让你快速学习python基础笔记002(一起动手实践)
- [Python学习笔记-002] lambda, map, filter and reduce
- python的学习笔记/002-2(2018-5-19)
- python的学习笔记/002-2.1(2018-5-19)
- 【零基础入门学习Python笔记002】用Python设计第一个游戏:课后测试集答案
- Python学习笔记(基础篇)_002_类型转换
- python学习笔记(1)
- Python学习笔记(二)
- Python 学习笔记(1)
- python(异常处理机制,学习笔记摘要)
- 『框架设计(第2版)CLR Via C#』学习笔记(002)——将托管代码合并到程序集
- python基础学习笔记分享版(1)