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

语料库特定词高效查找及低频词过滤方法优化问询

嘿,针对你现在处理10份HTML文档构建带权重词文档的低效流程,我给你整理了一个更顺畅的优化方案,核心就是避免重复的磁盘IO操作,把所有步骤尽量放在内存里完成:

高效优化方案:一次流程完成分词、统计、过滤与权重计算

核心思路

原方案先把每份文档的分词结果写入文件,再重新读取做频次校验,这多了一轮不必要的磁盘读写——对于10份文档来说,完全可以把所有数据放在内存里处理,大幅提升效率。

步骤1:一次性完成所有文档的分词与全局词频统计

遍历所有HTML文档,一边解析分词,一边用计数器统计全局词频,同时把每份文档的分词结果存在内存里:

from collections import Counter
from bs4 import BeautifulSoup
import nltk
from nltk.tokenize import word_tokenize
import os

# 确保nltk分词所需的数据包已下载
nltk.download('punkt')

# 初始化全局词频计数器和文档分词存储列表
global_word_counts = Counter()
doc_token_list = []

# 遍历目标目录下的所有HTML文件
for file_name in os.listdir("your_html_folder_path"):
    if file_name.endswith(".html"):
        file_path = os.path.join("your_html_folder_path", file_name)
        with open(file_path, 'r', encoding='utf-8') as f:
            # 解析HTML提取纯文本
            soup = BeautifulSoup(f, 'html.parser')
            raw_text = soup.get_text()
            # 分词+基础预处理(转小写、只保留字母词,可按需调整)
            tokens = word_tokenize(raw_text)
            cleaned_tokens = [token.lower() for token in tokens if token.isalpha()]
            # 保存当前文档的分词结果
            doc_token_list.append(cleaned_tokens)
            # 更新全局词频统计
            global_word_counts.update(cleaned_tokens)

步骤2:生成过滤后的有效词表

基于全局词频,直接筛选出出现次数≥5的词:

# 只保留出现次数不少于5次的词
valid_words = {word for word, count in global_word_counts.items() if count >= 5}

步骤3:构建带权重的文档表示

用之前存在内存里的每份文档分词结果,结合有效词表,直接计算权重(这里以TF词频权重为例,你也可以换成TF-IDF等):

weighted_documents = []
for tokens in doc_token_list:
    doc_word_counts = Counter(tokens)
    total_tokens = len(tokens)
    # 生成当前文档的权重字典,只保留有效词
    weighted_doc = {
        word: count / total_tokens  # TF权重:词在文档中的占比
        for word, count in doc_word_counts.items()
        if word in valid_words
    }
    weighted_documents.append(weighted_doc)

步骤4:按需写入结果文件(可选)

如果最终需要把带权重的文档保存到文件,这时候再一次性写入,而不是中间多次操作:

# 把每个带权重的文档写入单独文件
for idx, doc in enumerate(weighted_documents):
    with open(f"weighted_document_{idx+1}.txt", 'w', encoding='utf-8') as f:
        for word, weight in doc.items():
            f.write(f"{word}: {weight:.4f}\n")  # 保留四位小数更整洁

为什么这个方案更高效?

磁盘IO是程序性能的常见瓶颈,原方案的两次文件读写(写分词→读分词)完全是冗余操作。优化后的方案全程在内存中完成数据流转,只在最后按需写入结果,对于10份文档的规模来说,内存占用完全可控,同时能把处理速度提升不少。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:52:56