在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}+