2017-07-05 45 views
0

我有一個數據幀,其中包含文章文本的一列_text。我正在嘗試爲我的數據框中的每一行獲取文章的長度。這裏是我的嘗試:Python 2.7:編碼爲UTF-8時遇到問題

from bs4 import BeautifulSoup 
result_df['_text'] = [BeautifulSoup(text, "lxml").get_text() for text in result_df['_text']] 

text_word_length = [len(str(x).split(" ")) for x in result_df['_text']] 

不幸的是,我得到這個錯誤:

--------------------------------------------------------------------------- 
UnicodeEncodeError      Traceback (most recent call last) 
<ipython-input-8-f6c8ab83a46f> in <module>() 
----> 1 text_word_length = [len(str(x).split(" ")) for x in result_df['_text']] 

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 231: ordinal not in range(128) 

好像我應該指定 「UTF-8」 的地方,我只是不知道在哪裏...

謝謝!

+0

嘗試在腳本的開頭使用'# - * - coding:utf-8 - * - '?我不知道它是否有效。 – CunivL

+0

請發佈你的問題中得到的錯誤的fulll回溯。 –

+0

@ mpf82更新! – bclayman

回答

3

我假設你使用Python 2版本,並且你的輸入文本包含非ASCII字符。問題出現在str(x)在默認情況下,當x是一個Unicode字符串x.encode('ascii')

結束後,您有2種方法來解決這個問題:

  1. 正確編碼的unicode字符串的UTF-8:

    text_word_length = [len(x.encode('utf-8').split(" ")) for x in result_df['_text']] 
    
  2. 分割字符串爲Unicode:

    text_word_length = [len(x.split(u" ")) for x in result_df['_text']] 
    
0

Acording官方Python文檔: Python Official Site

要定義源代碼的編碼,一個魔法註釋必須被放置到源文件或者作爲該文件中的第一或第二行,比如:

# coding=<encoding name> 

或(使用由常用的編輯器識別的格式):

#!/usr/bin/python 
# -*- coding: <encoding name> -*- 

或:

#!/usr/bin/python 
# vim: set fileencoding=<encoding name> : 
+0

不幸的是,在一個Jupyter筆記本上運行該程序並不能解決我的問題 – bclayman

+1

這是一個不錯的嘗試,但是一個不好的答案。魔術評論僅用於允許unicode litterals中的非ASCII字符。它沒有設置默認的字符集,通常是Python2中的ascii和Python3中的utf8。 –