2016-11-16 3 views
0

私の実際の要求は、検索フレーズtextToMatchを含むディレクトリ内のすべてのファイルを、4-5秒の最短時間でリストすることです。ファイル数は100000以上になる可能性があります。javaで複数の文書から単語を検索する方法は?

私はコードを必要としませんが、私はこのための最良のアルゴリズムがほしいと思います。

+0

https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithmとhttps://lists.freebsd.org/pipermail/freebsd-current/2010を参照してください。 -August/019310.html –

+0

'grep -l textToMatch * .txt'を使います。 –

+0

検索インデックスを作成せずにこれを達成できるとは思わないでください。 – Henry

答えて

1

すべてのファイルを開く必要があるため、この特定のタスク用のツールビルドも使用できます。 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秒しかかかりません。

+0

「grep」とは何ですか?また、javaで 'grep'を使ってこれを行う方法はありますか私は完全なプログラムですか? –

+0

['grep'](https://en.wikipedia.org/wiki/Grep) –

+0

どのように私はこれをjavaで行うことができます。私はWindowsシステムを使用しています。 –

0

あなたのプログラムは、2つの問題に対処する必要があります。

  1. あなたはすべてのファイル内で必要なフレーズの検索一人ひとりのサブディレクトリと
  2. でそれぞれすべてのファイルの場所。 1については

:あなたがいずれかの繰り返しや再帰的にファイルに指定されたディレクトリを検索またはJava 7または8がFileVisitorまたはApache Commons IOのいずれかを使用することによって、あなたのために仕事をさせることができます。

2の場合:Java Scannerを使用するか、Boyer-Mooreアルゴリズムと呼ばれる、内部ファイルを検索するための非常に高速なアルゴリズムを実装することができます。

関連する問題