在Java中查找文本文件中单词总数的最佳方法是什么?我认为 Perl 是寻找此类东西的最佳选择。如果这是真的,那么从 Java 中调用 Perl 函数会是最好的吗?在这种情况下你会怎么做?有更好的想法吗?
6 回答
int count = 0;
Scanner sc = new Scanner(new File("my-text-file.txt"));
while (sc.hasNext()) {
++count;
sc.next();
}
恭喜您偶然发现了最大的语言问题之一!什么是词?据说一个词是唯一真正意味着它是什么的词。语言学的整个领域都致力于单词/意义单位——形态学。
我假设您的问题与计算英语单词有关。然而,由于语言差异,创建一个与语言无关的单词计数器/解析器几乎是不可能的。例如,有人可能认为只处理由空格分隔的字符组就足够了。但是,如果您查看以下日语示例,您会发现该方法不起作用:
これは日本语の例文です。</p>
此示例包含 3 个不同的单词,并且没有一个用空格分隔。通常,日语单词边界是使用基于字典的方法解析的,并且有许多商业库可用于此。我们有幸有英文空格吗!我相信印度语、汉语和韩语也有类似的问题。
如果该解决方案实际上要以任何可能的多语言输入方式部署,那么能够根据被解析的语言插入不同的字数统计方法将非常重要。
我认为第一个答案是一个很好的答案,因为它使用 Java 的 Unicode 空白值作为分隔符的知识。它通过使用以下正则表达式进行匹配来标记化:\p{javaWhitespace}+
虽然 Perl 可以做到这一点,但我认为将它链接到 / 调用它来完成这种任务是过分的(除非你已经测试过了)。
- 我的建议是在网络上寻找和学习你需要的代码,例如:http: //schmidt.devlib.org/java/word-count.html
如果您使用的是 unix,wc -w filename
则可以解决问题。
对“单词”的定义做出一些假设,一种解决方案是使用文本流阅读器打开文件并对其进行扫描,计算非连续空白字符的数量,最后加上一个,例如
this is some sample text
this is some more sample text
上面的文本将有 11 个单词,计为 9 个空格和 1 个换行符和 1 个文件结尾
我将一个word_count
int 初始化为 1,然后循环遍历文件中的每个字符并word_count
为每个空白字符递增,除非前一个字符是空白字符。(空格、制表符或换行符。)