【问题标题】:"For loop" doesn't iterate through the files“For循环”不会遍历文件
【发布时间】:2021-05-29 23:19:10
【问题描述】:

在下面的简单 for 循环中,我迭代了 3600 多个文本,将它们标记化并将它们保存到一个列表中:

import glob
import nltk


list = []

for file in glob.glob('C:\\Users\\User\\Desktop\\fake\\*.txt'):
text = open(file,'r',encoding='utf-8').read()
tokenize = nltk.word_tokenize(text)
list.append(tokenize)

但是,当我尝试使用下面的另一个 for 循环打印出这些标记中最常见的 10 个单词时,

for tokens in list:
freq = nltk.FreqDist(tokens)
most_common = freq.most_common(10)

我最终收到一条消息,指出它找到了以下 10 个最常用的词:

[('``', 25), ("''", 23), ('que', 18), ('.', 16), ('você', 14), ('ou', 14), ('o', 12), ('e', 11), ('de', 10), ('a', 10)]

这显然是错误的,因为已经标记了 3600 个文本。我在这里错过了什么?

【问题讨论】:

    标签: loops for-loop nltk tokenize


    【解决方案1】:

    您将文档标记收集到列表列表 list (list.append(tokenize)) 中,然后在 for tokens in list: 循环中将 most_common() 值分配给 most_common 变量,从而仅获得最常用的术语仅适用于最后一个文档。

    我建议.extend 标记列表将所有标记收集到单个flat 单词列表中,然后通过将列表传递给nltk.FreqDist() 来获取前 10 个最常见的标记方法:

    l = []
    for text in texts:
        tokenize = nltk.word_tokenize(text)
        l.extend(tokenize)
    freq = nltk.FreqDist(l)
    most_common = freq.most_common(10)
    

    请注意list 是 Python 内置的,不要这样命名变量。我在上面的代码中选择了l

    【讨论】:

    • Wiktor,你解决了我的很多问题!!真的非常感谢!关于变量的名称,感谢提示,我一定会使用 Python 内置的缩写!
    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多