Gensim:TypeError:doc2bow期望输入的unicode令牌数组,而不是单个字符串

Sam*_*Sam 8 python gensim

我从一些python任务开始,我在使用gensim时遇到了问题.我试图从我的磁盘加载文件并处理它们(拆分它们和小写()它们)

我的代码如下:

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)
Run Code Online (Sandbox Code Playgroud)

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

TypeError: doc2bow expects an array of unicode tokens on input, not a single string
Run Code Online (Sandbox Code Playgroud)

我不明白是什么问题,一点指导将不胜感激.

Ami*_*mir 12

字典的输入需要一个标记化的字符串:

dataset = ['driving car ',
           'drive car carefully',
           'student and university']

# be sure to split sentence before feed into Dictionary
dataset = [d.split() for d in dataset]

vocab = Dictionary(dataset)
Run Code Online (Sandbox Code Playgroud)


小智 10

在dictionary.py中,initialize函数是:

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)
Run Code Online (Sandbox Code Playgroud)

函数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))
Run Code Online (Sandbox Code Playgroud)

因此,如果以这种方式初始化Dictionary,则必须传递文档而不是单个文档.例如,

dic = corpora.Dictionary([a.split()])
Run Code Online (Sandbox Code Playgroud)

没关系