2016-09-14 9 views
1

Python 2.7を使用し、UTF-8でエンコードされたファイルで簡単なトークン処理をしようとしています。 aの出力は、tk[0].encode('utf-8')の後に、unicodeのタイプからstr/byteに変換されるため、期待されるバイト文字列のようです。私の大きな混乱はなぜbの出力が空リストですか?私は符号化なしで(.encode('utf-8')と呼ぶことを意味します)、生のUnicode文字でなければなりません(例えば、1.txtはUTF-8でエンコードされた中国語の文字ファイルであると思われます)。なぜPython 2.7で自分のコードで出力リストが空になっているのですか?

ソースコード

import jieba 

if __name__ == "__main__": 

    with open('1.txt', 'r') as content_file: 
     content = content_file.read() 

    segment_list = jieba.tokenize(content.decode('utf-8'), mode='search') 
    if segment_list is None: 
     print 'segment is None' 
    else: 
     a = [tk[0].encode('utf-8') for tk in segment_list] 
     b = [tk[0] for tk in segment_list] 

     print a 
     print b 

**出力**、

['\xe4\xb8\x8a\xe6\xb5\xb7', '\xe6\xb5\xb7\xe5\xb8\x82', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82', '\xe6\xb7\xb1\xe5\x9c\xb3', '\xe6\xb7\xb1\xe5\x9c\xb3\xe5\xb8\x82', '\xe7\xa6\x8f\xe7\x94\xb0', '\xe7\xa6\x8f\xe7\x94\xb0\xe5\x8c\xba', '\xe6\xa2\x85\xe6\x9e\x97', '\xe6\x9e\x97\xe8\xb7\xaf', '\xe6\xa2\x85\xe6\x9e\x97\xe8\xb7\xaf', '\xe4\xb8\x8a\xe6\xb5\xb7', '\xe6\xb5\xb7\xe5\xb8\x82', '\xe6\xb5\xa6\xe4\xb8\x9c', '\xe6\x96\xb0\xe5\x8c\xba', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82\xe6\xb5\xa6\xe4\xb8\x9c\xe6\x96\xb0\xe5\x8c\xba', '\xe8\x80\x80\xe5\x8d\x8e', '\xe8\xb7\xaf', '\r\n'] 
[] 

答えて

1

jieba.tokenize()は、発電機を返すことが表示されます。ジェネレータは1回だけ反復することができます。もっと良い

b = [tk[0] for tk in segment_list] 
    a = [tk.encode('utf-8') for tk in b] 
+0

おかげでティム、私はUTF-8でエンコードされたTKが必要な場合は、[0]、私はちょうどTKのための1つのライン '= [TK [0] .encode( 'UTF-8')を使用する必要がありますin segment_list] '? –

+1

それは正しいです。 –

+0

ありがとうTim、あなたの回答を回答としてマークしてください。あなたはそんなに知っている! :) –

関連する問題