将大文件读入内存进行word2vec转换
Reading large files into memory for word2vec conversion
我正在尝试将一个大型 .log 文件(超过六万行)读入内存。我想应用在 gensim 中实现的 Word2Vec 算法。我尝试了多种解决方案,但其中 none 似乎有效。任何帮助将不胜感激。
代码 1:
def file_reader(file_obj):
return [word for line in open(file_obj, 'r') for word in line.split()]
代码2:
for i,line in enumerate(open(file_obj,'r')):
print(i,line)
sentences += line
您需要以某种方式对文件进行分块。由于您的文件是基于行的,因此您可以使用 python 的正常行分块(即 for line in file
)。你 运行 遇到的问题是这个
def file_reader(file_obj):
return [word for line in open(file_obj, 'r') for word in line.split()]
将整个文件加载到您的 return 语句中。
您需要在读取该行的同时 assemble 向量而不是这样做。当您遇到每个单词时,就在那里进行停用词删除和左词化,如果还有任何剩余,请将其添加到您的向量中。
或者,如果您需要每个词的更多上下文,则逐句处理。在任何一种情况下,在读入时在 reader 中进行处理,而不是从文件中收集所有数据然后进行处理。
我正在尝试将一个大型 .log 文件(超过六万行)读入内存。我想应用在 gensim 中实现的 Word2Vec 算法。我尝试了多种解决方案,但其中 none 似乎有效。任何帮助将不胜感激。
代码 1:
def file_reader(file_obj):
return [word for line in open(file_obj, 'r') for word in line.split()]
代码2:
for i,line in enumerate(open(file_obj,'r')):
print(i,line)
sentences += line
您需要以某种方式对文件进行分块。由于您的文件是基于行的,因此您可以使用 python 的正常行分块(即 for line in file
)。你 运行 遇到的问题是这个
def file_reader(file_obj):
return [word for line in open(file_obj, 'r') for word in line.split()]
将整个文件加载到您的 return 语句中。
您需要在读取该行的同时 assemble 向量而不是这样做。当您遇到每个单词时,就在那里进行停用词删除和左词化,如果还有任何剩余,请将其添加到您的向量中。
或者,如果您需要每个词的更多上下文,则逐句处理。在任何一种情况下,在读入时在 reader 中进行处理,而不是从文件中收集所有数据然后进行处理。