2008-11-10 89 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會做的。

相關問題