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

Python3:如何将文件词干化后按行存入列表并保留原行数

解决词干提取后保留原文件行结构的问题

嘿,我明白你的困扰了!你现在的问题是把所有词干化后的单词都塞进了一个扁平的列表里,完全丢失了原文件9万行的结构对吧?别担心,只要调整一下代码逻辑,就能轻松实现每行对应一个列表元素的需求。

问题根源

你当前的代码应该是直接把每个词干化后的单词append到同一个大列表里,没有按原文件的行进行分组,最后自然就变成了一行到底的结果。我们需要做的是为每一行单独创建一个子结果,再把这些子结果汇总到外层列表中。

解决方案代码示例

假设你已经有适配目标语言的词干提取工具(毕竟你说文件非英文,这里用stemmer.stem(word)作为词干提取的占位符),调整后的代码如下:

# 先导入/初始化你的词干提取器,比如针对非英文的工具
# 示例:from my_non_english_stemmer import MyStemmer
# stemmer = MyStemmer()

# 外层列表:每个元素对应原文件的一行词干化结果
clean_sentences = []

folder_path = "./your_target_folder/"
text_file_name = "your_large_file.txt"

with open(folder_path + text_file_name, 'r', encoding='utf-8') as f:
    # 逐行读取文件,内存友好,适合大文件
    for line in f:
        # 去掉行首尾的换行、空格等空白字符
        cleaned_line = line.strip()
        
        # 处理空行:如果原文件有空行,也保留对应的空元素(可选,按需调整)
        if not cleaned_line:
            clean_sentences.append([])  # 或者append(""),取决于你要列表还是字符串
            continue
        
        # 把当前行分割成单词列表(如果你的分割规则不是空格,可换成正则等方式)
        word_list = cleaned_line.split()
        
        # 对当前行的每个单词做词干提取,生成该行的词干列表
        stemmed_line = [stemmer.stem(word) for word in word_list]
        
        # 把整行的词干结果加入外层列表,保留行结构
        clean_sentences.append(stemmed_line)
        
        # 如果你需要每行是拼接后的字符串而不是列表,就换成下面这行:
        # clean_sentences.append(' '.join(stemmed_line))

关键细节说明

  • 外层列表结构:clean_sentences最终会有90000个元素,每个元素对应原文件的一行,完美保留了原始结构。
  • 内存效率:逐行读取的方式不会一次性把9万行文件全部加载到内存,处理大文件时更稳定。
  • 灵活调整:如果你的单词分割不是简单的空格(比如有标点、特殊字符),可以用re.split()等正则方法来适配;空行的处理也可以根据需求选择跳过或保留。
  • 非英文适配:只要确保你的词干提取工具支持目标语言(比如针对中文的jieba+自定义词干,或者其他语言的专用库),替换掉示例中的stemmer.stem(word)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:48:48