2012-11-24 79 views
2

我正在尋找一種方法來刪除文本中的diacritics和其他字母標記,並將其簡化爲適合文本搜索索引的方式。簡化字符串的通用方法,刪除變音符號

爲了去除變音符號,我已經找到了這些:

  • 問題爲PHP:12
  • 問題的Java:1,相關:2爲猛砸
  • 問題:1
  • .Net問題:12
  • Java問題腳本:爲Python 1
  • 問題:1

我想知道一個通​​用的解決方案,與語言無關。 (另外,這個參考列表可能是一些有用的。)

刪除變音符號適用於äöüò等,但我也想:

  • O→Ø
  • Я→[R
  • Ł →L
  • ɲ→ň
  • æ→一個(也有可能是 「AE」 但對我來說, 「一」 更有意義,因爲我也想用 「A」 來取代 「AE」)

例如,我想索引名稱Røyksopp,有時也會以簡化名稱Royksopp作爲Röyksopp出現。或者Kozen應該是KoRn。

回答

3

一些ICU魔法:

echo "ë ö ø Я Ł ɲ æ å ñ 開 당" | uconv -x any-name | perl -wpne 's/ WITH [^}]+//g;' | uconv -x name-any | uconv -x any-latin -t iso-8859-1 -c | uconv -f iso-8859-1 -t ascii -x latin-ascii -c 

產生

e o o A L n ae a n ki dang 

它使用的cmdline工具uconv,但同樣可以用ICU的Java或C或C++ API來完成,而ICU有綁定幾乎任何語言。

注意Я - > A因爲這是正確的行爲。你想要的不是Unicode如何定義這個角色 - 歸咎於Kozen濫用它。

+0

我剛剛發現:有兩個Я:CYRILLIC SMALL LETTER YA(U + 044F)和LA'LATIN LETTER小資本反轉R'(U + 1D19)。也許我應該在我的搜索索引中包含幾個變體。 – Albert

+0

僅供參考:'uconv'位於'icu4c' Homebrew軟件包中,但必須手動鏈接到/ usr/local/bin([source](https://apple.stackexchange.com/questions/201590/uconv-on-mac) -os-x-anywhere)) – nloveladyallen

+0

這不是原來的問題,但是在包含不帶字母的變音符的輸入上失敗,如'''(急性重音)和''(變音/分音) – nloveladyallen

0

在具體Python的問題,有一個通用的解決方案呈現給至少刪除變音符號:

  • Unicode字符串轉換爲它的長歸一化的形式(帶有字母和附加符號的單獨字符)
  • 刪除其unicode的類型是「變音」

這並不適用於直徑工作中的所有字符,但。

相關問題