Prolog 二分木検索の使い方

(現在、運用を休止しています)

Prologの二分木化された日本語Wikipediaデータを検索するサイトのURLは、以下のようになります。

http://wiki.ibot.co.jp/

このページは、このブログと同じVPS(私的な仮想サーバー)においていますが、prologの二分技データは巨大なデータ(展開すると26Gバイト)ですので、別の場所に置いてあります。そちらのサーバーが動いているかどうかを事前にチェックしてください(ページの初めにあるチェックボタンをクリックする)。基本、私が自宅で作業している時間に動いています。

「使用できない」と表示された場合、わっしー教授のツイッター @wassiisg に連絡いただければ、稼働時間を調整可能です。

【出力例】 こちら

【使い方】

1. キーワード

キーワードは必須です。

キーワードを与えるとそれに関連した文節ないしは文章が存在すれば、指定最大数の範囲内で二分木をたどって出力します。この二分木については、過去にたくさん記事を書きました。例えばこちら、などを参考にしてください。

キーワードは、単語の名詞(例えば「ロボット」とか「コンビニ」とか)だけを与える場合と、それに接続する助詞を指定して検索させることも可能です。指定した女子が「は」の場合「ロボットは」(左の葉で検索)とか「はロボット」(右の葉で検索する場合)とかを引っ掛けてきます。

助詞は、なくても構いません。

また、キーワードの単語は、形態素解析の単位単語になります。現状では、例えば「経済学」では引っかかりません。なぜなら、形態素解析のjumanが経済学は、「経済」と「学」に分解してしまうからです。「経済」と指定すると、その中に「経済学」も引っ張ってきます。

2. 右葉と左葉

データの二分技は、右の葉と左の葉に名詞や動詞などの語がぶら下がり、それをつなげているノードには、助詞や接続詞が来る構造になっています。検索条件の右の葉と左の葉の意味は、検索対象のキーワードが左の葉にぶら下がっている場合なのか、右の葉にぶら下がっている場合なのかを区別して検索します。

キーワード「ロボット」を「は」の助詞とつなげて検索したとします。「左葉」の場合は、一つの例として、

「wiki_2_line_62217_1: ロボットはボートに4体の演奏人形が乗った/もので宮廷のパーティで池に浮かべて/音楽を演奏したと言われている/」

と言う感じで、基本「ロボットは」となっているデータを拾ってきます。これを「右葉」で検索した場合は、

「wiki_12_line_11352_5: 人造人間はロボット」

のように、「は」がロボットの前についた形で結果を拾ってきます。

文章がどの範囲になるかは、その文章の構造に依存します。関連記事を読んでください。

3. 最大送信数

最大どれだけの数を拾ってくるかを指定します。

4. 使用ファイル

日本語wikipediaの2019年1月のデータをprologの二分木にして使っています。引用や備考などを除いた、純粋本文だけを使っています。元の、xmlファイルを通常テキストに変換したファイルが544ファイルできました。それらを前半(1〜199)、前半(200〜399)、後半(400〜544)に分けて二分木化しています。

この三つのファイルに応じて、prologサーバーを三つ動かしているのですが、最初のものしか動かしていなくても、チェックOKになることもあります。

それらを最初のファイルから順に調べて、指定個数のデータまで出力して終了します。現状では、たくさんある場合、それぞれの後半のファイルは使われないことがあると言うことを意味しています。

ただ、それでも検索は途中でやめないので、一番最後のファイルまで全て調べています。そのため、結果の出力までに少し時間がかかります。

5. 出力の見方

例えば、出力された一つの行が、次のようなものだったとします。

「wiki_2_line_62217_1: ロボットはボートに4体の演奏人形が乗った/もので宮廷のパーティで池に浮かべて/音楽を演奏したと言われている/」

冒頭のwikiは、データの名前です。次の2という数字は、2番のファイルの中に見つけたものだということ。62217は、そのファイルの中の本文パラグラフの番号です。62218番目のバラグラフの中に見つけたと言うこと。最後の1は、そのパラグラフの中の2番目の行だと言うことです(パラグラフ番号と行番号は0番から始まるので)。

本文中の'/'(スラッシュ)は、出力過程でprologの空リスト '[ ]'に出会った時に打たれます。どんな時に空リストが現れるかは、ちょっと説明が複雑になるので省略します。邪魔にはなっていないだろうと思います。