Tweet分析,为LDA制作字典时的Python错误

时间:2015-03-31 13:01:21

标签: python dictionary lda gensim

我使用Twitter API for python以UTF-8下载了关于阿姆斯特丹的推文。 现在我正在尝试为LDA创建一个字典,使用这段代码(只是代码的一部分,但这是导致错误的部分):

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file))

总是给我一个错误,取决于我选择哪个txt文件作为输入:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xf1 in position 2: invalid continuation byte

 UnicodeDecodeError: 'utf8' codec can't decode byte xxxx in position 175-176: unexpected end of data

我希望其原因是UTF-8中未知的字符(推文中可能使用的一些表情符号)以及Googling尝试将代码替换为:

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file, errors='ignore'))

错误消息:

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file, errors='ignore'))
TypeError: 'errors' is an invalid keyword argument for this function

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file, 'ignore'))

错误消息:

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file, 'ignore'))
ValueError: mode string must begin with one of 'r', 'w', 'a' or 'U', not 'ignore'

有没有人有解决方案?感谢

3 个答案:

答案 0 :(得分:0)

您的错误处理位置错误。要求忽略解码错误时,您无法打开文件;这种情况发生在下一步。

你应该做什么,是以二进制模式(rb修饰符)打开文件并读取行。它们将成为bytes个对象。然后你可以解码它们并忽略错误:

with open('/tmp/myfile', 'rb') as f:
    for linebytes in f.readlines():
        linestring = linebytes.decode(encoding='utf-8', errors='ignore')

答案 1 :(得分:0)

您的输入文件显然不是UTF-8。应该有文档说明这些Twitter文件的实际编码是什么;打开文件时相应地设置编码。

with open(input_file,encoding="whatever Twitter uses") as twitterfile:       
    dictionary = corpora.Dictionary(line.lower().split() for line in twitterfile)

这样Python就会将输入解码为没有错误的字符串,这显然优于忽略错误和破坏数据。

答案 2 :(得分:0)

如果您知道您正在阅读的数据是utf-8,则可以导入编解码器模块并使用codecs.open()代替open()

Reading and Writing Unicode Data

尝试一下:

import codecs
dictionary = corpora.Dictionary(line.lower().split() for line in codecs.open(input_file, mode='r', encoding='utf-8', errors='ignore'))