2017-06-19 10 views
-1

***** FULL CODE ******解析日本のPython

私は、Pythonを使用して、いくつかの日本語コードを解析しようとしています(バージョン3.5.3)とMacOSの上MeCabライブラリで編集。

私は、次のテキストを持つテキストファイルがあります:私は、UTF-8を使用して保存するために私のテキストエディット上で私の好みを設定

石の上に三年

を。だから私はシステムがutf-8形式で正しく保存していると信じています。

Traceback (most recent call last): File "japanese.py", line 29, in <module> 
    words = extractMetadataFromTXT(fileName) File "japanese.py", line 14, in extractMetadataFromTXT 
    md = extractWordsJP(data) File "japanese.py", line 22, in extractWordsJP 
    components.append(parsed.surface) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte 

ベローは私の完全なコードを行く:

は、私は次のエラーを得ました。欠けているものはありません。

import MeCab 
import nltk 
from nltk import * 
from nltk.corpus import knbc 

mt = MeCab.Tagger("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd") 
wordsList = knbc.words() 
fdist = nltk.FreqDist(w.lower() for w in wordsList) 

def extractMetadataFromTXT(filePath): 
    with open(filePath, 'r', encoding='utf-8') as f: 
     data = f.read() 
     print(data) 
    md = extractWordsJP(data) 
    print(md) 
    return md 

def extractWordsJP(wordsJP): 
    components = [] 
    parsed = mt.parseToNode(wordsJP) 
    while parsed: 
     components.append(parsed.surface) 
     parsed = parsed.next 
    return components 

if __name__ == "__main__": 
    fileName = "simple_japanese.txt" 
    words = extractMetadataFromTXT(fileName) 
    print(words) 

このエラーメッセージが表示される理由は何ですか?

面白い事実:ときどき動作します。 :O事前に

おかげで、

イスラエル

+0

このエラーは、エンコードの問題によってのみ発生する可能性があります。そのため、テキストエディットの設定が正しく動作しなかった可能性があります。シェルから、 'cd'を入力ファイルのあるディレクトリに移動し、' file simple_japanese.txt'と打ちます。それは 'UTF-8 Unicode text'と言うべきです。 – polm23

答えて

0

解決策:

どうやら、問題はないのpythonコード自体で、MeCabとありました。この問題は、makeを使用して最初からインストールすると、正しくインストールされないことがありますが、エラーは発生しません。

私は理由についてはわかりませんが、さらに詳しく調べて、正確に何が起こっているのかを知りたい場合は、それは素晴らしいことでしょう。私は醸造所を使用して再びアンインストールして再インストールしたことがわかりました。

他のMacでも同様のことが起こっていました。私はOS XでのBREWを使用していますので、私は、私はそれを正しくインストールするために使用するコマンドポストます、また

brew install mecab mecab-ipadic git curl xz 

をLinux上でそれをインストールするには、次のコマンドを使用します。

sudo apt-get install mecab libmecab-dev mecab-ipadic 
sudo apt-get install mecab-ipadic-utf8 
sudo apt-get install python-mecab 

・ホープ、この将来の人々が日本語の単語をタグ付けしようとするのに役立ちます。

0

ファイルを開くと、エンコードを指定:に示すようにBTW

with open(file, 'r', encoding='utf-8') as f: 
    data = f.read() 

... 

、ファイルを開くときは、context managerを使用しますこの例。

+0

TypeError:整数が必要です(strを取得しました) –

+1

これは 'encoding = 'utf-8''を読み込む必要がありますが、Python 3が必要で、おそらく問題を解決しません。 –

+0

ありがとうございましたYann、私はencoding = 'utf-8'の部分が欠けていました。しかし、あなたが予測したように、それは問題を解決しませんでした。それは時々動作しますが、そうではありません。無作為の代わりに安定したものが必要です。 –

1

有効なUTF-8でないものをUTF-8デコーダに供給しているため、エラーが発生しています。これは、文字ではなくバイトを分割したり、UTF-8のようにJISやEUCのような別のエンコーディングを誤ってデコードしようとした場合に発生する可能性があります。 Pythonでは、一般にユニコード文字列に固執するのが賢明で、何かがlocaleパラメータを設定している場合、システムはテキストファイルのデコードに切り替えるかもしれません。たとえあなたが適切なユニコード文字列を持っていても、アクセントのような他のものを変更するコードがあるので、分割は重要ではありません。幸いなことに、日本人にはそういうことはあまりありません(誰かがho + ringなどでpoをエンコードしない限り)。

潜在的な問題:Mecabのウェブページの状態(google translate)「特に指定しない限り、eucが使用されます。もしMecabがEUCを読んでいると仮定してMecabが単語分割していると、UTF-8をmangleします。

+0

utf-8で保存するtextEditの設定を行いましたが、エラーはそのままです。 :( –