Python实现对哈利波特小说单词统计


要求

对HarryPotter5.txt英文小说进行词频统计,统计出前二十个频率最高的单词,并打印输出或写入文件


一、打开文件

打开文件并将单词中非单词字符用空格代替
代码:

#读取小说内容
fp = open('HarryPotter5.txt')
content = fp.read()
#所有标点符号 用空格代替
#匹配非单词字符的字符
content = re.sub('\W',' ',content)
# Python split() 通过指定分隔符对字符串进行切片
words = content.split() # 以空格为分隔符,包含 \n

正则表达式

正则re

\W
__匹配非单词字符的字符。_这与 \w 正相反。如果使用了 ASCII 旗标,这就等价于 [^a-zA-Z0-9]。如果使用了 LOCALE 旗标,则会匹配当前区域中既非字母数字也非下划线的字符。

spilt()函数

Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
str.split(str="", num=string.count(str)).
   str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
   num – 分割次数。默认为 -1, 即分隔所有

实例

str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );       # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个

以上实例输出结果如下:

[‘Line1-abcdef’, ‘Line2-abc’, ‘Line4-abcd’]
[‘Line1-abcdef’, ‘\nLine2-abc \nLine4-abcd’]

以下实例以 # 号为分隔符,指定第二个参数为 1,返回两个参数列表。

txt = "Google#Runoob#Taobao#Facebook"
# 第二个参数为 1,返回两个参数列表
x = txt.split("#", 1)
print x

以上实例输出结果如下:

[‘Google’, ‘Runoob#Taobao#Facebook’]


二、词频统计

代码如下(示例):

#对所有的单词出现次数进行统计
#key-->count  数据结构:Dict字典
wordCounter = {
    
    }
for word in words:
    if word in wordCounter:
        wordCounter[word] += 1
    else:
        wordCounter[word] = 1
#print(wordCounter)

#这样打印输出是乱序 需要进行排序 sorted


三、单词排序

代码如下(示例):

#默认按照增序  使用reverse参数改变顺序
sortedWordCounter = sorted(wordCounter.items(),key=lambda item: item[1],reverse=True)
#print(sortedWordCounter) #这是打印排序完毕的词频

Dict字典底层是哈希结构 哈希结构不支持排序
wordCounter.items()装换成-----列表
这个列表中每一个元素是一个元组
元组里有两个元素 第一个元素是键 第二个元素是值

效果如下:
在这里插入图片描述

解释 lambda item: item[1]
相当于定义一个函数 lambda 相当于匿名函数
效果如下
lambda item: item[1] :前是参数 :后是返回值

def func(item):
    return item[1]

匿名函数和正常函数效果一样只不过是没有名字而已


四、输出或写入文件

代码如下(示例):

#方法一
print(sortedWordCounter[:20])
#方法二
for item in sortedWordCounter[:20]:
    print(item)
#也可以写入文件
fp = open('countwords_result.csv','w')
for (word,count) in sortedWordCounter:
    line = word+','+str(count)+'\n'
    fp.write(line)

在这里插入图片描述

运行后自己创建
在这里插入图片描述

python文件写入

写入已有文件
如需写入已有的文件,必须向 open() 函数添加参数:
   “a” - 追加 - 会追加到文件的末尾
   “w” - 写入 - 会覆盖任何已有的内容
注释:“w” 方法会覆盖全部内容。

#打开文件 "demofile2.txt" 并将内容追加到文件中:

f = open("demofile2.txt", "a")
f.write("Now the file has more content!")
f.close()

# 追加后,打开并读取该文件:
f = open("demofile2.txt", "r")
print(f.read())
#打开文件 "demofile3.txt" 并覆盖内容:

f = open("demofile3.txt", "w")
f.write("Woops! I have deleted the content!")
f.close()

# 写入后,打开并读取该文件:
f = open("demofile3.txt", "r")
print(f.read())

如需在 Python 中创建新文件,请使用 open() 方法,并使用以下参数之一:
   “x” - 创建 - 将创建一个文件,如果文件存在则返回错误
   “a” - 追加 - 如果指定的文件不存在,将创建一个文件
   “w” - 写入 - 如果指定的文件不存在,将创建一个文件

#创建名为 "myfile.txt" 的文件:
f = open("myfile.txt", "x")
#结果:已创建新的空文件!

#如果不存在,则创建新文件:
f = open("myfile.txt", "w")

猜你喜欢

转载自blog.csdn.net/HG0724/article/details/112298542
今日推荐