

環境：Python 3.5.2, MacOS Sierra

エクセルのデータを読み込んで文字列を作り、ReCabを使って名詞と出現回数を出すコードが以下にあります。

[code]

    import pandas as pd
    import MeCab
    import sys
    
    df = pd.read_excel("filename.xls", sheetname=0)
    df = df.dropna()
    
    m = MeCab.Tagger()
    
    noun_list = []
    for i in df:
        for l in m.parse (i).splitlines():
            if l != 'EOS' and l.split('\t')[1].split(',')[0] == '名詞':
                noun_list.append(l.split('\t')[0])
    
    noun_cnt = collections.Counter(noun_list)
    
    noun = pd.DataFrame(list(noun_cnt.items()), columns=['名詞', '出現回数'])
    noun = noun.sort_values('出現回数', axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
    noun = noun[noun['出現回数'] > 10] # 10回以上出現したもののみ
    
    print(noun.tail())
    
[/code]

[Out]

[code]

           word  出現回数
    51       心配    18
    199      そう    23
    171  セキュリティ    31
    156      不安    40
    154      便利    81
    
[/code]

手持ちのファイルではコードは走ったのですが、違った日本語データを使いコードを走らせてみると、以下のエラーが出てくるためエンコードの問題であると考えています。

`NotImplementedError: Wrong number or type of arguments for overloaded
function 'Tagger_parse'.`

`utf-8`へのencodeとdecodeをコードに入れる必要があると思うのですが、どなたか教えて頂けませんでしょうか？


CC BY-SA 3.0
2017-02-21T00:28:49.147
32823
2017-02-21T00:37:55.603
19408
question
python mecab
Python3 - MeCabで日本語をエンコードする方法


この問題はPandasとはあまり関係なく、正しく動作する場合と動作しない場合とでMecabの `m.parse(i)` に渡している `i`
の形式が異なるために起きているように見えます。文字コードの可能性もありますが、違うかもしれません。

`i` が何物であるかを明確にするために、前の行に `print(i)` や `print(repr(i))` や `print(type(i))`
を仕込むなどして、どのようなデータを渡そうとしているのか、確認してみてください。確認ができたら、Pandasを使わない状況で同じ問題を発生させられるか、切り分けてみて下さい。

推測ですが、うまく動作しないときは `i` が文字列ではなく配列や他のデータ形式になっているのではないかと思います。


CC BY-SA 3.0
2017-02-21T00:37:55.603
32824
2017-02-21T00:37:55.603
806
32823
answer