Unicode 简化字符串、删除变音符号的通用方法

Unicode 简化字符串、删除变音符号的通用方法,unicode,diacritics,iconv,Unicode,Diacritics,Iconv,我正在寻找一种方法来删除文本中的字母标记和其他字母标记,并以一种非常适合文本搜索索引的方式对其进行简化 为了去除变音符号,我已经找到了以下内容: PHP的问题: Java的问题:,相关: Bash的问题: Net的问题: Javascript的问题: Python的问题: 我想知道一个通用的解决方案,独立于语言。(此外,此参考列表可能对某些人有用。) 删除发音符号对äöüò等有用,但我还想: ø→ o Я→ R Ł→ L ɲ→ n æ→ a(也可以是“ae”,但在我的例子中,“a”更有意义

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

为了去除变音符号,我已经找到了以下内容:

  • PHP的问题:
  • Java的问题:,相关:
  • Bash的问题:
  • Net的问题:
  • Javascript的问题:
  • Python的问题:
我想知道一个通用的解决方案,独立于语言。(此外,此参考列表可能对某些人有用。)

删除发音符号对äöüò等有用,但我还想:

  • ø→ o
  • Я→ R
  • Ł→ L
  • ɲ→ n
  • æ→ a(也可以是“ae”,但在我的例子中,“a”更有意义,因为我也想用“a”代替“ae”)

例如,我想索引名称Røyksopp,它有时也出现在简化名称Royksopp下的Röyksopp。或者KoЯn应该是KoRn。

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

  • 将unicode字符串转换为其规范化的长格式(字母和变音符号使用单独的字符)
  • 删除unicode类型为“diacritic”的所有字符
但这对ø不起作用。

一些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

使用CMDLIN工具UCONV,但同样可以用ICU的java或C++或C++ API完成,ICU几乎对任何语言都有绑定。


注意Я->A,因为这是正确的行为。你想要的不是Unicode如何定义这个字符——责怪KoЯn滥用它。

我刚刚发现:有两个字母:西里尔字母YA(U+044F)和ᴙ '拉丁文字母小写字母倒R'(U+1D19)。也许我应该在我的搜索索引中包含几个变体。仅供参考:
uconv
icu4c
自制软件包中,但必须手动链接到/usr/local/bin()。这不是原始问题,但在包含不带字母的变音符号的输入上,这会失败,如
'
(急性重音)和
(umlaut/diaeresis)@nloveladyallen,嗯,你是对的。幸运的是,只需在最后一个命令中添加-c,这些命令就会完全消失。将编辑答案。。。