1

あなたが私を助けてくれることを願っています、ここに私の問題があります:

編集: 再考したので、インデックスから用語を削除する方法があれば、とにかく機能します。それを行う方法はありますか?ある場合は、残りの質問を読む必要はありません。ありがとう!

私がやろうとしていることは次のとおりです。 1 - 標準のストップワードを削除しながら、いくつかのファイルにインデックスを付ける必要があります。2 - その後、すべての用語のドキュメント頻度を数え、df < 2 を持つ用語を削除する必要があります

私がやっている方法:

1 - std ストップワードを削除しながら、indexwriter を使用してファイルのインデックスを作成します。2 - すべての用語の df を数え、ストップワード リストに追加します。3 - 次に、indexwriter を使用してテキストを再度インデックス付けしますが、新しいストップワード リストを使用します。

実際に起こっていること:

初めてインデックスを作成すると、計画どおりに進みます。問題は、もう一度インデックスを作成しようとしたときです。結果はかなり予測不能になります。

1) プログラムを 1 回実行すると、ストップワードに新しい単語が含まれていても、std ストップワードのみが削除されます。

2) プログラムをもう一度実行すると、df < 2 の項が削除されます。

1 回目の索引作成後と 2 回目の索引作成後に、索引内の用語を 2 回印刷します。

2 回目に実行すると、最初の印刷では df < 2 の用語が削除されているように見えます (2 回目のインデックス作成時に df < 2 の用語を追加することに注意してください。そうすべきではありません)。最初の印刷では削除されたように見えます。

説明がわかりにくかったかもしれませんが、わからないことがあれば教えてください。

皆さんが私を助けてくれることを願っています。どうもありがとうございました!

4

1 に答える 1

1

ドキュメントに2回目のインデックスを作成するときは、必ずドキュメントの最初のインスタンスを削除してください。そうしないと、すべての用語のdfが膨張します。外部IDフィールドでドキュメントを削除できますTerm。field=idfield&value = externalIdを使用してaを作成しdeleteDocument(Term)、IndexWriterを使用して古いインスタンスを削除します。次に、新しいものを追加します。用語を明示的に削除する方法はないと思います。それらはドキュメントから派生しています。

最適化として、次のことを検討してください。1.すべてのドキュメントにインデックスを付ける2. df = 1のすべての用語を検索する3.外部ドキュメントIDを追跡しながら、そのような用語ごとにすべてのドキュメントを削除する4.用語をストップリストに追加する5.以前に削除されたドキュメントのみのインデックスを再作成します。

もちろん、最初に、これらの用語を削除するためのユースケースについて慎重に検討する必要があります。1.インデックスで発生するかどうかが重要なのはなぜですか?2.後でインデックスを更新し、以前はdf=1であった用語がdf=2になる新しいドキュメントを追加するとどうなりますか。すでにストップリストに含まれているため、その用語でインデックスを作成することはできません。

于 2011-06-01T22:07:36.590 に答える