2014-11-01 46 views
3

此問題涉及在索引中存儲本地名稱的國際字符規範化。我想一般性地討論這個問題,並且還會聽說Java中可能存在的解決方案(類/庫)。如何準備用於建立索引的Unicode字符串?


在全球的應用程序,用戶輸入他們的名字和應用程序寫入每個名稱到搜索索引,以便其他用戶可以搜索名稱和找到用戶。英文瑣碎,但在許多其他語言和/或全球範圍內並不那麼微不足道,因爲特定字母需要音譯和/或可以以多種形式書寫。例如,德國的名豪斯勒可以寫成

  • 豪斯勒(德國)
  • Haeussler(德國,國際音譯)
  • 豪斯勒(瑞士)
  • 豪斯勒(英文音譯)

Java擁有

Normalizer.normalize(entry, Normalizer.Form.NFD) // NFC 

類,但這似乎不適用於許多情況和/或我不知道如何正確使用它。良好的閱讀也在這裏http://en.wikipedia.org/wiki/Unicode_equivalence但我找不到關於此主題的足夠的捆綁信息。

有人知道現有的開源項目,有人已經在這個問題上工作過嗎?任何可以使用的圖書館?網站?

你是如何將日文,中文,阿拉伯等音譯成英文的?像Facebook這樣的大型社交網絡如何音譯用戶名以確保其可以在國際上找到?

+0

非常有趣的問題...我記得已經研究了另一個SO問題的標準化問題,目標是去除重音符號(我使用'Normalizer'分解後使用正則表達式)。然而,在國際上,即使是Unicode也不適合這個法案,我想......不知道這是否存在,但可能是一個將文本「翻譯」爲[IPA]的庫(http://en.wikipedia.org/wiki/IPA)? – fge 2014-11-01 02:39:05

+0

另外:標題中的「Unicode字符串」是一種冗餘;儘管'char'實際上是一個UTF-16編碼單元(這就是爲什麼在BMP之外的代碼點需要兩個'char's)的時候,Java確實會使用Unicode,原因是當Java誕生時,Unicode只定義了現在已知的BMP) – fge 2014-11-01 02:43:37

回答

1

您現在處於正確的軌道 - 您可能希望添加的一個搜索詞是「規範」。

我相信ICU project是處理這個問題的最強大的開源軟件。特別關注normalization components,特別是NFKC_Casefold的實現,它處理德國ß示例等等。

+0

謝謝,ICU是一個非常有趣的提示,我會研究這個並回來。 – 2014-11-01 03:39:49