MeCabの辞書にはてなキーワードを追加する際に地域名(千葉県など)を省くようにする方法
以前,id:code46さんのMeCabの辞書にはてなキーワードを追加しようの記事を見て,ウヒョースゲーと思って入れたのですが,
最近になって,全キーワードを名詞に入れてるとよろしくないなと気付き,
いまちょっとつまづいてる県名などの地域名だけ省けるようにした.
修正するのは,createDict.pyのみです.
# -*- encoding: utf-8 -*- import sys import re import MeCab # MeCabを利用する m = MeCab.Tagger ("-Ochasen") #数字四桁が入ったキーワードは役に立ちませんので検出して飛ばします。 year = re.compile("[0-9]{4}") #驚くべきことにはてなキーワードには%00というキーワードがありますが、 #これがcsvとして提供されているダンプではヌル文字になっているのでシステム制御文字を非許可にします。 ng = [chr(i) for i in range(0,32)] def main(): for x in sys.stdin: if re.search(year,x): continue #日付スキップ k = x.split("\t")[1].strip() if len(k) < 2: continue #一文字スキップ for word in ng: if word in k: continue #システム制御文字スキップ n = m.parseToNode(k) is_area_cnt = 0 all_cnt = 0 while n: features = n.feature.split(',') if features[2] == '地域' or re.match('^(都|道|府|県|市|町|村)$', n.surface): is_area_cnt += 1 all_cnt += 1 n = n.next all_cnt -= 2 # 最初と最後のスペースを省くため if is_area_cnt == all_cnt: continue # 総ての形態素が地域の場合無視 k = k.lower() #MeCabはケースセンシティブなので小文字に統一して辞書作成 cost = int(max(-36000, -400 * len(k)**1.5)) #コストについては後述 print "%s,0,0,%s,名詞,一般,*,*,*,*,%s,*,*,はてなキーワード," % (k,cost,k) #0については後述 if __name__ == '__main__': main()
です!
他はそのまんまid:code46さんの方法でいけると思います.