2012-12-19 52 views
0

在我的應用程序中我有unicode字符串,我需要告訴字符串在哪種語言中,我想通過確定字符串字符在哪個範圍內來縮小可能的語言列表來實現。Unicode字符

範圍,我從http://jrgraphix.net/research/unicode_blocks.php

和可能的語言從http://unicode-table.com/en/

問題都在於算法來檢測所有的語言,沒有人知道的Unicode的更廣泛的範圍映射到語言?

感謝 沃伊切赫

+3

書寫系統!==語言。許多語言共享相同的書寫系統。使用統計分析器,如Tika項目,來檢測語言。 http://tika.apache.org – deceze

+1

你不能可靠地檢測到一種語言,甚至沒有谷歌翻譯可以。最簡單的方法是使用谷歌翻譯api,看看它的文字是什麼語言。自己做這個算法...也許不是那麼容易= D – Esailija

回答

2

這是不是真的有可能,一對夫婦的原因:

  • 許多語言共享相同的書寫系統。例如,看英文和荷蘭文。兩者都使用基本拉丁字母。只看代碼點的範圍,你根本無法區分它們。

  • 有些語言使用更多的字符,但不能保證特定的文本包含它們。例如,德語使用 基本拉丁字母加上「ä」,「ö」,「ü」和「ß」。雖然這些字母 並不特別少見,但您可以在沒有它們的情況下輕鬆創建整個句子 。所以,一個簡短的文字可能不包含它們。因此, 再次單獨查看代碼點是不夠的。

  • 文字並不總是「純」的。英文文本可能包含法文字母 ,因爲法文貸款字(例如「déjàvu」)。或者它可能包含 外國詞,因爲文中談論的是外國事物(例如 「Götterdämmerung是理查德瓦格納的歌劇......」,或者「偉大的中國牆(萬里長城) ......」) 。僅僅看代碼點就會導致誤導性。

總之,不能,你不能可靠地將代碼點範圍映射到語言。

你可以做什麼:計算每個人物在文本中出現的頻率和啓發式比較與已知語言的統計數據。或者分析詞語結構,例如與馬爾可夫鏈。或者搜索詞典中的單詞(考慮到變音,構圖等)。或者這些的組合。

但這很難,很多工作。您應該使用現有的解決方案,例如deceze和Esailija推薦的解決方案。

+0

我意識到我無法檢測到基於unicode字符範圍的確切語言,我想縮小几種語言的可能性列表。 – user1701097

0

我喜歡使用類似谷歌翻譯的建議 - 因爲他們將爲你做所有的工作。

您可能可以構建一個基於規則的系統,使您可以在那裏找到一部分。爲語言構建啓發式規則並查看是否足夠。某些藏文字符確實表示藏語,並且在許多語言中有獨特的字符將被放棄。但正如其他答案指出的那樣,有限的樣本文本可能並不準確,因爲您可能沒有明確的指標。

然而,每種字符出現的頻率會有不同的語言,因此您可以根據字母頻率對每種語言的基本指紋進行分類並進行猜測。這可能比基於規則的系統更進一步。可能是一個很好的工具來建立這將是一個text classification algorithm,這將爲你做所有的分析。您可以使用不同的語言來訓練算法,而不必親自闡述實際的規則。

這個更復雜的版本大概是Google所做的。