如何系统可靠地识别可能适合特定自定义类别(如“撇号”)的所有可能的Unicode字符?

时间:2011-04-27 17:59:10

标签: regex text unicode categories

问题

Unicode类别通常过于独占或过于包容,无论是否在记事本中键入(键盘映射到ASCII双/单引号,撇号等)或Microsoft Word(其中,键击映射到Unicode或Windows代码页中的非ASCII字符。)

文本处理所需的类别

我想使用Regex表达式构建一个文本处理器,它可以一致且详尽地识别语言元素,如:

  1. 撇号(用于收缩,大概每边都有一个字母)
  2. 引用(更具体地说,每个是初始/最终/单/双)
  3. 破折号(短划线,短划线,连字符,减号等) - Unicode类别:“DashPunctuation”
  4. 打开/关闭分组标点符号(括号,括号,括号等) - Unicode类别:“OpenPunctuation”和“ClosePunctuation”
  5. 但是,此类类别并不总是与任何特定的Unicode类别或类别集相对应。

    报价/撇号问题

    类似“InitialQuotePunctuation”和“FinalQuotePunctuation”的类别不区分单引号和双引号,它们实际上排除了常见的ASCII双引号和单引号,它们是中性/直接的,因此既不属于初始类也不属于最终类。相反,我们在“OtherPunctuation”类别中找到它们,以及许多其他常见但不相关的标点符号。真正的问题是我们需要将单引号字符分开以获得一组完整的潜在撇号字符,因为有人可以使用这些字符作为撇号。

    引号/撇号的另一个问题是,通过键入记事本可以轻松地将其用作引号/撇号的严重符号和锐符号属于“ModifierSymbol”类别。

    关于所需解决方案的最终想法

    我认为短划线和括号类别相当完整,但“DashPunctuation”类别不包括“swung dash”和“dashed overline”,它们可以在“OtherPunctuation”类别中找到,带有ASCII单/双引号。

    我想检测我上面提到的语言元素需要一个两阶段的过程,其中一个Unicode字符(例如ASCII撇号)最初会被允许分成多个类别(例如撇号和单引号),以便辅助上下文检查可以解决哪个类别最适合其明显用法。

    报价类别的正则表达式可能包含如下字符类:[\ p {Pi} \ p {Pf}“'],并附加检查以确保其一侧有非字母字符或其他

    问题

    如何系统可靠地识别列出的四个类别中的每个类别的所有可能字符?正如我所解释的,仅凭Unicode类别是不够的。

1 个答案:

答案 0 :(得分:-1)

以下是一个示例答案,以防没有人知道我在问什么。

要识别类别1中的字符,撇号,您必须:

  1. 从两个Unicode类别InitialQuotePunctuation和FinalQuotePunctuation
  2. 手动挑选所有撇号字符
  3. 包括ASCII单引号/撇号(U + 0027)
  4. 包含Unicode“修饰符字母撇号”(http://www.fileformat.info/info/unicode/char/02bc/index.htm)并查看它的“另请参阅部分”以查找与其类似的相关字符并且可以用作撇号
  5. 要识别类别3中的字符,短划线,您必须:

    1. 在Unicode“DashPunctuation”类别中包含字符
    2. 还包括“OtherPunctuation”类别中的破折号字符“swung dash”和“dashed overline”
    3. 将整个Unicode字符数据库注视其他任何类似于或可能用作破折号或打开各种文字处理程序的内容,并查看它们用作短划线的情况,以防它未包含在您已识别的集合中
    4. 我认为没有更简单或更可靠的方法来做到这一点。任何想法或替代技术,或为此目的合理已定义的字符集都是受欢迎的。