从Gensim Word2Vec提取高频词时词条前多出换行符如何解决
修复方案:Gensim Word2Vec导出词条前缀多余/n问题
核心问题原因
- 你使用
'/n'.join()拼接列表时斜杠方向写反:编程语境下换行符是反斜杠+n即\n,你写的正斜杠/n会被识别为普通文本,直接拼接在每个词条前面,就会出现/nhouse这类不符合预期的结果,触发键错误。 - 若你从本地txt读取词条仍有该问题,是因为读取行时没有去掉每行末尾自带的换行符,导致多余字符被保留进词条变量。
- 你当前贴出的代码存在小疏漏:
ausgabe.close缺少括号,不会实际执行文件关闭操作,可能导致写入内容丢失。
修复方法
1. 修正join拼接语法
如果需要用join方法生成带换行的文本,把正斜杠换成反斜杠即可:
# 错误写法 # wrong_text = '/n'.join(new_list) # 正确写法 correct_text = '\n'.join(new_list)
2. 本地txt读取时自动去除换行符
读取本地词表文件时,调用strip()方法去除每行首尾的空白字符(包含换行符、空格、制表符等):
with open("wigbelsZahlen.txt", "r", encoding="utf-8") as f: # 自动过滤空行,去除每行首尾多余字符 corpus_words = [line.strip().split('\t')[0] for line in f if line.strip()]
3. 修正后的导出词频完整代码
from gensim.models import Word2Vec Model_Pfad = r'D:\OneDrive\Phyton\modelC.model' # 推荐用with上下文管理器,自动处理文件关闭,不用手动写close with open('D:\\OneDrive\\Phyton\\wigbelsZahlen.txt', 'w', encoding='utf-8') as ausgabe: model = Word2Vec.load(Model_Pfad) # 取频率最高的1000个词 x = list(model.wv.index_to_key[:1000]) stop_words = set(["an", 'as', 'art', 'ab', 'al', "aber", "abk.", "alle", "allem", "allen", "aller", "alles", "allg."]) new_list = [item for item in x if item not in stop_words] for i in new_list: result = model.wv.get_vecattr(i, "count") ausgabe.write(f"{i}\t{result}\n")
内容的提问来源于stack exchange,提问作者Reijarmo
相关产品推荐
相关产品推荐

