我如何区分哪些unicode字符是字母(单词)还是穿孔标记?

我如何区分哪些unicode字符是字母(单词)还是穿孔标记?,unicode,text,Unicode,Text,我想检测文本中的单词,也就是说,我需要知道给定文本中的哪些字符是字母,也就是说,它们可以是(口语)单词的一部分,而另一方面,哪些是标点等等 例如,在上面的句子中,“I”、“want”以及“I”和“e”是这方面的单词,而空格、“.”和逗号则不是 这方面的困难在于,我希望能够阅读任何基于Unicode的脚本。例如,德语单词“schön”是一个单词。但是希腊语、阿拉伯语或日语呢 所以,我需要的是一个表或列表,指定可以形成单词的所有字符范围。或者,我还想知道哪些字符是可以形成数字的数字(假设其他脚本具有

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

例如,在上面的句子中,“I”、“want”以及“I”和“e”是这方面的单词,而空格、“.”和逗号则不是

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

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

我需要这个用于Mac OS X、Windows和Linux。我将编写一个C应用程序,所以它要么是一个操作系统库,要么是一个完整的代码/数据解决方案,我可以将其翻译成C

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

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

我已经找到了unicode图表(),但这不是我可以在编程中使用的一种方便的形式


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

如果您对Python非常熟悉,则提供了可以跨语言执行此操作的分块器/词法工具。我会假装很聪明,告诉你更多,但我知道的一切都是假的,我强烈推荐。我知道你可以用正则表达式编写一个技术解决方案,它可以让你达到80%的目标,但是为什么要重新发明轮子呢?

你可以尝试使用来找出单词分隔符可能是什么,但是要注意,有些语言(例如日语)甚至没有单词分隔符。

c-runtime已经实现了

  • ispunct()
    是标点符号
  • isctrl()
    是一个控制字符

在Java中,有
静态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;
}

我认为我不能期望标准正则表达式通过类似“\w”的方式将希腊字符识别为字母。所以我必须一个接一个地输入所有可能的字母代码。但是首先我必须有这个列表。有一些正则表达式引擎(包括可选的Python引擎)为
\w
等实现Unicode字符数据库。有些还具有更丰富的
\p{…}
字符类选择器。是的,请参阅Python文档了解
re
模块。它有
re.UNICODE
,正如它所说,“使\w、\w、\b、\b、\d、\d、\s和\s依赖于UNICODE字符属性数据库。”我明白了。根据默认设置,我可以访问的正则表达式库不支持unicode,但我可以寻找一个更好的正则表达式库。是的,这就是我一直在寻找的表。现在,这个文件信息大小看起来不太可靠。例如,它没有说明它的来源(例如它基于哪个unicode版本),或者它是否完整。我怎么知道这不仅仅是一个家伙收集了他自己需要的东西,跳过了所有难看的其他东西?你必须解析原始数据文件()才能得到整个东西。此外,一些语言(如Python)已经采用了方便的(对他们来说)格式()。这些语言通常能够很好地处理本地8位字符集,而不是各种脚本和语言中的Unicode文本。