Python词频分析
来源:互联网 发布:amd处理器优化 编辑:程序博客网 时间:2024/05/17 03:28
我想写一个程序分析一本书各个单词出现的频率。在阅读之前,先找出其中单词出现频率高我还不认识的单词,事先背上,然后再阅读。
思路:
把TXT文件里面所有的英文单词储存在一个list里面(注意,里面的元素有重复的。)用for循坏分析list里的每一个元素,建立一个单词为key,出现次数为value的dictionary。然后进行排序。
# -*- coding: utf-8 -*- import re f = open("file to analyse.txt","r") wordlist = [] freqdic = {} ''' 将list中各个元素出现的数目进行统计,放入freqdic中。 ''' def countfreq(list): for i in list: if i in freqdic: freqdic[i] += 1 else: freqdic[i] = 1 for line in f.readlines(): str = line.lower() singlelinelist = re.split("\W+",str)#re.split没有去除文本中的数字,数字会在后面的程序中进行处理。 countfreq(singlelinelist) t = [] ''' 因为dictionary对value大小进行排序并不方便,所以将dictionary转变为list,从而进行排序。 ''' for key,value in freqdic.items(): if key.isalpha():#只保留key是英文单词的元素 t.append((value,key)) t.sort(reverse=True) print t f.close()
结果一览:
looks great,right?
我的目标是找出出现频率高并且自己不认识的词,可是上面的结果把TXT文件中出现的所有单词都找出来了——几千个,而我想要的只有那么几十几百个。显然,程序需要进一步改进。
于是下一个目标:建立一个过滤列表,词频分析的结果里不应该出现该列表里的单词。
我的英语不算差,四级的单词,基本是没问题的。于是我的目标变成了:寻找四级单词与词频分析结果里的都有的单词,并剔除这些重复的单词。
我加了如下代码:
four = open("Desktop/final.txt","r+")oklist = []#return a set contains all the words i already know.for i in four.readlines(): oklist.append(i.strip('\n'))okset = set(oklist)bookset = set(freqdic)t = []common = bookset & oksetknown = list(common)for i in known: del freqdic[i]
结果一览:
Great! 里面大部分是不认识的单词,现在挑选可就轻松多了!
四级单词表示我从网上下载的。我在网上找到的四级词汇里只有原型,而没有它们的复数,副词过去分词等等,我自己写了一个程序,为每一个动词加上了ing,ed,s.每一个形容词加上了ly,每一个名词加上了s.并把这些单词加入过滤列表里。
随着词汇量的增多,过滤列表也可以随时更新。
全部的代码如下:
# -*- coding: utf-8 -*-import reimport sysfilename = sys.argv[1]four = open("Desktop/final.txt","r+")last = open("Desktop/%s.txt" % (filename + "word") ,"w+")oklist = []#return a set contains all the words i already know.for i in four.readlines(): oklist.append(i.strip('\n'))okset = set(oklist)f = open("Desktop/%s.txt" % filename,"r")freqdic = {}#provided a word list,return a dic which contains the freq.def countfreq(list): for i in list: if i in freqdic: freqdic[i] += 1 else: freqdic[i] = 1#count the freq of the file provided.for line in f.readlines(): st = line.lower() singlelinelist = re.split("\W+",st) b = [] for i in singlelinelist: b.append(i.strip("_")) countfreq(b)'''这里我加了一个功能,把如果一个单词比如说love,如果这个单词末尾加了一个s也在这个书籍的单词列表里,在这里是loves,那么就删除loves,并把loves出现的次数加入到love下。因为这实在太常见了。'''dellist = []for i in freqdic: if len(i) > 1 and i[-1] == "s": if i[:-1] in freqdic: freqdic[i[:-1]] += freqdic[i] dellist.append(i)for i in dellist: del freqdic[i]bookset = set(freqdic)t = []common = bookset & oksetknown = list(common)for i in known: del freqdic[i]#return a freq turple.for key,value in freqdic.items(): if key.isalpha(): t.append((value,key))#write turple into a txt file.#这里我把得到的结果放到了TXT文件里,因为在shell里查看实在太麻烦了。for i in t: last.write(i[1] + "\n")print tf.close() last.close()
1 0
- Python词频分析
- 基于python的中文词频分析
- 词频分析
- 词频统计---python与C++的执行效率分析
- python小练习--个人谷歌输入法词频分析
- [生而为人-思考] 《自在力》读书笔记 + Python词频分析
- 词频分析(C#版)
- python 统计词频
- python统计汉字词频
- python计算词频
- python 统计词频
- python统计文档词频
- Python新闻联播词频统计
- python 中文词频提取
- python词频统计
- Python 中的词频统计
- 【python技能】词频统计
- 词频统计python
- 暑期工作日志-Day13
- 机器学习算法疗程(CRF)
- 数据结构——单链表
- 树的子结构
- curl_multi实现准多线程采集
- Python词频分析
- Java多线程 -- JUC包源码分析3-- volatile/final语义
- CCF认证——I’m stuck!
- 机房收费系统之模块代码理解
- 算法复杂度分析一般过程
- 【Linux多进程通信】信号
- LeetCode9----------Palindrome Number
- NOIP提高组 看电影
- 二叉树的镜像