Python 提高单词袋模型中的排序效率

Python 提高单词袋模型中的排序效率,python,nlp,nltk,Python,Nlp,Nltk,我正在创建一个文本摘要器,并使用一个基本模型来使用文字袋方法。 我正在执行的代码正在使用nltk库。 读取的文件是一个超过2500000字的大文件。 下面是我正在处理的循环,但运行和完成它需要2个多小时。有没有办法优化这段代码 f= open('Complaints.csv', 'r') raw = f.read() len(raw) tokens = nltk.word_tokenize(raw) len(tokens) freq = nltk.FreqDist(text) top_words

我正在创建一个文本摘要器,并使用一个基本模型来使用文字袋方法。
我正在执行的代码正在使用nltk库。 读取的文件是一个超过2500000字的大文件。 下面是我正在处理的循环,但运行和完成它需要2个多小时。有没有办法优化这段代码

f= open('Complaints.csv', 'r')
raw = f.read()
len(raw)
tokens = nltk.word_tokenize(raw)
len(tokens)
freq = nltk.FreqDist(text)
top_words = [] # blank dictionary 
top_words = freq.most_common(100)
print(top_words)
sentences = sent_tokenize(raw)
print(raw)
ranking = defaultdict(int)
for i, sent in enumerate(raw):
for word in word_tokenize(sent.lower()):
    if word in freq:
        ranking[i]+=freq[word]
top_sentences = nlargest(10, ranking, ranking.get)
print(top_sentences)
这只是一个文件,实际部署中有10-15个大小类似的文件。 我们如何改进这一点。

请注意,这些是聊天机器人的文本,是实际的句子,因此不需要删除空格、词干和其他文本预处理方法。使用google colab,它提供自己的GPU。首先,您立即打开一个需要放入RAM的大文件。如果您没有真正好的计算机,这可能是性能的第一个瓶颈。分别读取每一行,或者尝试使用一些IO缓冲区。 你有什么CPU?如果您有足够的内核,那么在使用多处理库中的异步池并行程序时,您可以获得很多额外的性能,因为您确实使用了所有内核的全部功能(根据线程数选择进程数。使用此方法,我将2500个数据集上的模型从12个线程上的~5分钟减少到~17秒)。您必须实现每个进程以返回dict,并在进程完成后更新它们

另外,还有用于文本摘要(序列到序列RNN)的机器学习方法。通过tensorflow实现,您可以在本地机器上使用专用GPU(即使是Nvidia提供的一个像样的10xx或2060也会有帮助)来加速您的模型


希望这有助于

colab无法工作,因为这是一些敏感数据,不能是开源云。您问题中的代码实际上是您运行的代码吗?如何使用
语句
?如何使用
标记
(您完全标记源文件)?您真的使用
枚举(原始)
而不是
枚举吗(句子)
?你真的在使用
打印(原始)
哪一个将完整的源文件打印到控制台?请将您的代码编辑到一个您已经运行过并且任何人都可以运行而无需添加或编辑任何内容的文件中-还请修复您的缩进。我必须停止此代码,因为它一直在运行,而且永远不会结束。我的想法是将我创建的数据帧文件作为原始文件进行查找由于客户端不提供任何基于GPU和TPU的机器,代码不能保存在云环境中,因此,客户端将有一个多核cpu,因此独立于实现,您需要并行化您的代码。H如果你的代码无限循环,你怎么能估计它能运行两个小时呢?我同意,@clpracticalics-这听起来非常模糊-而且发布的代码很奇怪,因此投票决定关闭。还有“你问题中的代码实际上就是你运行的代码吗?”没有得到回答。它不应该是
if word in top\u words:
而不是
if w吗ords在freq
?但您没有回答这是否是您运行的实际代码。。。