mai_Nのプログラミング勉強メモ

Python or R × マーケティング

Janomeを使った形態素解析②

■単語ごとに分けた辞書を作る

Tokenオブジェクトの中から必要な属性を取り出してリスト化する。

data = []
from janome.tokenizer import Tokenizer
t = Tokenizer()
token_list = t.tokenize("今日はいい天気ですね。")
for token in token_list:
    surface = token.surface
    base = token.base_form
    part_of_speech = token.part_of_speech.split(',')[0]
    part_of_speech_1 = token.part_of_speech.split(',')[1]
    datum = {
        '表層形':surface,
        '基本形':base,
        '品詞':part_of_speech,
        '品詞細分類1':part_of_speech_1,
    }
    data.append(datum)
data

[{'表層形': '今日', '基本形': '今日', '品詞': '名詞', '品詞細分類1': '副詞可能'},
{'表層形': 'は', '基本形': 'は', '品詞': '助詞', '品詞細分類1': '係助詞'},
{'表層形': 'いい', '基本形': 'いい', '品詞': '形容詞', '品詞細分類1': '自立'},
{'表層形': '天気', '基本形': '天気', '品詞': '名詞', '品詞細分類1': '一般'},
{'表層形': 'です', '基本形': 'です', '品詞': '助動詞', '品詞細分類1': '*'},
{'表層形': 'ね', '基本形': 'ね', '品詞': '助詞', '品詞細分類1': '終助詞'},
{'表層形': '。', '基本形': '。', '品詞': '記号', '品詞細分類1': '句点'}]

※辞書型リストにする別の方法※
dict(key=値, key=値, ....)を使う

data.append(dict(表層形=surface, 基本形=base, 品詞=part_of_speech, 品詞細分類1=part_of_speech_1))


■単語の出現回数をカウントする

まずは基本形のリストを作る。

base_list = []
for i in range(len(data)):
    base_list.append(data[i]['基本形'])
base_list

['今日', 'は', 'いい', '天気', 'です', 'ね', '。']

次に「defaultdict」を使ってカウントする。
※defaultdict→存在しないキーは新しいキーとして生成しながら辞書を作ってくれる。
(defautdictの引数=初期化時に実行する関数。今回は0を返す関数=「lambda:0」または「int」)

from collections import defaultdict
d = defaultdict(lambda: 0)
for key in base_list:
    d[key] += 1
d

defaultdict(int, {'今日': 1, 'は': 1, 'いい': 1, '天気': 1, 'です': 1, 'ね': 1, '。': 1})
(※キーのデフォルトは0で、一度出現する度に数値が増えていくプログラムになっている)