从UTF8缓冲区检测单词边界和每个单词的语言

时间:2012-05-09 12:30:17

标签: encoding utf-8 internationalization icu

我正在开发一个自定义搜索引擎,我需要将每个单词传递给相应的语言特定的词干分析器。

我最近发现了Compact Language Detector(CLD)http://blog.mikemccandless.com/2011/10/language-detection-with-googles-compact.html,它为UTF8缓冲区提供了令人印象深刻的语言检测。

虽然CLD非常适合检测给定缓冲区的语言,但我需要从缓冲区中提取单词边界,并检测每个单词的语言。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

祝你好运:)

老实说,这是一个先进的NLP主题,可靠的 非常难以

首先,你不能像这样检测许多语言中的单词边界。特别是在表意语言(中文,日文等)中,你需要训练有素的学习算法进行标记化 有传言说有人这样做了(参见Basis Technology),但这只对你有用,如果你有能力支付许可费。

顺便说一句。许多单词可以用几种语言完全相同地编写,并且您将无法获得可靠的语言检测。更糟糕的是,算法(通常是一些基于n-gram的检测器)需要几个八位字节来检测任何东西(对或错)。

正如我所说,祝你好运。如果我是你,我会重新考虑我的策略;)

答案 1 :(得分:0)

我开发了一个使用ICU的语言检测引擎,基本上可以执行以下操作:

  1. 使用ICU BreakIterator和英语(Locale::getEnglish())规则发现基本“单词”
  2. 将#1中的单词输入我的引擎,这反过来又为我提供按分数排序的“真实”语言
  3. 出于您的目的,因为您输入的是UTF-8,您可以使用setText()方法取UText *(请注意此处链接的示例,它几乎正是您所需要的 - 虽然,您可能想要使用可以设置为遍历UTF-8的C ++ API。