給定一組包含中文字符,基於拉丁字母的單詞或兩者混合的行,我希望獲得單詞計數。計算混合語言文檔中的單詞
機智:
this is just an example
這只是個例子
最好應給予10個字;但是,當然,如果沒有字典,最好將其看作兩個獨立的字符。因此,11個字/字符的計數在這裏也是可以接受的結果。
很明顯,wc -w
不會工作。它將6個漢字/ 5個單詞視爲1個單詞,並返回總共6個。
如何繼續?我願意嘗試不同的語言,儘管現在bash和python會是最快的。
給定一組包含中文字符,基於拉丁字母的單詞或兩者混合的行,我希望獲得單詞計數。計算混合語言文檔中的單詞
機智:
this is just an example
這只是個例子
最好應給予10個字;但是,當然,如果沒有字典,最好將其看作兩個獨立的字符。因此,11個字/字符的計數在這裏也是可以接受的結果。
很明顯,wc -w
不會工作。它將6個漢字/ 5個單詞視爲1個單詞,並返回總共6個。
如何繼續?我願意嘗試不同的語言,儘管現在bash和python會是最快的。
我想到了一個快速的黑客,因爲中國的字符是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)兩種語言之間的空間將需要給予正確的計數。
你應該拆分文本Unicode word boundaries,然後計算包含字母或表意文字的元素。例如,如果您使用Python,則可以使用uniseg或nltk包。另一種方法是簡單地使用Unicode-aware regexes,但這些只會在simple word boundaries上突破。另請參閱問題Split unicode string on word boundaries。
請注意,對於某些語言,您需要更復雜的基於字典的解決方案。 UAX#29表示:
對於泰語,老撾語,高棉語,緬甸語和其他通常不使用單詞間空格的腳本,良好的實現不應該依賴於默認的單詞邊界規範。它應該使用更復雜的機制,這也是斷線所需的。日文和中文等表意文字更爲複雜。如果Hangul文本沒有空格,則同樣適用。但是,由於缺乏更爲複雜的機制,本附件中規定的規則提供了明確的默認值。
+1僅適用於unicode單詞邊界。不知道那裏有指導方針。 – icedwater