2013-11-26 21 views
2

給定一組包含中文字符,基於拉丁字母的單詞或兩者混合的行,我希望獲得單詞計數。計算混合語言文檔中的單詞

機智:

this is just an example 
這只是個例子 

最好應給予10個字;但是,當然,如果沒有字典,最好將其看作兩個獨立的字符。因此,11個字/字符的計數在這裏也是可以接受的結果。

很明顯,wc -w不會工作。它將6個漢字/ 5個單詞視爲1個單詞,並返回總共6個。

如何繼續?我願意嘗試不同的語言,儘管現在bash和python會是最快的。

回答

0

我想到了一個快速的黑客,因爲中國的字符是3個字節的UTF8:

(僞)

for each character: 
    if character (byte) begins with 1: 
     add 1 to total chinese chars 
    if it is a space: 
     add 1 to total "normal" words 
    if it is a newline: 
     break 

然後採取total chinese chars/3 + total words獲得每條線的總和。這會給混合語言的錯誤計數,但應該是一個好的開始。

這是test 

然而,上面的語句將總共得到2(每​​箇中國漢字的1)兩種語言之間的空間將需要給予正確的計數。

3

你應該拆分文本Unicode word boundaries,然後計算包含字母或表意文字的元素。例如,如果您使用Python,則可以使用unisegnltk包。另一種方法是簡單地使用Unicode-aware regexes,但這些只會在simple word boundaries上突破。另請參閱問題Split unicode string on word boundaries

請注意,對於某些語言,您需要更復雜的基於字典的解決方案。 UAX#29表示:

對於泰語,老撾語,高棉語,緬甸語和其他通常不使用單詞間空格的腳本,良好的實現不應該依賴於默認的單詞邊界規範。它應該使用更復雜的機制,這也是斷線所需的。日文和中文等表意文字更爲複雜。如果Hangul文本沒有空格,則同樣適用。但是,由於缺乏更爲複雜的機制,本附件中規定的規則提供了明確的默認值。

+0

+1僅適用於unicode單詞邊界。不知道那裏有指導方針。 – icedwater