python(6)文本词频统计

#CalHamletV1.py
英文文本除了有空格,还有冒号、感叹号等,首先要将文本噪音处理、归一化
提取每一个单词为第一步骤
之后进一步统计词频数量
代码与文本要在同一目录下

def getText():
    txt=open("hamlet.txt", "r").read()   #打开文件
    txt=txt.lower()  #避免大小写影响,将所有字母变为小写
    #利用空格替换文本中的特殊符号
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^‘’_{|}·~':
        txt=txt.replace(ch, " ")
    return txt

hamletTxt=getText()
words=hamletTxt.split()  #**以空格分隔并形成列表**

记住split()函数,例如英文文本以空格作为每个单词的分隔符,使用这个函数就可以利用空格进行分词
#定义字典类型来表示单词与出现频率之间的映射关系

counts={}
for word in words:
    counts[word]=counts.get(word,0)+1

#将字典类型变为列表类型,便于操作
dict.items()函数返回可遍历的键值元组数据
list(dict.items())以列表形式返回可遍历的(键值)元组数据

items=list(counts.items())  

#列表排序
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。

list.sort(cmp=None, key=None, reverse=False)
cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。

对一个列表按照键值对的两个元素的第二个元素进行排序,由大到小排序

items.sort(key=lambda x:x[1],reverse=True)   

#将出现次数最多的前十个次以及对应词频打印出来

for i in range(10):    
    word,count=items[i]
    print("{0:<10}{1:>5}".format(word,count))

CalThreeKingdomsV1.py
#《三国演义》为中文词频,可以使用jieba进行分词
中文不存在大小写问题
利用jieba库不存在标点符号问题

import jieba
txt=open("three kingdoms.txt","r",encoding="utf-8").read()
words=jieba.lcut(txt)  #分词处理,形成带有所有单词的列表words
counts={}   #构建字典
for word in words:    #逐一遍历所有单词
     if len(word)==1:
         continue
     else:
         counts[word]=counts.get(word,0)+1    #通过字典计数
#将带有计数的字典转换为列表类型,进一步排序
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)

#打印输出前十五位

for i in range(15):
     word,count=items[i]
     print("{0:<10}{1:>5}".format(word,count))

将词频与人物相关联,面向问题改造程序
CalThreeKingdomsV2.py

你可能感兴趣的:(python(6)文本词频统计)