軽量なネット用語辞書が欲しかったので, ニコニコ大百科とピクシブ百科事典の共通部分の辞書であるdic-nico-intersection-pixivを作りました
データは現在https://cdn.ncaq.net/dic-nico-intersection-pixiv.txtに置いています. 良ければ使ってください.
google日本語入力の辞書が貧弱なので補完したい
ネット用語を変換する辞書が欲しい. 純狐さんが変換できない. mozcだからダメというわけではなく, google日本語入力も対応できていないものが結構あります. 東方の専門辞書とか, いちいち色々な場所を回って収集するのは面倒くさいし, 更新も面倒です. それに私は記号にこだわりがあって, 全角互換文字は使いたくない. 正規化をしたい.
ニコニコ大百科IME辞書
ニコニコ大百科IME辞書が既に存在します.
しかしこれには問題点があります.
- 読みがなでネタをやっている記事を排除しきれていない
- 膨大な量なので入れるとmozcが滅茶苦茶重くなる
- androidだとメモリが足りない(私のnexus 5のメモリは1GB)ので最悪google日本語入力がクラッシュする
これの登録数は今確認したところ200604らしいですね. およそ20万とは恐れ入りました. ニコニコ用のデータはわざわざ私が作りなおしても無駄なので, ありがたくこれを使わせていただくことにします.
ピクシブ百科事典
ピクシブ百科事典と組み合わせればある程度ネタ読みがなを排除できるのではと考えました. しかし, データも公開してないし読みがなを取得できるjson apiが無いので無理だと思いました.
しかしよく考えてみれば, そもそも量が多いのを排除するのが目的なので, webスクレイピングでも実用的な量が取得できるのではと考えました. ちょうど自分が開発するwebアプリケーションのテストにヘッドレスブラウザが必要だったので, その練習ついでにwebdriverを使うかと考えましたが, この程度のスクレイピングにwebブラウザは必要ありません. curlで十分でした.
記事ページから記事の名前を引くには#article-name
,
読みがなは.subscript
.
ピクシブ百科事典の総記事数はデータが見つからないのでよくわからないが, アニメのカテゴリでは現在56454件らしい. 全部を取得するわけにはいかないし, APIが使えない状況では現実的時間では無理でしょう. そもそも量が多すぎるから減らすのである, 全部で1万件ほど取得できれば十分です.
1万件ほどで良いとは言えど, それは人気のある単語でなければいけません. そういった記事一覧はどこから取得すれば良いでしょうか? カテゴリ別ならば, 記事一覧をちょっとずつ取得できるjson apiが存在するのですが… pixiv本家の人気のタグページは数が少なすぎて使えません.
定番の記事で取得するという方法があります.
これはhttp://dic.pixiv.net/standards?json=1&page=1
にアクセスすれば取得できます.
しかし今回はニコニコ大百科にもある記事データしか使わないのだから, ニコニコ大百科の記事名から直接参照すれば良いのでは. という簡単なことに気が付いたのでこれらは没になりました.
というか, シャワー浴びてたら読みがなデータはニコニコ大百科IME辞書にあるのだから, ピクシブ百科事典から取得する必要はなく, 記事が404かだけ確認すれば良いのではと気が付いてしまいました. ニコニコ大百科IME辞書さまさまですね, 私が色々手を出す必要なんてなかった.
正規化
双方にicuでNFKCをかけてひらがなに変換すれば十分でしょう. ピクシブ百科事典はピクシブのタグが半角に変換されるという仕様上半角を使うことが多いようですし, そもそも漢字が変換できなくて困ってることが多いので, あまり記号類のデータは必要としません.
単語の制限
他にも, いう制限をつけました. 短すぎる読みは変換の邪魔, 長すぎる単語はおふざけの割合が多く, あまり変換したいことが無いので. 基準はとうほうかんじゅでんが10文字であることからです.
まあ本当は, データが多すぎて何時までたっても辞書が生成されないという問題が無ければ, 特に気にせず生成していたのですが… 一度ピクシブ百科事典のサーバがエラーを吐いてきました.
プログラム
というわけでこれを生成プログラムをささっと書きました.
元データが\r\n
だからバグって動かないかと焦ったけどよく考えたら末尾データは全部捨ててるから関係無かった.
ncaq/dic-nico-intersection-pixiv: ニコニコ大百科とピクシブ百科事典の共通部分の辞書
初期時点で45487エントリー. 大幅な減量に成功しました.
問題点
単語の存在を1つ1つピクシブ百科事典に訪ねていくので生成に数時間かかります. やっぱりカテゴリ別に単語の一覧を取得したほうがマシだったかもしれない. 別にカテゴリ別に取得するプログラムが書けないわけじゃないけど, pixivさんが用意すれば数分もかからないのにわざわざ書く気にもならない. ページ一覧ページを用意してくないかなー.
追記
@ncaq っ https://t.co/aTHTVLWEa6
— ぞさみいちか (@tadsan) 2017年3月10日
(僕が作ったわけじゃないから、本当に全記事あるのか保証できないけど)
完全にサイトマップのことを忘れていました… サイトマップに従って全記事名を取得するように書き直します.
書き直しました
dic-nico-intersection-pixivをpixivのサイトマップを使って生成するように変更しました - ncaq