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

Ada*_*mes 9 haskell

我想要一个从字符串中删除重音的功能.输入/输出示例:

regardé -> regarde
fête    -> fete
Run Code Online (Sandbox Code Playgroud)

Ada*_*mes 15

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

build-depends:     --- other packages...
                   , text-icu >= 0.7.0.1 && < 1
                   , text
Run Code Online (Sandbox Code Playgroud)

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

  1. 将输入转换StringText
  2. 规范化输入(请参阅文档以了解为何需要这样做)
  3. 过滤掉重音
  4. 转换回String.

牢记这一切,我们提出以下功能:

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)
Run Code Online (Sandbox Code Playgroud)

如果您不需要转换为a String,则可以跳过T.packT.unpack调用.