python学习笔记002

来源:互联网 发布:cocos2dx棋牌游戏源码 编辑:程序博客网 时间:2024/05/14 10:11

哈哈一晃就是一个学期

开始使用python做一些小玩意,比如写了爬虫,写了文本处理的小脚本(文本预处理,词频统计,实体抽取,,tfidf的计算……),但还是有点疑惑,为什么我所应用到python文本处理的程序,都没有使用面向对象呢?这可能是我一个很简单的程序还得写个100多行的原因。不过写python用的比较多的是模块——各种模块,比如BeautifulSoup、requests等,可能是这些开源的模块封装的太好,剩下的就是写过程了?不过,能抓到耗子的就是好猫,能够把结果运行出来的程序就是我要的程序。

最近王老师给买了几本书,感觉只要掌握其中一本书,我就“发”了~……咳咳。


努力!


———附上我渣渣的tfidf计算程序———

# coding = utf-8# author:zzh-748""" 程序功能:遍历名为“赫”的文件夹中所有文件集 计算每一篇文档的tfidf值,输出屏幕,并写入文档中"""import osimport mathdef list_dir(filepath):# 获得当前文件夹下所有文件名# dir_names=os.listdir(filepath)dir_names=os.walk(filepath)return dir_namesdef lines_spilt(lines): # 将一篇文献,按照'/'切分,并存入列表tf_listt_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_listdef Num_in_set(tf_dic):global wordNum_in_set # 准备将此篇文献中的词,导入到词出现总数文档中for term in tf_dic:if term in wordNum_in_set:wordNum_in_set[term]+=1else:wordNum_in_set[term]=1def 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]+=1else:tf_dic[term]=1Num_in_set(tf_dic)dic_fw(tf_dic,file,'tf')#写入文档def idf_write():global wordNum_in_setwordNum_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 filelistsdef tfidf(Doc_Num):fw=open("关键词.txt",'a+',encoding='utf-8')global wordNum_in_setfiles=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:passprint('ok')fw.close()def main():global stopword_listwith 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-idfglobal filepath # 根地址,可改filepath=r"D:\python\workspace\tfidf\赫"global stopword_list # 停用词表stopword_list=[] global wordNum_in_set # 记录出现过某词的文档数wordNum_in_set={}global tf_filepathtf_filepath=r"D:\python\workspace\tfidf\tf-result"if __name__=='__main__':main()