python - Set() 在一个很长的列表上并创建一个更长的矩阵

标签 python set

我正在尝试获取一个非常长的书籍数据库(大约 60,000 本书)中所有单词的 set() 并将每本书的“词汇表”存储在矩阵中(书籍的路径位于"file"中) ”):

for f in files:
    book = open(f, 'r')
    vocabulary = []

    for lines in book.readlines():
        words = string.split(lines)
        vocabulary += set(words)
    matrix.extend([vocabulary])
    V += set(vocabulary)

好的,我通过创建一个文件来存储所有内容解决了(内存)问题,但现在在尝试使用以下命令创建矩阵时遇到另一个内存错误:

条目 = numpy.zeros((len(V),a))

我尝试通过以下方式解决这个问题:

entries = numpy.memmap('matrice.mymemmap', shape=(len(V),a))

但终端显示:

文件“/usr/lib/python2.7/dist-packages/numpy/core/memmap.py”,第 193 行,new fid = open(文件名, (模式 == 'c' 和 'r' 或模式)+'b') IOError:[Errno 2]没有这样的文件或目录:'matrice.mymemmap'

你能帮我解决这个问题吗?

最佳答案

V = set()

for f in files:
    with open(f, 'r') as book:
        for lines in book.readlines():
            words = lines.split(" ")
            V.update(words)

在这里,您首先创建一个空集。然后,对于每个文件,您迭代文件中的行并用空格分隔每一行。这将为您提供该行的单词列表。然后,您通过单词列表更新集合,即集合中仅保留唯一的单词。

所以,你最终会得到 V其中包含您库中的所有单词。

当然,您可能想清理 words 中的一些大小写和标点符号。在更新集合之前删除空字( "" )。这应该发生在 V.update() 之前陈述。否则,您最终会得到两者,例如 Itit , fortunately,fortunately

请注意with带有文件操作的语句。这可以确保无论发生什么,文件都会在您离开 with block 之前关闭。

如果您想逐本书地进行此操作,那么:

vocabularies = []

for f in files:
    V = set()
    with open(f, 'r') as book:
        for lines in book.readlines():
            words = lines.split(" ")
            V.update(words)
    vocabularies.append(V)

另外,代替 for lines in book.readlines():您可以只使用 for lines in book: .

关于python - Set() 在一个很长的列表上并创建一个更长的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655592/

相关文章:

C++ 从文本文件中读取字典并将其存储在排序容器中的最佳方法是什么

python - 所有可能的总和为零的整数集

python - Set 与 DAWG 在 Python 中检查字典中的成员资格

带有 Set 类型参数的 Java 方法重载

python - 设置为 dict Python

python - 在 virtualenv 中通过 pip 安装 PyGObject

python - 需要从 Unix shell -> Python -> & 返回进行控制

python - 如何测试重定向到 Flask 中创建的实例

python - 如何在 nn.LSTM pytorch 中取得 R2 分数

python - 模块未找到错误 : No module named 'cogs'