TypeError:序列项0:预期为类似字节的对象,找到str

时间:2019-02-25 09:40:01

标签: gensim word2vec python-3.7

我正在尝试使用Python 3中的word2vec-gensim从文本文件中的Wiki标题转储中提取印度尼西亚标题。Wiki转储还包含其他语言的标题和一些符号。下面是我的代码:

    if len(sys.argv) != 3: 
    namaFileInput = "idwiki-latest-pages-articles.xml.bz2"
    namaFileOutput = "wiki.id.case.text"
    sys.exit(1)
inp, outp = sys.argv[1:3]
space = " "
i = 0

output = open(namaFileOutput, 'w')

# lower=False: huruf kecil dan besar dibedakan
wiki = WikiCorpus(namaFileInput, lemmatize=False, dictionary={}, lower=False)
for text in wiki.get_texts():
    if six.PY3:
        output.write(b' '.join(text).encode('utf-8') + '\n')
    else:
        output.write(space.join(text) + "\n")
    i = i + 1
    if i % 10000 == 0:
        logger.info("Saved " + str(i) + " articles")

output.close()
logger.info("Finished Saved " + str(i) + " articles")

但是我遇到了错误:

    TypeError                                 Traceback (most recent call last)
<ipython-input-17-d4c686a9093a> in <module>
     29 for text in wiki.get_texts():
     30     if six.PY3:
---> 31         output.write(b' '.join(text).encode('utf-8') + '\n')
     32     else:
     33         output.write(space.join(text) + "\n")

TypeError: sequence item 0: expected a bytes-like object, str found

我已在线搜索,但无法成功。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题出在以下代码行:b' '.join(text)

变量text是一个字符串列表,但是您试图将它们与字节字符串(即b' ')连接在一起,这是行不通的。您可以通过简单地删除b来解决此问题,因为以后无论如何都可以使用.encode('utf-8')方法将字符串转换为字节:

output.write(' '.join(text).encode('utf-8') + '\n')