Wikipedia Prologの再構成とデータベース登録

5月ごろに、それまでのwikipedia prologのフォーマット上の問題が見つかって、その訂正を一旦保留していたが、先週から数日かけて、全て作り直した。

prolog宣言文の数は、17,843,495個あり544個のファイルに分割されている。データサイズは合計11.3Gバイトだ。

前にも書いたが、たとえば、いくつかのキーワードを持った宣言文をprologで拾い出そうとすると、一つのファイルの1秒かかる。使えない。そこで、一つ一つの宣言文が含むキーワード(名詞や動詞句など、二分木の葉になっているもの)を宣言文のIDとともにデータベース(mariadb)に登録した。そうすると、intersectコマンドを使って、キーワードを同時に持つ宣言文を拾い出せる。

マルチスレッドを利用することを前提に、mariadbのテーブルを25個に分けた。25個のスレッド(java)で、たとえば人間とロボットというキーワードを持つ宣言文を検索させると1秒以下で、すべてのwikipedia本文から、700余の文章(宣言文のID)を拾い出す。凄まじい速さだ。データベースの凄さだ。(indexを張っておかないといけない)

同時に持った宣言文のIDを拾いだしたら、その宣言文自体が欲しい。そこで、宣言文IDと宣言文そのものを、これまた25個のテーブルにデータベース化した。

そこで、人間とロボットというキーワードを持つ宣言文IDを検索し、それを元に宣言文そのものを取り出すためにかかった時間は、1.7秒だ。宣言文IDをつかって、ベタのファイルからその宣言文を取り出そうとすると、これほど高速にはならない。1.7秒は使える範囲だ。

だいぶ環境は整ってきた。