

環境：Python 3.5.2, MacOS Sierra

エクセルからデータを読み込んで文字列のデータを作りました。

[In]

[code]

    import pandas as pd
    import MeCab
    import sys
    
    df = pd.read_excel("filename.xls", sheetname=0)
    df = df.dropna()
    print(df)  
    
[/code]

[Out]

[code]

    5                          セキュリティ面において不安に感じる
    17                                        便利
    24                                 セキュリティが心配
    28                                  興味があります。
    63                                   持っていない。
    66                             便利だと思いますがもってない
    ...
    998                      べんりかもしれないが、あまり使いたくない
    1000                                 便利だとおもう
    
[/code]

MeCabを使ってこの文字データから「名詞」のみを抜き出し、さらに出現回数を以下のようなイメージでアウトプットと思っています。どなたかコードの書き方を教えて頂けませんでしょうか？

[code]

    文字            出現回数
    セキュリティー    154
    便利              80
    不安              45
    興味              20
    ...
    
[/code]

また、以下のコードで試して見ると、ちゃんとデータの日本語をMeCabで読み込めたので、日本語のエンコード問題はないと思います。

[In]

[code]

    m = MeCab.Tagger ("-Ochasen")
    for i in df:
        print(m.parse (i)) 
    
[/code]

[Out]

[code]

    セキュリティ  セキュリティ  セキュリティ  名詞-一般       
    面   メン  面   名詞-接尾-一般        
    において    ニオイテ    において    助詞-格助詞-連語       
    不安  フアン 不安  名詞-形容動詞語幹       
    に   ニ   に   助詞-副詞化      
    感じる カンジル    感じる 動詞-自立   一段  基本形
    EOS
    
[/code]


CC BY-SA 3.0
2017-02-18T05:05:07.107
32763
2017-02-18T10:36:55.167
19408
question
python mecab
Python3 - MeCabで日本語文字列の名詞出現数の出し方について


excelを使ったのは単に入力文を取得するためですね?
以下のようにmecabの出力文字列から名詞である条件で抽出してその単語をいったんリストに収め、最後に出現回数をカウントしています。なお特別chasen形式で出力する必要はないのでこの回答ではmecabのデフォルト出力フォーマットだとしています。`-Ochasen`を指定した場合は`if`文のところを`if
l != 'EOS' and l.split('\t')[3][:2] == '名詞':`とすればよいです。

[code]

    import collections
    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] == '名詞': # EOSを除き名詞のみ抽出
                noun_list.append(l.split('\t')[0]) # 見出し追加
    
    noun_cnt = collections.Counter(noun_list) # 各名詞の数え上げ
    
    for word, cnt in noun_cnt.items():
        print(word, cnt)
    
[/code]


CC BY-SA 3.0
2017-02-18T07:32:18.217
32766
2017-02-18T10:36:55.167
2017-02-18T10:36:55.167
14418
14418
32763
answer