python gensim TypeError:强制为Unicode:需要字符串或缓冲区,找到列表

2024-04-25 07:35:30 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我相信,尽管这是一个常见的问题,有许多类似的问题(特别是在stackoverflow上),这个问题背后的主要原因在每种情况下都是不同的

在我的例子中,我有一个名为readCorpus查找下面的代码)的方法,它读取21个文件的列表,从每个文件中提取文档,然后生成它们

在读取每个文件的末尾执行yield操作

我有另一个名为uploadCorpus在下面查找代码)。该方法的主要目的是上传该语料库。在

显然,使用yield背后的主要原因是语料库可能非常大,我只需要读一次。在

一旦我运行了uploadCorpus方法,就会收到下面的错误

TypeError: coercing to Unicode: need string or buffer, list found

错误发生在self.readCorpus()])行。在

读过类似的问题我才明白,当一张单子放错地方时会发生这种情况。。我试着把这里的问题升级到docs for docs in self.readCorpus()]),但最后还是出了同样的问题

我的代码(上传语料库)

def uploadCorpus(self):
        #convert docs to corpus
        print "uploading"

        utils.upload_chunked(
            self.service,
            [{'id': 'doc_%i' % num, 'tokens': utils.simple_preprocess(doc)}
            for num, doc in enumerate([ 
                self.readCorpus()])
                ],
            chunksize=1000) # send 1k docs at a time

我的代码readCorpus()

^{pr2}$

Tags: 文件to方法代码selfdocsfordoc
1条回答
网友
1楼 · 发布于 2024-04-25 07:35:30

下面的行需要iterable对象。。其中readCorpus函数应该是使用关键字yield的生成器

self.readCorpus()

但是,readCorpus函数并没有按照生成器应有的方式运行,因为yield关键字的实现不佳。在

当前实现每1000次循环迭代生成一个项目数组,而正确的方法是逐项生成。在

因此需要修改语料库如下

^{pr2}$

相关问题 更多 >