代码之家  ›  专栏  ›  技术社区  ›  Nils Pipenbrinck

用于文本规范化的Java库[关闭]

  •  10
  • Nils Pipenbrinck  · 技术社区  · 6 年前

    我正在寻找允许文本“规范化”的java库。类似标准的东西 Normalizer ,但更宽(像 utf8proc 肿块)。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Steven R. Loomis    15 年前

    你应该看看 Latin-ASCII CLDR . 会在里面的 ICU 4.6

        2
  •  4
  •   Community Mohan Dere    8 年前

    你的具体要求有点含糊,但我想你想要的是 Normalizer 是的,但具有将某些Unicode代码集中到一个字符的功能—类似于utf8proc。

    1. 首次使用 Normalizer.normalize 创造任何你想要的组合
    2. 然后遍历结果的代码点,并按照您喜欢的方式替换统一字符。

    两者都应该直截了当。对于2,如果要处理基本多语言窗格中的字符,则使用 appropriate algorithm for doing so

    对于要组合在一起的字符,请为映射创建替换数据结构 未统一的代码点 -> . Map<Character, Character> Map<Integer, Integer> 请记住这一点。根据您的喜好填充替换映射,例如从utf8proc的 以及 character categories .

    Map<Character, Character> LUMP;
    
    static {
      LUMP = new HashMap<Character, Character>();
      LUMP.put('\u2216', '\\'); // set minus
      LUMP.put('\u007C', '|'); // divides
      // ...
    }
    

    创建一个新的StringBuilder或类似的东西,其大小与规范化字符串相同。在代码点上迭代时,检查 LUMP.get(codePoint) 不为空。在这种情况下,添加返回的值,否则将代码点添加到StringBuilder。应该就是这样。

    如果需要,您可以支持从配置(例如从 Properties 反对。

        3
  •  1
  •   Robert Munteanu    15 年前

    Normalizer ?

    normalize 将Unicode文本转换为等效的合成或分解形式,以便对文本进行更简单的排序和搜索。 规范化 支持中描述的标准规范化表单 Unicode Standard Annex #15 — Unicode Normalization Forms