如何判断哪些unicode字符是字母(单词)与标点符号?

时间:2010-02-11 22:55:25

标签: unicode text

我想检测文字中的单词,即我需要知道给定文本中的哪些字符是字母,即它们可以是(口头)单词的一部分,另一方面是标点符号等。

例如,在上面的句子中,“I”,“want”和“i”和“e”就是这方面的词,而空格,“。”而且逗号不是。

这方面的困难在于我希望能够阅读任何基于Unicode的脚本。例如,德语单词“schön”就是一个词。但是希腊语,阿拉伯语还是日语呢?

所以,我需要的是一个表或列表,指定可以形成单词的所有字符范围。或者,我也想知道哪些字符是可以形成数字的数字(假设其他脚本具有与阿拉伯数字相似的编号方案)。

我需要在Mac OS X,Windows和Linux上使用它。我将编写一个C应用程序,因此它需要是一个OS库或一个完整的代码/数据解决方案,我可以将其转换为C语言。

我知道Mac OS(Cocoa)为此目的提供了功能,但我不确定Win和Linux是否有类似的解决方案(基于gtk,可能?)。

或者,如果我有完整的表格,我可以编写自己的代码。

我找到了unicode图表(http://unicode.org/charts/index.html#scripts),但这并不是我可以在编程中使用的一种方便的形式。

那么,有人可以告诉我是否有用于Windows和Linux的功能,或者我可以在unicode中找到完整的单词字符表/列表?

4 个答案:

答案 0 :(得分:4)

您可以尝试使用Unicode character category来找出分隔符这个词的含义,但要注意某些语言(例如日语)甚至都没有单词分隔符。

答案 1 :(得分:1)

如果您熟悉Python,Natural Language Toolkit提供了跨语言的chunkers / lexical工具。我假装在这里很聪明并告诉你更多,但我知道的一切都是this book,我强烈推荐。我意识到你可以使用正则表达式编写一个技术解决方案,它可以让你80%的路到达你想要的位置,但为什么要重新发明轮子?

答案 2 :(得分:0)

c-runtime有

  • ispunct()是一个标点字符
  • isctrl()是一个控制角色。

答案 3 :(得分:0)

在Java中,static int java.lang.Character.getType(int codePoint)可以与同一类中提供的常量进行比较,如下所示:

switch(Character.getType(codePoint)) {
    case Character.UPPERCASE_LETTER:
    case Character.LOWERCASE_LETTER:
    case Character.TITLECASE_LETTER:
    case Character.MODIFIER_LETTER:
    case Character.OTHER_LETTER:
        // you found a letter
    break;
    case Character.NON_SPACING_MARK:
        // you found a combining diacritical mark
        // see: https://en.wikipedia.org/wiki/Combining_character
    break;
    default:
        // you found other symbols
    break;
}