単語感情極性対応表をjson化したい

Python

 

こちらでダウンロードできる単語感情極性対応表。

標準だとcsvでもなくjsonでもないのでちょっと扱いずらい。

ので、jsonに変換してみる。

 

元データ

優れる:すぐれる:動詞:1
良い:よい:形容詞:0.999995
喜ぶ:よろこぶ:動詞:0.999979
褒める:ほめる:動詞:0.999979
めでたい:めでたい:形容詞:0.999645
賢い:かしこい:形容詞:0.999486

http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic

ワード:読み:品詞:スコア

スコアが大きければポジティブ、少なければネガティブなワード。

この辺は上記のサイトに書いてあるので省略。

 

JSONフォーマットへ変換

キー

jsonにおいて一番重要であるキー。

これを何にするかだが、とりあえず「 ワード 」と「読み」にすることにした。

つまり、

{
  "優れる": {
    "word": "優れる",
    "org": "すぐれる",
    "noun": "動詞",
    "score": 1.0
  },
  "すぐれる": {
    "word": "優れる",
    "org": "すぐれる",
    "noun": "動詞",
    "score": 1.0
  }...

みたいなフォーマットにする。

多分これが一番使いやすいと思う・・・。

 

コード

# coding:utf-8

import json

dic = {}
path = 'pn_ja.dic'
output = 'pn_ja.json'

with open(path) as f:
  for line in f:
    key = line.split(':')[0]
    org = line.split(':')[1]
    noun = line.split(':')[2]
    score = float(line.split(':')[3].replace('\n',''))
    #score = line.split(':')[3].replace('\n','')
    if key == org:
      dic[key] = {'word': key, 'org': org, 'noun': noun, 'score': score}
    else:
      dic[key] = {'word': key, 'org': org, 'noun': noun, 'score': score}
      dic[org] = {'word': key, 'org': org, 'noun': noun, 'score': score}

fw = open(output,'w')
json.dump(dic,fw,indent = 2, ensure_ascii=False)

多分説明するまでもないと思う。

簡単に動作説明すると、1行ずつ読み込んで辞書型配列に格納。

最後にjsonモジュールのdumpでファイルに書き出す、という感じ。

正直関数化することもないと思ったのでべた書き。

ワードと読みが全く同じ場合は重複してしまうので1つしか書かないように除外。

ちなみに、これだと同音異義語が後に出たもので上書きしてしまう。

まあそこはしょうがないと妥協。

コメント

タイトルとURLをコピーしました