自然言語処理では、辞書に存在する単語が、文章中に存在するかどうかをチェックしていくが、その辞書を通常、gazetteerと言う
### gazetterの中の単語が文章中にあれば出力
import MeCab text = '今日は晴れかな?' weather_set = set(['晴れ','天気','雨']) mecab = MeCab.Tagger("-Ochasen") tokens = mecab.parse(text) token = tokens.split("\n") for ele in token: element = ele.split("\t") if element[0] == "EOS": break surface = element[0] if surface in weather_set: print(surface)
$ python3 app.py
晴れ
### カテゴリ分類
– カテゴリに対応したgazetterを用意する必要がある
– gazetterはweb上から検索する手法がよく取られる
– 文章を大規模に集積したものをコーパスと言う
– gazetteerの網羅率を上げることが分類精度において重要
import MeCab text = '東京駅まで電車でどれ位かかりますか?' weather_set = set(['晴れ','天気','雨','曇り']) navi_set = set(['渋谷','東京','電車','地図']) mecab = MeCab.Tagger("-Ochasen") # def classify_category(text): tokens = mecab.parse(text) token = tokens.split("\n") weather_score = 0 navi_score = 0 for ele in token: element = ele.split("\t") if element[0] == "EOS": break surface = element[0] if surface in weather_set: weather_score += 1 if surface in navi_set: navi_score += 1 if weather_score > navi_score: print("天気") elif weather_score < navi_score: print("ナビゲーション") else: print("ジャンル判定不能")
$ python3 app.py
ナビゲーション
これ、Yahoo!掲示板で売り煽りが多いか、買い煽りが多いか自動判定したいな。