Python实现小说词频统计

源码地址:

python实现小说词频统计资源-CSDN文库

这段代码实现了一个简单的文本分析工具,主要用于统计用户指定的词语在小说中的出现次数、位置和频次。以下是代码的详细解析和功能说明:

1. 功能概述

  • 选择文件:通过文件对话框选择一个小说文件。

  • 读取文件内容:将小说文件的内容读取到一个字符串中。

  • 去除标点符号:从文本中去除指定的标点符号。

  • 统计词频:统计用户指定的词语在小说中的出现次数、位置和频次。

  • 输出结果:打印小说的总字数(去除标点后)、每个词语的出现次数、位置和频次。

2. 代码详细解析

导入模块
import tkinter.filedialog
from tkinter import *
  • 使用tkinter模块来创建文件选择对话框。

选择文件
root = Tk()  # 创建根窗口
root.withdraw()  # 不显示窗口
filename = tkinter.filedialog.askopenfilename()  # 选择小说文件
  • 创建一个Tk窗口并隐藏,使用askopenfilename()方法打开文件选择对话框,让用户选择一个文件。

  • 将用户选择的文件路径存储在变量filename中。

读取文件内容
with open(filename, 'r') as file:  # 打开小说文件
    list = file.readlines()  # 读取全部文字到列表
word = '\n'.join(list)  # 将列表中的内容合并成一个字符串
print(word)
  • 使用with open()打开文件,并读取所有行到列表list中。

  • 使用join()方法将列表中的内容合并成一个字符串word

  • 打印小说的全部内容。

去除标点符号
new = word  # 创建统计字符串
punct = ', 。 ‘ ; : ( ) ’ “ ” \n'  # 要去除的标点符号,间隔为中文空格
list_punct = punct.split(' ')
for item in list_punct:
    new.replace(item, '')  # 删除小说中的标点符号
long = len(new)  # 获取纯文本的字数
  • 定义一个字符串punct,包含需要去除的标点符号。

  • 使用split(' ')将标点符号分割成一个列表list_punct

  • 遍历列表list_punct,使用replace()方法从new中删除每个标点符号。

  • 计算去除标点符号后的文本长度long

统计词频
user = input('输入统计词,如果多词用英文逗号间隔:\n').split(",")  # 用户输入要统计的词语
for item in user:  # 对每个词进行统计
    count = word.count(item)  # 统计出现次数
    order = ''  # 记录词出现位置
    size = 0  # 临时记录词的位置
    for i in range(count):  # 统计词出现的位置
        size = word.find(item, size + len(item))
        order += str(size) + "  "  # 累计出现的位置
    print("小说字数(去除标点):", len(new))
    print(item + "出现次数:", count)
    print(item + "出现位置:" + order)
    print(item + "出现频次:", format(count * len(item) / long, '.2f'))
  • 提示用户输入要统计的词语,多个词语用英文逗号分隔。

  • 将用户输入的词语分割成一个列表user

  • 遍历列表user,对每个词语进行统计:

    • 使用count()方法统计词语在小说中的出现次数。

    • 使用find()方法统计词语在小说中的出现位置。

    • 计算词语的出现频次(出现次数 × 词语长度 / 总字数)。

  • 打印每个词语的统计结果,包括小说的总字数(去除标点后)、词语的出现次数、位置和频次。

3. 运行效果

  • 程序启动时,用户通过文件选择对话框选择一个小说文件。

  • 程序读取文件内容并去除指定的标点符号。

  • 用户输入要统计的词语,程序统计每个词语的出现次数、位置和频次,并打印结果。

4. 注意点

  • 文件路径:确保选择的文件路径正确,且文件存在。

  • 文件编码:确保文件的编码正确,否则可能会导致读取文件时出现错误。可以使用open(file, encoding='utf-8')指定编码。

  • 标点符号:代码中去除标点符号的部分存在问题,replace()方法返回的是一个新的字符串,而不是直接修改原字符串。因此,需要将replace()的结果重新赋值给new

    for item in list_punct:
        new = new.replace(item, '')  # 删除小说中的标点符号
  • 性能问题:如果小说文件非常大,可能会导致内存占用较高。可以考虑逐行读取文件内容,而不是一次性读取整个文件。

你可能感兴趣的:(python,windows,开发语言)