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

Posted

技术标签:

【中文标题】用于文本规范化的 Java 库 [关闭]【英文标题】:Java library for text normalization [closed] 【发布时间】:2011-05-05 19:23:24 【问题描述】:

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

它应该将所有类型的特殊字符替换为 ASCII 等价物(当然,如果可能的话)。所有空格的变体编码为 32,所有减号的变体(长、短、细等)编码为 45,依此类推。

【问题讨论】:

PS:看来我必须实现它。有什么想法吗? 【参考方案1】:

您的具体要求有点模糊,但我想您想要一个功能与 Normalizer 一样,但具有将某些 Unicode 代码点集中到一个字符的功能 - 类似于 utf8proc。

我会采用两步法:

    首先使用Normalizer.normalize 创建您想要的任何(去)构图 然后遍历结果的代码点,按照自己喜欢的方式替换统一字符。

两者都应该简单明了。对于 2,如果您要处理基本多语言窗格之外的字符,则使用 appropriate algorithm for doing so 遍历代码点。如果您只使用 BMP 代码点,则只需遍历字符即可。

对于您想集中在一起的字符,为映射统一代码点 -> 统一代码点创建一个替换数据结构。 Map<Character, Character>Map<Integer, Integer> 想到这一点。根据您的喜好填充替换映射,例如通过从 utf8proc 的 lump.txt 和 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。应该是这样的。

如果需要,您可以支持从配置中加载 LUMP 内容的方式,例如来自Properties 对象。

【讨论】:

【参考方案2】:

您应该查看CLDR 中的Latin-ASCII 转换。它将在ICU 4.6

【讨论】:

谢谢,看起来不错的解决方案 拉丁语 ASCII 音译进入 ICU 4.6 / CLDR 1.9。【参考方案3】:

你看过 icu4j 的Normalizer吗?

normalize 将 Unicode 文本转换为等效的组合或分解形式,从而可以更轻松地对文本进行排序和搜索。 normalize 支持Unicode Standard Annex #15 — Unicode Normalization Forms 中描述的标准规范化形式。

【讨论】:

是的,我查过了。默认情况下,它不满足我的需要。我看过 Normalizer2 (icu-project.org/apiref/icu4j/com/ibm/icu/text/Normalizer2.html),它可以配置,但它不是简单的任务。

以上是关于用于文本规范化的 Java 库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java:如何规范化文本?

在 tomcat 中部署战争后,Java 文本规范化的行为有所不同

Java:文本到语音引擎概述 [关闭]

Java 图像规范化

规范化创建一个vs2017 Mvc框架项目

使用纯 C/C++ 向 PDF 添加注释 [关闭]