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
相关产品推荐
相关产品推荐

