You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建类批量分析stories文件夹中10个TXT文件的文本指标

批量处理文本分析的问题解决

错误根源

你碰到的「invalid literal for int() with base 10」错误,是因为get_story函数试图把story1这种带字母的字符串转成整数,必然失败。另外现有分析代码写在循环外部,只能处理最后一个读取的文本,完全没利用批量逻辑,TextAnalysis类也没真正用来存储每个文件的分析结果。

修复后的完整代码

from os.path import splitext, basename
from glob import glob
from nltk.tokenize import sent_tokenize
import nltk
import zipfile

# 下载nltk所需分词资源
nltk.download('punkt')

# 解压故事文件包(如果尚未解压)
file_name = "stories_n10.zip.2"
with zipfile.ZipFile(file_name, 'r') as zip_ref:
    zip_ref.extractall()

def read_file(filename):
    with open(filename, encoding='utf8') as infile:
        return infile.read()

def get_story_number(filepath):
    # 从文件名提取数字部分(比如story1.txt -> 1)
    base = basename(filepath)
    name_without_ext = splitext(base)[0]
    # 过滤出字符串中的数字字符并转为整数
    return int(''.join(filter(str.isdigit, name_without_ext)))

class TextAnalysis:
    def __init__(self, filename, average_word_length, average_sentence_length):
        self.filename = filename
        self.average_word_length = average_word_length
        self.average_sentence_length = average_sentence_length
    
    def __repr__(self):
        return f"文件: {self.filename} | 平均词长: {self.average_word_length:.2f} | 平均句长: {self.average_sentence_length:.2f}"

def analyze_text(text):
    # 计算单词总数
    words = text.split()
    number_of_words = len(words)
    if number_of_words == 0:
        return 0, 0
    
    # 计算总字符数(不含空格)
    total_letters = sum(len(word) for word in words)
    
    # 计算句子总数,处理无句子的边界情况
    sentences = sent_tokenize(text)
    number_of_sentences = len(sentences) if len(sentences) > 0 else 1
    
    # 计算平均值
    avg_word_length = total_letters / number_of_words
    avg_sentence_length = number_of_words / number_of_sentences
    
    return avg_word_length, avg_sentence_length

# 批量处理所有故事文件
def batch_analyze_stories():
    # 匹配stories文件夹下的所有txt文件,若文件在根目录则改为'*.txt'
    filenames = glob('stories/*.txt')
    # 按文件名中的数字排序
    filenames = sorted(filenames, key=get_story_number)
    
    analysis_results = []
    for filename in filenames:
        text = read_file(filename)
        avg_word_len, avg_sent_len = analyze_text(text)
        # 实例化分析结果并收集
        analysis = TextAnalysis(filename, avg_word_len, avg_sent_len)
        analysis_results.append(analysis)
    
    return analysis_results

# 执行批量分析并打印结果
if __name__ == "__main__":
    results = batch_analyze_stories()
    for result in results:
        print(result)

关键修复说明

  1. 修复文件名排序错误

    • 重写get_story_number函数,专门提取文件名中的数字部分,避免非数字字符导致的整数转换失败。
    • 确保glob匹配路径正确:如果解压后文件直接在根目录,把stories/*.txt改成*.txt即可。
  2. 复用分析逻辑

    • 将文本分析的核心逻辑封装到analyze_text函数中,避免重复代码,同时处理了单词数/句子数为0的边界情况(防止除以0报错)。
  3. 优化结果存储

    • 给TextAnalysis类添加文件名属性,方便区分每个文件的结果;新增__repr__方法让输出更直观。
  4. 实现批量处理

    • 通过batch_analyze_stories函数完成批量读取、分析、结果收集,循环内每个文件的分析结果都被实例化并存储到列表,最后一次性返回所有结果。

内容的提问来源于stack exchange,提问作者tranquile_jonquille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:11:03