如何从Haskell中的字符串中删除重音?

时间:2017-05-31 16:34:06

标签: haskell

我想要一个从字符串中删除重音的函数。输入/输出示例:

regardé -> regarde
fête    -> fete

1 个答案:

答案 0 :(得分:14)

text-icu库包含各种Unicode实用程序。我们还需要text库才能将String转换为Text。我通过将以下两行添加到我的cabal文件中的build-depends来安装它们:

build-depends:     --- other packages...
                   , text-icu >= 0.7.0.1 && < 1
                   , text

安装了这些依赖项后,我们可以使用以下过程删除重音:

  1. 将输入String转换为Text
  2. 规范化输入(请参阅documentation了解为何需要这样做)
  3. 过滤掉重音
  4. 转换回String
  5. 记住这一切,我们提出以下功能:

    import Data.List
    import qualified Data.Text as T
    import Data.Text.ICU.Char
    import Data.Text.ICU.Normalize
    
    canonicalForm :: String -> String
    canonicalForm s = T.unpack noAccents
      where
        noAccents = T.filter (not . property Diacritic) normalizedText
        normalizedText = normalize NFD (T.pack s)
    

    如果您不需要从String转换,则可以跳过T.packT.unpack来电。