wikipediaから、「よみがな」と「類義」、「英語の読み」とかを取得するプログラムを作りました。(辞書データもあるよ)
wikipediaのデータから、「よみがな」と「類義」、「英語の読み」、「キャラの読み」、「カテゴリ一覧」を取得するプログラムを作りました。(誰も作ってくれないし、案件流れて暇なので。。。)
ご自由にお使いください。(NYSL)
「よみがな」は、漢字混じりのページ名から、ページ内に書かれているよみがなを何とかして特定します。
「類義」は、リダイレクトや曖昧さの解決と、ページ内の項目とか本文から、なんとかして類義と思われるものを特定します。
「英語の読み」は、全部カタカナのタイトルから単語、全部英単語のタイトルから読みをなんとかして特定して表示します。日本人好みの読みができます。(例:こーふぃー、じゃなくてコーヒー)
「キャラの読み」は、架空のキャラクターのよみがなです。wikipediaだとページ内に埋もれているので掘り起こします。(高町なのは->たかまちなのは)
「カテゴリ一覧」は、ページにあるカテゴリだけを並べて表記します。
ソースコード
ご自由にお使いください(ライセンス:NYSL)。
ひたすら地道にパースしてます。
開発環境 windows7 64bit VS2010 (Linuxでも動きます。)
https://github.com/rti7743/wiki2dic
データフォーマット
みんな大好きtsvフォーマットです。
文字コードは、windowsならばディフォルトのSJISになります。
Linux環境ならばディフォルトのUTF-8になります。
yomiの場合
読み[TAB]タイトル 読み[TAB]タイトル 読み[TAB]タイトル
フジコフジオエー 藤子不二雄A フジコエフフジオ 藤子・F・不二雄 ダイガクイン 大学院 エジソン エジソン トーマスエジソン トーマス・エジソン ホンゴウカマト 本郷かまと ス 酢 ディープパープル ディープ・パープル レッドツェッペリン レッド・ツェッペリン フリー フリー クリーム クリーム ローリングストーンズ ローリング・ストーンズ レキシテキシリア 歴史的シリア ヨシオカミホ 吉岡美穂 マイケルファラデー マイケル・ファラデー クラシック クラシック セルシウスド セルシウス度 ナイター ナイター シュウキョウトカガク 宗教と科学
タイトルのよみがなを取得します。
左側がよみがなで、右側がタイトルです。
結構うまく動作していると思います。
ruigiの場合
タイトル[TAB]類義1[TAB]...類義N タイトル[TAB]類義1[TAB]...類義N タイトル[TAB]類義1[TAB]...類義N
動物命名法国際審議会 ICZN 三本杭 滑床山 滑床渓谷 VOICE MAGICIAN ヴォイス・マジシャン CAPTAIN HEDGE HOG キャプヘジ キャプテン・ヘッジ・ホッグ 石井豪 ごうさん 1415 FCシャフチョール・カラガンダ Miners'' ''Moles シャフタール 両関酒造 両関 上坂すみれ すみぺ 軍団長 スミーニャ ウゲッチ フットサル日本女子代表 なでしこ5 坂上村 坂上 南昌鉄路局 南局 シーダーラピッズ 5つの季節の都市 鎌倉三十三観音霊場 鎌倉三十三箇所 ガーデン・ステイト公園道路 ガーデン
タイトルとの類義語を出します。
一番左がタイトルで、以降が類義語っぽい項目です。
精度は、まだ微妙です。
たまに連想語、関連語辞書となっているところがあります。
出力時に、曖昧さの解決を消しています。そのために同じ名前なのが何個かあります。
engの場合
読み[TAB]単語 読み[TAB]単語 読み[TAB]単語
オープンビーエスディー OpenBSD コムソート comb sort デスラー Desler トリビアルファイルトランスファープロトコル Trivial File Transfer Protocol モナーフォント Mona Font パスカル Pascal オブジェクト Object トル torr リスト list ブートストラッププロトコル Bootstrap Protocol ゾフィー Zoffy ページランク PageRank アドビシステムズ Adobe Systems アンドリューカーネギー Andrew Carnegie リーフ Leaf アドビフォトショップ Adobe Photoshop アドビイラストレーター Adobe Illustrator オンドマルトノ Ondes Martenot ナノメートル nanometre モスク Mosque
wikipediaのページから英語の日本人好みのよみがなをとります。(こぉっふぃーじゃなくて、コーヒーのように。)
左側がよみがなで、右が英単語です。
そこそこ読めていると思います。
出力時に、曖昧さの解決を消しています。そのために同じ名前なのが何個かあります。
charaの場合
読み[TAB]キャラ名[TAB]wikipediaのページ名[TAB]役者1[TAB]役者2[TAB]役者3 読み[TAB]キャラ名[TAB]wikipediaのページ名[TAB]役者1[TAB]役者2[TAB]役者3 読み[TAB]キャラ名[TAB]wikipediaのページ名[TAB]役者1[TAB]役者2[TAB]役者3
タカヤマハルカ 高山春香 桜Trick 戸松遥 ソノダユウ 園田優 桜Trick 井口裕香 ノダコトネ 野田コトネ 桜Trick 相坂優歌 ミナミシズク 南しずく 桜Trick 五十嵐裕美 イケノカエデ 池野楓 桜Trick 渕上舞 イイヅカユズ 飯塚ゆず 桜Trick 戸田めぐみ サカイリナ 坂井理奈 桜Trick 遠藤ゆりか オトカワスミ 乙川澄 桜Trick 麻倉もも ニコラテスラ ニコラ・テスラ 黄雷のガクトゥーン 古河徹人 ネオンスカラスミリヤ ネオン・スカラ・スミリヤ 黄雷のガクトゥーン 一色ヒカル ヴァルターリッツ 閃光 黄雷のガクトゥーン ますおかゆうじ ベルタモリヴィーゲルト ベルタ・モリ・ヴィーゲルト 黄雷のガクトゥーン 杉原茉莉 エミリーデュシャトレ エミリー・デュ・シャトレ 黄雷のガクトゥーン かわしまりの ジョセフィンマーチ ジョセフィン・マーチ 黄雷のガクトゥーン 野月まひる フロレンスアメギノナイチンゲール フロレンス・アメギノ・ナイチンゲール 黄雷のガクトゥーン 桜川未央 ウィルヘルムライヒ ウィルヘルム・ライヒ 黄雷のガクトゥーン 山本兼平 イズミ イズミ 黄雷のガクトゥーン 柚木サチ
wikipediaのなかに埋没しているキャラクターの情報から、よみがなを取ります。
左側がよみがな、次に、キャラクター名、ページタイトル、役者1、役者2、役者3となります。
役者とは、俳優や声優の情報です。
それっぽいものを見つけたら順番に追記していきます。
なぜ、3つもあるのかというと、アニメ版と実写版だったり、幼少期を別の人がやっていたり、海外ドラマの吹き替えなどがあるためです。
精度はそこそこ読めていると思います。ただ、役者情報についてはたまに間違っているのもあります。なるべく努力はしていますが、、、難しいところです。
categoryの場合
wikipediaのページ名[TAB]カテゴリ1...カテゴリN wikipediaのページ名[TAB]カテゴリ1...カテゴリN wikipediaのページ名[TAB]カテゴリ1...カテゴリN wikipediaのページ名[TAB]カテゴリ1...カテゴリN wikipediaのページ名[TAB]カテゴリ1...カテゴリN wikipediaのページ名[TAB]カテゴリ1...カテゴリN wikipediaのページ名[TAB]カテゴリ1...カテゴリN
松島松太郎 日本共産党の人物 東京都出身の人物 日本の国政選挙の立候補経験者 1915年生 2001年没 日本銀行の人物 日本の政治運動家 桜Trick 漫画作品 まんがタイムきらら 4コマ漫画 高等学校を舞台とした漫画作品 LGBT作品 アニメ作品 2014年のテレビアニメ TBSの深夜アニメ スタジオディーン ポニーキャニオンのアニメ作品 4コマ漫画原作アニメ 芳文社の漫画を原作とするアニメ作品 高等学校を舞台としたアニメ作品 テレビアニメ連動データ放送 継続中の作品 信川虐殺事件 朝鮮戦争 黄海南道 歴史認識問題 朝鮮による大量虐殺 1950年の朝鮮民主主義人民共和国 ガレット郡 メリーランド州の郡 ガレット郡 安藤太郎 江戸幕府幕臣 幕府陸軍の人物 幕府海軍の人物 戦前日本の外交官 戦前日本の農林官僚 日本のプロテスタントの信者 日本の社会運動家 通訳
ページに付けられたカテゴリタグを列挙します。
一番左がタイトルで、以降がページに付けられているカテゴリです。
単純なルーチンなので、ただありのままを出しています。
データ数
有効ページ総数:848,901件
ノートとかCategory、リダイレクト、曖昧さの解決等の内部ページを消した実質的な有効件数です。
読みが取れたページ:767,200件
よって、90%のページから読みが取れました。
類義:138,636件
よって、16%のページから類義語っぽいものが取れました。
すべてのページの項目に類義や略語があるわけじゃいですからね。
英語の読み:137,365件
こちらも同じくすべてのページが英語の読みではないためです。
読みが取れたキャラクター:288,836件
読みの是非に関係なくキャラクター総数:397,730件
よって、72%のキャラクターの読みが取れました。
遊び方
1.データのダウンロード
wikipediaからjawiki-latest-pages-metaをダウンロードしてきます。
↓wikipediaの公式サイトから jawiki-latest-pages-meta-current.xml.bz2 をダウンロードします。
http://dumps.wikimedia.org/jawiki/latest/
(ファイルは2GB、解凍すると16GBほどあります。)
2.プログラムをビルドします。
Windowsで、VS2010以降のC++11が使えるコンパイラ入れて、ビルドしてwiki2dic.exe を作ります。
or
Linux入れてC++11が使える環境を作って、 make して wiki2dic を作ります。
3.プログラムを実行して辞書を作ります。
読みがほしい時 (標準出力に出るので 適当にリダイレクトしてください) wiki2dic.exe yomi jawiki-latest-pages-meta.xml >_yomi.txt 類義がほしい時 (標準出力に出るので 適当にリダイレクトしてください。 前処理中にデバッグstderr出力がでます。) wiki2dic.exe ruigi jawiki-latest-pages-meta.xml >_ruigi.txt 英語の読み方リストを作りたいとき(標準出力に出るので 適当にリダイレクトしてください) wiki2dic.exe eng jawiki-latest-pages-meta.xml >_eng.txt キャラの読み(標準出力に出るので 適当にリダイレクトしてください) wiki2dic.chara chara jawiki-latest-pages-meta.xml >_chara.txt カテゴリ一覧(標準出力に出るので 適当にリダイレクトしてください) wiki2dic.chara category jawiki-latest-pages-meta.xml >_category.txt
よみがなを取れないのがほしいとか、そういうのは、オプションでなんとかできるので、usage を御覧ください。
ビルドするとかめんどい
こちらに 2014/10/10 のデータで作成したものがあります。
http://rtilabs.rti-giken.jp/files/2014_10_29/wiki/
データのライセンスは、データ元のwikipediaの利用規約(GFDLとクエイティブ・コモンズ(CC-BY-SA)のデュアル)に準じます。
詳しくは、ズィン某にでも聞いてね。
おまけ
英語の発音辞書の cmudictから読みを取得するルーチンがおまけにあります。
ただ、日本人好みの英語の読み(taxiたっくすぃ、じゃなくてタクシー)にするのは結構大変です。
まだまだ誤読が多いです。
wiki2dic.exe cmudict cmudict.0.7a > _cmudict
インターロック @INTERLOCK IH2 N T ER0 L AA1 K インターロックド @INTERLOCKED IH2 N T ER0 L AA1 K D インターロッキング @INTERLOCKING IH1 N T ER0 L AA2 K IH0 NG インターロッキュター @INTERLOCUTOR IH2 N T ER0 L AA1 K Y AH0 T ER0 インターロッキュターズ @INTERLOCUTORS IH2 N T ER0 L AA1 K Y AH0 T ER0 Z インターローパー @INTERLOPER IH1 N T ER0 L OW2 P ER0 インターローパーズ @INTERLOPERS IH1 N T ER0 L OW2 P ER0 Z インターリュード @INTERLUDE IH1 N T ER0 L UW2 D インターリュードズ @INTERLUDES IH1 N T ER0 L UW2 D Z インターマグネッティク @INTERMAGNETIC IH2 N T ER0 M AE0 G N EH1 T IH0 K インターマグネッティクス @INTERMAGNETICS IH2 N T ER0 M AE0 G N EH1 T IH0 K S
精度は、一部ではそこそこですが全体的に見ると、まだアホです。
面白い誤読をしてくれるので見てて楽しいです。
cmudict本体は公式から追加ダウンロードしてね。
http://www.speech.cs.cmu.edu/cgi-bin/cmudict
↓にある cmudict.0.7a というファイルです。
http://svn.code.sf.net/p/cmusphinx/code/trunk/cmudict/
cmudictのデータから生成するのが面倒な人のために、こちらに生成済みのデータがあります。
cmudictのライセンスと同様のもので利用してください。
http://rtilabs.rti-giken.jp/files/2014_10_29/cmudict/
バグを見つけた場合
@super_rti まで修正パッチと一緒に連絡ください。
メールでもいいのよ( rti@rti-giken.jp ) 。
どんなにやっても、100%確実に正しいのを作るのは結構大変です。
多少の間違いは妥協しましょう。
データはTSV形式なので、お手持ちのツールで加工してください。
usage
wikipedia to dic 2014 rti --usage-- wiki2dic yomi|ruigi|eng|chara|category filename [option] Ex. wiki2dic yomi jawiki-latest-pages.xml 読みを取得します。 出力形式は、 読み[TAB]タイトル[ENTER] です。 wiki2dic ruigi jawiki-latest-pages.xml 類義語を取得します。 出力形式は、 タイトル[TAB]類義...[ENTER] です。 wiki2dic eng jawiki-latest-pages.xml wikipediaの読みと英語単語から、英単語の日本語読みを取ります。 出力形式は、 読み[TAB]単語[ENTER] です。 wiki2dic chara jawiki-latest-pages.xml wikipediaから架空のキャラクターたちの読みを取得します。 出力形式は、 読み[TAB]キャラ名[TAB]タイトル[TAB]役者1[TAB]役者2[TAB]役者3[ENTER] です。 wiki2dic category jawiki-latest-pages.xml wikipediaからページのカテゴリータグだけを抜き出して列挙します。 出力形式は、 タイトル[TAB]カテゴリ...[ENTER] です。 --wikipediaデータ-- http://dumps.wikimedia.org/jawiki/latest/ から jawiki-latest-pages-meta-current.xml.bz2 をDLして展開すること --option-- --case よみがな文字列の変換 --case=kata [ディフォルト]カタカナに変換して出力 --case=kana ひらがなに変換して出力 --case=none 何もしない。取れたままを出力 --show 表示項目 --show=noempty [ディフォルト]読めたものだけ表示する --show=all 全部表示する --show=empty 読めたものだけ表示する --aimai 曖昧さの解決の() --aimai=del [ディフォルト]消す --aimai=keep 消さない --おまけ--(試験的なルーチンです) wiki2dic cmudict cmudict.0.7a 英語の発音辞書から強引に日本語読みに変換します。 出力形式は、 読み[TAB]タイトル[ENTER] です。 --cmudictデータ-- http://svn.code.sf.net/p/cmusphinx/code/trunk/cmudict/ から cmudict.0.7a をDLすること
アルゴリズム
すべてのアルゴリズムは、ページ内の文章をひたすら地道にパースしています。
wikipediaはフォーマットが全く全然これっぽっちも規格化されていないので、ひたすら力押しに解決しています。とても泥臭いことをやっています。
数学とかは難しいのでまったくでてきません。正規表現もないです。
ただ文字との戦いだけです。
あらゆるパティーンを想定したプログラムを作って、一番うまく出来たのを採用する、そんなパターンマッチみたいなことを延々とやっています。
100%は目指すと時間の無駄なので、8割取れるのを目指しています。
yomi
wikipediaの読みフォーマットは、整備されていません。結構表記の揺れがあります。
それをなんとかして解析してそれっぽいのを取ってきています。
冒頭の {{Infobox または、 {{ 内とかその他いろいろに 読みっぽいカラムがあれば取得する。 (例: | よみがな = やまだたろう)
本文のタイトル表記のあとに(読み)ってぽいのが書かれていたら取得する。(例: 山田太郎(やまだたろう) )
省略表記があれば、がんばって結合する。(例: やまだ太郎(-たろう) 山田たろう(やまだ-) )
作者の名前表記が揺れた場合もそこを何とかして追跡する。
詳しくはソースコードを参照してください。
ruigi
2段階処理をします。
1段階目は、リダイレクト転送と、曖昧さ解決をすべて記録します。
2段階目に、ページ内から愛称とかの類を引っ張って、1段階目の奴とマージして、表示します。
愛称や略称もまったく規格化されていないので、 {{Infobox とか、ページ本文とかを使い、なんとかして取ってきます。
ひたすら地道にやっています。
誤爆をいかに避けながら、それっぽいのを拾うかです。
ソースコードを見ばわかりますが、一番苦労しているルーチンです。
略称を指していそうな文章をあたりをつけて、前と後ろから、それっぽい所を切り取っています。係り受け解析などありませんので、そこは気合でカバーします。
eng
yomiのアルゴリズムに近いです。
カタカナだけのタイトルのページを見て、そこから英単語っぽいのを拾います。
逆に英単語だけのページを見て、そこから読みを取ります。
誤爆をさせるために、先頭バイトのチェックのアルファベットの確認とか、いろいろがんばってます。
英単語を書くときのフォーマットも、まったくぜんぜん統一されていませんので、lang:、 英語、英、その他いろいろなどありとあらゆるパターンを試して、誤爆チェックルーチンで評価して、一番よさ気なものを採用しています。
ソースコードをみればいいけど、wikipediaの規格のゆるさに加え、ロシア語やスペイン語との誤爆、win/linuxのUTF16<->マルチバイト変換ライブラリのスペイン語変換ミス、和製英語に英語ではない舶来品(珈琲とか)などと、さまざまな地雷を全力で踏みながら、前に進んでいます。
chara
wikipediaは、キャラ名の項目は最悪です。
有名な架空のキャラクターは専門のページが作られますが、それ以外は、XXXの登場人物などのページにまとめられたり、作品のページに登場人物の紹介として書いてあったりします。
また、その書き方にしても、フォーマットが統一されていません。
気合と根性で掘り起こしています。
データが有るだけマシだと思うしか無いですね。
(例えば、主題歌とかはデータはあれどよみがなが全然降られていないので、よみがなが多少は降られている登場人物のほうがまだましだといえるでしょう。データフォーマットは統一されていませんが。実にもったいないところです。)
ソースコードをみれば、わかるかもしれませんが、登場人物を書くフォーマットは、; で書く普通のパティーン、 === キャラ名 === (===*3から===*5まであり)で書く愛が深いパティーン、||でテーブルレイアウトするDeep Loveパティーン、 * で箇条書きするお気軽パティーン、 ;で箇条書きするひねくれ者パティーン、それ以外イミワカンナイにわかれます。
また、キャラ専用のページがなぜか許されているパティーンもあります。wikipediaはよくわかりませんね。
ただ、データ量だけみれば日本最大ですので、規格化されていないのが実にもったいないところです。
category
ページ内に有るカテゴリー表記を横に並べているだけです。それだけです。特に何もやっていません。
デバッグ中に暇だったので余興で作りました。
ソースコードもすっかすかです。
ただし、無意味なカテゴリは変換しています。"建築物 あ行" -> "建築物"などとまとめています。
cmudict
変換テーブル王に俺はなる。(ソースコード)
FAQ
遅すぎてもう耐えられない。
基本的にディスクとCPU性能に依存します。
SSDを載せましょう。それが終わったら早いCPUを載せましょう。
それでもダメなら風呂入って寝ましょう。朝には終わってます。
一言
アンサイクロペディアもふりがなふれよ。厨二ぽい二つ名を。