2008-11-10 42 views

回答

10

恭喜你已经在最大的语言问题之一绊倒!什么是一个词?据说一个词是唯一一个实际上意味着它的词。整个语言学领域专门用于词义/单位意义 - 形态学。

我假设你的问题涉及用英语计算单词。但是,由于语言的差异,创建一个与语言无关的词计数器/解析器几乎是不可能的。例如,有人可能会认为只处理由空格分隔的字符组就足够了。但是,如果你看一下在日本下面的例子中,你会看到,这种办法行不通:

これは日本语の例文です

这个例子包括3个不同的字,其中没有一个是分开的。由空格。通常情况下,日语单词边界使用基于字典的方法进行分析,并且有许多商业库可用于此目的。我们很幸运有英文空间!我相信印度语,中国和韩国也有类似的问题。

如果此解决方案将以多语言输入的任何方式实际部署,根据要解析的语言插入不同的字数统计方法将很重要。

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

+1

请谨慎使用Java中的\ p {javaWhiteSpace},因为它不对应于您可能在Perl中找到的Unicode \ p {Space}属性。两个代码点都包括0009,000A,000B,000C,000D,00A0,2007和202F。Java空白还包括001C,001D,001E,它们不是Unicode空格。 Java空白忽略了几个Unicode空白代码点,其中最令人震惊的是00A0,NO-BREAK SPACE。这让我陷入麻烦之前,所以要非常小心。 – tchrist 2010-10-30 05:44:03

-3

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

0

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

this is some sample text 
this is some more sample text 

上面的文字会在这11个字,算作9位和1个换行符和1结束文件

2

虽然Perl可以做到这一点,我认为这是矫枉过正挂靠在/调用它来完成这种任务(除非你已经测试过了)。

16
int count = 0; 
Scanner sc = new Scanner(new File("my-text-file.txt")); 
while (sc.hasNext()) { 
    ++count; 
    sc.next(); 
} 
1

如果你在unix上,wc -w filename会做的。

相关问题