[英]What's the best way to determine the total number of words of a file in Java?
在Java中查找文本文件中单词总数的最佳方法是什么? 我认为Perl是最好的找到这样的东西。 如果这是真的那么从Java中调用Perl函数将是最好的? 在这样的条件下你会做什么? 有更好的想法吗?
int count = 0;
Scanner sc = new Scanner(new File("my-text-file.txt"));
while (sc.hasNext()) {
++count;
sc.next();
}
恭喜你偶然发现了一个最大的语言问题! 什么是单词? 据说一个词是唯一实际意味着它是什么的词。 整个语言学领域致力于词语/意义单位 - 形态学。
我猜你有问题是用英语计算单词。 但是,由于语言差异,创建一个与语言无关的单词计数器/解析器几乎是不可能的。 例如,人们可能会认为只处理由空格分隔的字符组就足够了。 但是,如果您在日语中查看以下示例,您将看到该方法不起作用:
これは日本语の例文です。
此示例包含3个不同的单词,其中没有一个用空格分隔。 通常,使用基于字典的方法解析日语单词边界,并且有许多商业库可用于此。 我们很幸运有英文空间! 我相信印度语,中文和韩文也有类似的问题。
如果要以任何可能的多语言输入方式实际部署此解决方案,那么根据所解析的语言,能够插入不同的字数统计方法将非常重要。
我认为第一个答案是一个很好的答案,因为它使用Java的Unicode空格值作为分隔符的知识。 它通过使用以下正则表达式进行匹配来标记: \\p{javaWhitespace}+
虽然Perl可以做到这一点,但我认为将它链接在/调用它来完成这种任务是非常难的(除非你已经测试过了)。
如果你在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
, 除非前一个字符是空白字符。 (空格,制表符或换行符。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.