使用sklearn load_files进行解码/编码

时间:2017-05-26 03:17:20

标签: python-3.x scikit-learn nlp countvectorizer

我按照这里的教程进行操作 https://github.com/amueller/introduction_to_ml_with_python/blob/master/07-working-with-text-data.ipynb 了解机器学习和文本。

在我的情况下,我使用我下载的推文,在他们使用的完全相同的目录结构中使用正面和负面推文(尝试学习情绪分析)。

在iPython Notebook中我加载数据就像他们一样:

tweets_train =load_files('Path to my training Tweets')

然后我尝试将它们与CountVectorizer相匹配

vect = CountVectorizer().fit(text_train)

我得到了

  

UnicodeDecodeError:' utf-8'编解码器不能将字节0xd8解码到位   561:无效的连续字节

这是因为我的推文中有各种非标准文字吗?我没有对我的推文进行任何清理(我认为有些图书馆可以帮助解决这些问题,以便让一大堆文字有用吗?)

编辑: 我使用Twython下载推文的代码:

def get_tweets(user):
    twitter = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
    user_timeline = twitter.get_user_timeline(screen_name=user,count=1)
    lis = user_timeline[0]['id']
    lis = [lis]
    for i in range(0, 16): ## iterate through all tweets
    ## tweet extract method with the last list item as the max_id
        user_timeline = twitter.get_user_timeline(screen_name=user,
        count=200, include_retweets=False, max_id=lis[-1])
        for tweet in user_timeline:
            lis.append(tweet['id']) ## append tweet id's
            text = str(tweet['text']).replace("'", "")
            text_file = open(user, "a")
            text_file.write(text)
            text_file.close()

1 个答案:

答案 0 :(得分:0)

您收到UnicodeDecodeError,因为您的文件正在使用错误的文本编码进行解码。 如果这对您没有任何意义,请确保您了解Unicode和文本编码的基础知识,例如。使用official Python Unicode HOWTO

首先,您需要找出用于将推文存储在磁盘上的编码。 将它们保存到文本文件时,您使用了内置的open函数而未指定编码。这意味着使用了系统的默认编码。例如,在交互式会话中检查:

>>> f = open('/tmp/foo', 'a')
>>> f
<_io.TextIOWrapper name='/tmp/foo' mode='a' encoding='UTF-8'>

在这里,您可以看到在我的本地环境中,默认编码设置为UTF-8。您也可以使用

直接检查默认编码
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

还有其他方法可以找出文件使用的编码方式。 例如,如果你碰巧在Unix平台上工作,Unix工具file非常擅长猜测现有文件的编码。

一旦您认为您知道用于编写文件的编码,您可以在load_files()函数中指定:

tweets_train = load_files('path to tweets', encoding='latin-1')

...如果您发现Latin-1是用于推文的编码;否则相应调整。