通用的方法来简化字符串,删除变音符号

时间:2012-11-24 15:01:45

标签: unicode diacritics iconv

我正在寻找一种方法来删除文本中的diacritics和其他字母标记,并以适合文本搜索索引的方式简化它。

为了删除变音符号,我已经找到了这些:

  • PHP的问题:12
  • Java问题:1,相关:2
  • Bash的问题:1
  • .Net的问题:12
  • Javascript问题:1
  • Python的问题:1

我想知道通用解决方案,语言无关。 (此外,此参考列表可能对某些人有用。)

删除变音符号适用于äöüò等。但我也想要:

  • ø→o
  • Я→R
  • Ł→L
  • ɲ→n
  • æ→a(它也可能是“ae”但在我的情况下,“a”更有意义,因为我也想用“a”代替“ae”)

例如,我想索引名称Røyksopp,有时候也就像Röyksopp一样,简化名称为Royksopp。或者KoЯn应该是KoRn。

2 个答案:

答案 0 :(得分: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如何定义这个角色 - 责怪KoЯn滥用它。

答案 1 :(得分:0)

在特定于Python的问题中,提出了一个通用的解决方案,至少可以删除变音符号:

  • 将unicode字符串转换为长标准化形式(字母和变音符号用单独的字符)
  • 删除unicode类型为“diacritic”的所有字符

但这对ø不起作用。