当前位置: 首页 > 面试题库 >

Gensim:TypeError:doc2bow期望输入的是Unicode标记数组,而不是单个字符串

淳于星宇
2023-03-14
问题内容

我从一些python任务开始,使用gensim时遇到问题。我正在尝试从磁盘加载文件并进行处理(将它们分开并用lowercase()对其进行处理)

我的代码如下:

dictionary_arr=[]
for file_path in glob.glob(os.path.join(path, '*.txt')):
    with open (file_path, "r") as myfile:
        text=myfile.read()
        for words in text.lower().split():
            dictionary_arr.append(words)
dictionary = corpora.Dictionary(dictionary_arr)

列表(dictionary_arr)包含所有文件中所有单词的列表,然后使用gensim
corpora.Dictionary处理该列表。但是我遇到了一个错误。

TypeError: doc2bow expects an array of unicode tokens on input, not a single string

我无法理解有什么问题,需要一些指导。


问题答案:

在dictionary.py中,初始化函数为:

def __init__(self, documents=None):
    self.token2id = {} # token -> tokenId
    self.id2token = {} # reverse mapping for token2id; only formed on request, to save memory
    self.dfs = {} # document frequencies: tokenId -> in how many documents this token appeared

    self.num_docs = 0 # number of documents processed
    self.num_pos = 0 # total number of corpus positions
    self.num_nnz = 0 # total number of non-zeroes in the BOW matrix

    if documents is not None:
        self.add_documents(documents)

函数add_documents从文档集合构建字典。每个文档都是令牌列表:

def add_documents(self, documents):

    for docno, document in enumerate(documents):
        if docno % 10000 == 0:
            logger.info("adding document #%i to %s" % (docno, self))
        _ = self.doc2bow(document, allow_update=True) # ignore the result, here we only care about updating token ids
    logger.info("built %s from %i documents (total %i corpus positions)" %
                 (self, self.num_docs, self.num_pos))

因此,如果以此方式初始化Dictionary,则必须传递文档,但不能传递单个文档。例如,

dic = corpora.Dictionary([a.split()])

还可以



 类似资料:
  • 我是一个绝对的初学者,没有任何编程语言的经验。 我写了一个程序作为将阿拉伯数字转换成罗马数字的练习。它起作用了。然而,如果输入的是字符串而不是整数,我想添加一部分来处理这个问题。我不知道该怎么做。我试图使用try/catch,但我不知道如何正确使用它。现在程序要求我输入两次数字。怎么办? 以下是他的主要方法:

  • 我的第一个猜测是,这是一个数据库配置问题,但我已经确认(尽我所知),Postgres确实通过执行以下操作来接受UTF-8: 我还通过手动向数据库中插入一个条目进一步证实了这一点: 从上面可以理解,数据库已经接受了我的值,并且已经成功地将Unicode字符添加到数据库中。 我排除了应用程序的代码,因为它是一个非常大的项目的一部分,并且相关的部分在这里和那里是支离破碎的。但是,我认为它们与问题无关,因

  • 对不起,新手:/。所以当我在“输入你的年龄”中键入一封信时,我有这个问题 输入您的年龄:q 线程“main”java.util.InputMismatchException中出现异常 在java.util.scanner.throwfor(Scanner.java:909) 我想如果我打了任何一个字母,它显示“无效输入”。有人能帮我吗?[对不起,糟糕的英语]

  • 问题内容: 如果我有以下形式的字典: 然后我写 我懂了 如预期的那样。但是如果我写 我懂了 ,但我希望打印字符本身。 无论如何,所有数据最终都将最终转储到数据库中,因此解决此问题并不关键,但是对于调试来说,如果我在打印整个字典时能得到可读的输出,那就太好了。有什么办法吗? 对于那些好奇的人,脚本是格鲁吉亚语,是的,它说“ bar”。 问题答案: 这在我的终端中有效:

  • 我有下面的Java内容,我只想剥离html标记,而不是新行字符 如果我在文本丰富编辑器中打开上面的内容,第1行和第2行以不同的行显示(不显示

  • 本文向大家介绍JavaScript 字符串是unicode,包括了JavaScript 字符串是unicode的使用技巧和注意事项,需要的朋友参考一下 示例 所有JavaScript字符串都是unicode! JavaScript中没有原始字节或二进制字符串。为了有效地处理二进制数据,请使用类型化数组。