私の実際の要求は、検索フレーズtextToMatch
を含むディレクトリ内のすべてのファイルを、4-5
秒の最短時間でリストすることです。ファイル数は100000
以上になる可能性があります。javaで複数の文書から単語を検索する方法は?
私はコードを必要としませんが、私はこのための最良のアルゴリズムがほしいと思います。
私の実際の要求は、検索フレーズtextToMatch
を含むディレクトリ内のすべてのファイルを、4-5
秒の最短時間でリストすることです。ファイル数は100000
以上になる可能性があります。javaで複数の文書から単語を検索する方法は?
私はコードを必要としませんが、私はこのための最良のアルゴリズムがほしいと思います。
すべてのファイルを開く必要があるため、この特定のタスク用のツールビルドも使用できます。 grep
を使用してください:
私たちは100000個のファイルを見ます。
% ls -l *.txt | wc -l
100000
これらは、Vestibulum
を含む。
% grep Vestibulum 1.txt
Aenean commodo ultrices imperdiet. Vestibulum ut justo vel sapien venenatis tincidunt.
euismod ultrices facilisis. Vestibulum porta sapien adipiscing augue congue id pretium lectus
Vestibulum
を含むファイルを数えます。
% time grep -l Vestibulum *.txt | wc -l
100000
grep --color=auto -l Vestibulum *.txt 0,28s user 0,25s system 99% cpu 0,537 total
wc -l 0,00s user 0,01s system 1% cpu 0,537 total
ご覧のとおり、これは私のマシンでは1秒しかかかりません。
「grep」とは何ですか?また、javaで 'grep'を使ってこれを行う方法はありますか私は完全なプログラムですか? –
['grep'](https://en.wikipedia.org/wiki/Grep) –
どのように私はこれをjavaで行うことができます。私はWindowsシステムを使用しています。 –
あなたのプログラムは、2つの問題に対処する必要があります。
:あなたがいずれかの繰り返しや再帰的にファイルに指定されたディレクトリを検索またはJava 7または8がFileVisitorまたはApache Commons IOのいずれかを使用することによって、あなたのために仕事をさせることができます。
2の場合:Java Scannerを使用するか、Boyer-Mooreアルゴリズムと呼ばれる、内部ファイルを検索するための非常に高速なアルゴリズムを実装することができます。
https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithmとhttps://lists.freebsd.org/pipermail/freebsd-current/2010を参照してください。 -August/019310.html –
'grep -l textToMatch * .txt'を使います。 –
検索インデックスを作成せずにこれを達成できるとは思わないでください。 – Henry