Javaでテキストファイル内の単語の総数を見つける最良の方法は何ですか? Perl は、このようなものを見つけるのに最適だと思います。これが本当なら、Java 内から Perl 関数を呼び出すのが最善でしょうか? このような状況であなたは何をしたでしょうか?より良いアイデアはありますか?
6 に答える
int count = 0;
Scanner sc = new Scanner(new File("my-text-file.txt"));
while (sc.hasNext()) {
++count;
sc.next();
}
最大の言語問題の 1 つに遭遇したことをお祝いします。言葉とは?単語は、それが何であるかを実際に意味する唯一の単語であると言われています。単語/意味の単位に専念する言語学の全分野 - 形態学があります。
あなたの質問は、英語の単語数の数え方に関するものだと思います。ただし、言語に依存しない単語カウンター/パーサーを作成することは、言語の違いによりほぼ不可能です。たとえば、空白で区切られた文字のグループを処理するだけで十分だと考える人もいるかもしれません。ただし、次の日本語の例を見ると、そのアプローチがうまくいかないことがわかります。
これは日本語の和訳です。</p>
この例には 3 つの異なる単語が含まれており、いずれもスペースで区切られていません。通常、日本語の単語境界は辞書ベースのアプローチを使用して解析され、これに使用できる商用ライブラリが多数あります。英語のスペースがあるのはラッキーですか?インド諸語、中国語、韓国語も同様の問題を抱えていると思います。
このソリューションが、多言語入力が可能な方法で実際に展開される場合、解析される言語に応じて異なる単語カウント方法をプラグインできることが重要になります。
最初の答えは、Java の Unicode 空白値の知識を区切り文字として使用しているため、良い答えだったと思います。次の正規表現を使用して照合することでトークン化します。\p{javaWhitespace}+
Perl はこれを行うことができますが、この種のタスクのためにリンクしたり呼び出したりするのはやり過ぎだと思います (既にテスト済みでない限り)。
UNIX を使用している場合は、wc -w filename
うまくいきます。
「単語」を定義するものについていくつかの仮定を立てると、1 つの解決策は、テキスト ストリーム リーダーを使用してファイルを開き、それをスキャンして、連続していない空白文字の数と末尾の 1 つを数えることです。
this is some sample text
this is some more sample text
上記のテキストには 11 語が含まれ、9 つのスペースと 1 つの改行と 1 つのファイルの終わりとしてカウントされます。
int を 1 に初期化してword_count
から、ファイル内の各文字をループし、前の文字が空白文字でない限りword_count
、空白文字ごとにインクリメントします。(スペース、タブ、または改行。)