大量のドキュメントから取り出したユニグラム (1 つの単語)、バイグラム (2 つの単語)、およびトライグラム (3 つの単語) のリストがあります。私の目標は、レポートを静的に分析することと、これらのドキュメントで使用できる検索を行うことです。
John Doe
Xeon 5668x
corporate tax rates
beach
tax plan
Porta San Giovanni
ngram は、日付とドキュメントによってタグ付けされます。たとえば、バイグラム間の関係と、それらのフレーズが最初に出現した時期、およびドキュメント間の関係を見つけることができます。これらの X 個の un/bi/trigram フレーズを含むドキュメントも検索できます。
したがって、私の質問は、これらの検索を最適化するためにそれらを保存する方法です。
最も単純なアプローチは、フレーズごとに単純な文字列列を作成し、ドキュメント内でその単語/フレーズを見つけるたびに document_ngram テーブルにリレーションを追加することです。
table document
{
id
text
date
}
table ngram
{
id
ngram varchar(200);
}
table document_ngram
{
id
ngram_id
document_id
date
}
ただし、これは、トリグラムを検索して単一の単語を検索する場合、文字列検索を使用する必要があることを意味します。たとえば、「夏」という単語を含むすべてのトライグラムが必要だとしましょう。
したがって、ngram に格納されるのは 1 つの単語だけになるように単語を分割し、1、2、および 3 つの単語チェーンがすべて収まるように 3 つの列を追加すると、document_ngram
?
table document_ngram
{
id
word1_id NOT NULL
word2_id DEFAULT NULL
word3_id DEFAULT NULL
document_id
date
}
これは正しい方法ですか?彼らのより良い方法はありますか?私は現在 PostgreSQL と MySQL を使用していますが、これは一般的な SQL の質問だと思います。