を使用してファイルにBツリーを書き込み、それは私がドキュメントを読んで、彼らが表示され、どの位置にどの文書で保存することにより、単語や、インデックス、それらを抽出する必要があるということです。当初、私は別のファイルを作成していた各単語に対してインデックスを作成するためにいくつかのドキュメントがありますのpython
。 2つの文書を考えてみましょう:
文書1つの
The Problem of Programming Communication with
文書2
Programming of Arithmetic Operations
だから、8ユニークな10個の言葉があるでしょう。だから私は8つのファイルを作成します。
問題 のiは、それらが現れる文書に格納し、どの位置する各ファイルに 通信 算術演算と
をプログラミングします。私が実装している実際の構造はもっと多くの情報を持っていますが、この基本構造が目的を果たします。
ファイル名のファイルの内容
問題1 2
通信1~5
をプログラミングしますと1
の算術2 3
操作2 4
意味します。単語は第1の文書 - 第3の位置および第2の文書 - 第2の位置に配置される。最初のインデックスが行われた後
私は、単一のインデックスファイルにすべてのファイルを連結し、別のファイルに私は特定の単語が発見される場所のオフセットを格納します。
インデックスファイル:
1 1 1 2 1 3 2 2 1 4 2 1 1 5 1 6 2 3 2 4
ファイルオフセット:だから
the 1 problem 3 of 5 programming 9 communications 13 with 15 arithmetic 17 operations 19
で、15位に(除く)私は、ファイルの後藤13位とは点で最大読み込みますコミュニケーションのインデックス情報が必要な場合言い換えれば、次の単語のオフセット。
これは、静的索引のためのすべての罰金です。しかし、単一のインデックスを変更すると、ファイル全体を書き直す必要があります。私は動的にファイルの内容を変更し、何とかオフセットを更新できるように、私は、インデックスファイルの構造としてBツリーを使用することはできますか?もしそうなら、誰かがこれがどのように機能するか、いくつかのチュートリアルやライブラリに私を導くか、私はこれを実装する方法について少し説明することができますか?
このような長い記事を読んでいただきありがとうございます。
EDIT:私はBツリーとバイナリツリーの違いを認識していませんでした。だから私は元々二分木を使って質問しました。今は修正されています。
sqlite 3とリレーショナルプログラミングをストレージフォーマットとして使用する方がよいでしょうか?私は10年前にプログラミングを始めたときにそれを持っていたことを願っています... – dsign
私はこの1つで2番目のdsignに行きます。これには、軽量リレーショナルデータベースを使用する必要があります。単語の表、ファイルの表、および2つの間のリレーショナル表( 'file_word')を単純に持つことができます。カウントは集計クエリになります。 – syrion