ウェブサイトに何千ものページがあり、解析して逆インデックスとして保存しました
資料
- docid (PK、FK)
- URL
- 文字カウント
- 単語数
Charactercount と wordcount は、長いドキュメントと短いドキュメントを区別するのに役立ちます。後で使用する可能性があります。
語
- ワード ID (PK、FK)
- 語
- doc_freq
- inverse_doc_freq
inverse_doc_freq の計算では、架空の高い数値 (100000000) を使用して、ドキュメント全体の再計算を防ぎます。
ロック
- ワードID
- ドシッド
- 単語頻度
- 重さ
(wordid と docid を組み合わせた一意)
重みは、タイトルの単語 + URL の単語 + 単語の頻度などの単純な基準で計算されたスコアです。
検索語に対する SQL クエリのフレーミングに問題があります。3単語検索の場合、私は次のようにしています
- クエリを各単語に分割する
- 各単語の inverse_doc_freq を確認し、IDF の低い単語を削除します (ストップ ワードの削除)
- 残りの単語を語幹化します (まだ 3 つの単語が残っていると仮定します)
- 各単語のクエリ
私が行き詰まっているのはステージ4です!私のSQLクエリは次のようなものです
SELECT d.docid,url,inverse_doc_freq,word_freq,weight from document d,word w,loc l WHERE d.docid=l.docid AND w.wordid=l.wordid AND (word='word1' OR word='word2' OR word='word3') ORDER BY weight DESC
ただし、返されたドキュメントは正しくありません。各単語のドキュメントを見つけるために 3 回検索してから、共通のドキュメントを見つけようとする必要があるかもしれませんが、どうすればよいでしょうか? 1 つの MySQL クエリのみを使用することは可能ですか? また、TF-IDFはどのように使用できますか?