gpt4 book ai didi

python - Python 中 1Gb 文本文件的词频计算

转载 作者:太空狗 更新时间:2023-10-30 00:22:59 26 4
gpt4 key购买 nike

我正在尝试计算一个大小为 1.2 GB 的文本文件的词频,该文件大约有 2.03 亿个词。我正在使用以下 Python 代码。但它给了我一个内存错误。有解决办法吗?

这是我的代码:

import re
# this one in honor of 4th July, or pick text file you have!!!!!!!
filename = 'inputfile.txt'
# create list of lower case words, \s+ --> match any whitespace(s)
# you can replace file(filename).read() with given string
word_list = re.split('\s+', file(filename).read().lower())
print 'Words in text:', len(word_list)
# create dictionary of word:frequency pairs
freq_dic = {}
# punctuation marks to be removed
punctuation = re.compile(r'[.?!,":;]')
for word in word_list:
# remove punctuation marks
word = punctuation.sub("", word)
# form dictionary
try:
freq_dic[word] += 1
except:
freq_dic[word] = 1

print 'Unique words:', len(freq_dic)
# create list of (key, val) tuple pairs
freq_list = freq_dic.items()
# sort by key or word
freq_list.sort()
# display result
for word, freq in freq_list:
print word, freq

这是我收到的错误:

Traceback (most recent call last):
File "count.py", line 6, in <module>
word_list = re.split('\s+', file(filename).read().lower())
File "/usr/lib/python2.7/re.py", line 167, in split
return _compile(pattern, flags).split(string, maxsplit)
MemoryError

最佳答案

问题就从这里开始:

file(filename).read()

这会将整个文件读入一个字符串。相反,如果您逐行或逐 block 处理文件,则不会遇到内存问题。

with open(filename) as f:
for line in f:

您还可以从使用 collections.Counter 中获益计算词频。

In [1]: import collections

In [2]: freq = collections.Counter()

In [3]: line = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod'

In [4]: freq.update(line.split())

In [5]: freq
Out[5]: Counter({'ipsum': 1, 'amet,': 1, 'do': 1, 'sit': 1, 'eiusmod': 1, 'consectetur': 1, 'sed': 1, 'elit,': 1, 'dolor': 1, 'Lorem': 1, 'adipisicing': 1})

再计算一些单词,

In [6]: freq.update(line.split())

In [7]: freq
Out[7]: Counter({'ipsum': 2, 'amet,': 2, 'do': 2, 'sit': 2, 'eiusmod': 2, 'consectetur': 2, 'sed': 2, 'elit,': 2, 'dolor': 2, 'Lorem': 2, 'adipisicing': 2})

collections.Counterdict 的子类,因此您可以按照您已经熟悉的方式使用它。此外,它还有一些有用的计数方法,例如most_common。 .

关于python - Python 中 1Gb 文本文件的词频计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674266/

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