gpt4 book ai didi

python - 读/写/解析大文本文件的有效方法(python)

转载 作者:太空宇宙 更新时间:2023-11-04 09:16:38 24 4
gpt4 key购买 nike

假设我有一个大得离谱的文本文件。我不认为我的文件会增长到超过 ~500mb,但为了可扩展性和我自己的好奇心,假设它大约是几千兆。

我的最终目标是将其映射到一组句子(以“?”“!”“.”分隔,出于所有意图和目的“;”)并将每个句子映射到一组单词。然后我打算使用 numpy 进行一些统计分析。

执行此操作的最具可扩展性的方法是什么?

PS:我想重写文件,每行一个句子,但我在尝试将文件加载到内存中时遇到了问题。我知道您读取一个文件中的数据 block 、操作它们并将它们写入另一个文件的解决方案,但这似乎对磁盘内存效率低下。我知道,现在大多数人不会担心使用 10gig 的暂存空间,但似乎应该有一种直接编辑文件 block 的方法。

最佳答案

我的第一个想法是使用流解析器:基本上,您一次读入一个文件,然后边读边做统计分析。这通常是使用 HTML 和 XML 等标记语言完成的,因此您会发现许多针对这些语言的解析器,包括在 Python 标准库中。不过,您可以自己编写一个简单的句子解析器;例如:

import re, collections
sentence_terminator = re.compile(r'(?<=[.!?;])\s*')
class SentenceParser(object):
def __init__(self, filelike):
self.f = filelike
self.buffer = collections.deque([''])
def next(self):
while len(self.buffer) < 2:
data = self.f.read(512)
if not data:
raise StopIteration()
self.buffer += sentence_terminator.split(self.buffer.pop() + data)
return self.buffer.popleft()
def __iter__(self):
return self

这只会根据需要从文件中读取数据来完成一个句子。它以 512 字节的 block 读取,因此无论实际文件有多大,您在任何时候在内存中保存的文件内容都不会超过 1 KB。

在流解析器之后,我的第二个想法是 memory map文件。这样你就可以遍历并用换行符替换(大概)跟在每个句子终止符后面的空格;之后,每个句子都将在一个新行开始,您将能够打开文件并使用 readline()for 循环遍历它按行。但是您仍然需要担心多行句子;另外,如果任何句子终止符不是后跟一个空白字符,您将不得不插入一个换行符(而不是用它替换其他内容),这对于大文件来说效率可能非常低。

关于python - 读/写/解析大文本文件的有效方法(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com