4

在Java中查找文本文件中单词总数的最佳方法是什么?我认为 Perl 是寻找此类东西的最佳选择。如果这是真的,那么从 Java 中调用 Perl 函数会是最好的吗?在这种情况下你会怎么做?有更好的想法吗?

4

6 回答 6

16
int count = 0;
Scanner sc = new Scanner(new File("my-text-file.txt")); 
while (sc.hasNext()) {
   ++count;
   sc.next();
}
于 2008-11-10T06:20:21.217 回答
10

恭喜您偶然发现了最大的语言问题之一!什么是词?据说一个词是唯一真正意味着它是什么的词。语言学的整个领域都致力于单词/意义单位——形态学。

我假设您的问题与计算英语单词有关。然而,由于语言差异,创建一个与语言无关的单词计数器/解析器几乎是不可能的。例如,有人可能认为只处理由空格分隔的字符组就足够了。但是,如果您查看以下日语示例,您会发现该方法不起作用:

これは日本语の例文です。</p>

此示例包含 3 个不同的单词,并且没有一个用空格分隔。通常,日语单词边界是使用基于字典的方法解析的,并且有许多商业库可用于此。我们有幸有英文空格吗!我相信印度语、汉语和韩语也有类似的问题。

如果该解决方案实际上要以任何可能的多语言输入方式部署,那么能够根据被解析的语言插入不同的字数统计方法将非常重要。

我认为第一个答案是一个很好的答案,因为它使用 Java 的 Unicode 空白值作为分隔符的知识。它通过使用以下正则表达式进行匹配来标记化:\p{javaWhitespace}+

于 2008-11-10T09:32:43.640 回答
2

虽然 Perl 可以做到这一点,但我认为将它链接到 / 调用它来完成这种任务是过分的(除非你已经测试过了)。

于 2008-11-10T06:01:19.027 回答
1

如果您使用的是 unix,wc -w filename则可以解决问题。

于 2008-11-10T16:59:01.333 回答
0

对“单词”的定义做出一些假设,一种解决方案是使用文本流阅读器打开文件并对其进行扫描,计算非连续空白字符的数量,最后加上一个,例如

 this is some sample text
 this is some more sample text

上面的文本将有 11 个单词,计为 9 个空格和 1 个换行符和 1 个文件结尾

于 2008-11-10T05:58:32.963 回答
-2

我将一个word_countint 初始化为 1,然后循环遍历文件中的每个字符并word_count为每个空白字符递增,除非前一个字符是空白字符。(空格、制表符或换行符。)

于 2008-11-10T05:56:33.187 回答