我想检测文字中的单词,即我需要知道给定文本中的哪些字符是字母,即它们可以是(口头)单词的一部分,另一方面是标点符号等。
例如,在上面的句子中,“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中找到完整的单词字符表/列表?
答案 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;
}