Python大作业——文件夹中多文章字频统计

在提供的doc文件夹中,有一组txt文件——安徒生童话集。我们期望编写一个程序对安徒生的童话进行一 些简单的数据分析,比如:

1.查询某个单词在全部文档中出现的次数,即类似于children出现在以下文件中: moon. saw.txt(11次) (此处需要输出所有出现的文档,下面只罗列了一篇):

2.罗列在全部文档中出现次数最少的5个词

3.根据自己的想法,添加任意1-2个功能

这些文档中包含了很多单词。请编写一个Python程序,当户输入一个单词,例如:children时, 打印出该单词在程序被运行期间,在每个文件中出现的次数,以及包含这个单词的所有文件名称(按包含数量从多到少的顺序)
Tips:你可能需要使用到的知识点:

●字典
●函数
●文件的打开和读取
●文件夹中文件列表

答案:除基本要求,添加了词云图制作功能
注意:需要自己安装第三方 wordcloud库与matplotlib库
测试文章doc压缩包

import os
from wordcloud import WordCloud
import matplotlib.pyplot as plt


def getText(info):  # 排除文章字符干扰
    with open(info, 'r') as txt:
        txt = txt.read()
        txt = txt.lower()  # 排除大小写干扰
        for k in '!"#$%&@()+,-.\/:;<=>?[\\]^_`{|}~':  # 排除特殊字符干扰
            txt = txt.replace(k, " ")  # 将所有字符替换成单个空格
        for j in "'":
            txt = txt.replace(j, " ")
    return txt


file_name = os.listdir('C:\Python Code\程序练习题\组合数据类型及文件\doc')  # 获取目标目录中的文件列表
file_dir = 'C:\Python Code\程序练习题\组合数据类型及文件\doc'
counts1 = {}
for file in file_name:  # 读取每一个文件
    info = os.path.join(file_dir, file)  # 路径与文件名结合,得到每个文件的完整路径
    fo = getText(info)
    words = fo.split()  # 将所有单词提取成列表
    for i in words:
        counts1[i] = counts1.get(i, 0) + 1

items = list(counts1.items())
items.sort(key=lambda x: x[1], reverse=False)
print('文章中出现最少的五个词是:', end='')
for i in range(5):
    word, count = items[i]
    print(word, end=' ')

word = input('\n\n请输入您想查询的单词:')  # 获取查询的单词
name = input('输入你想构建词云的文件名称(全称包含.txt):')
all_result = []  # 包含(文件名,含单词数)元组的列表
for file in file_name:  # 读取每一个文件
    info = os.path.join(file_dir, file)  # 路径与文件名结合,得到每个文件的完整路径
    fo = getText(info)
    words = fo.split()
    counts2 = {}
    for j in words:
        if j == word:
            counts2[word] = counts2.get(word, 0) + 1
    if counts2.get(word, 0) != 0:
        result = (file, counts2[word])
        all_result.append(result)
if not all_result:  # 如果结果列表为None,即所找单词文件里均没有
    print('全部文章中查无此单词')
elif all_result:
    print('{}出现在以下文件中:'.format(word))
    all_result.sort(key=lambda x: x[1], reverse=True)
    for i in all_result:
        print('{}({}次)。'.format(i[0], i[1]))


way = os.path.join(file_dir, name)
f = open(way, 'r', encoding='utf-8').read()
word_cloud = WordCloud(
        background_color="white",  # 设置背景为白色,默认为黑色
        width=1500,                # 设置图片的宽度
        height=960,                # 设置图片的高度
        margin=10                 # 设置图片的边缘
        ).generate(f)
plt.imshow(word_cloud)  # 绘制图片
plt.axis("off")  # 消除坐标轴
plt.show()  # 展示图片
word_cloud.to_file('English-词云.png')  # 保存词云图片
f.close()


你可能感兴趣的:(Python,练习,python,小程序)