0

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

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

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

有任何想法吗?

4

2 回答 2

2

祝你好运 :)

老实说,这是高级 NLP 主题,很难可靠地做到这一点。

首先,您无法像这样检测许多语言中的单词边界。尤其是在表意语言(中文、日文……)中,您需要训练有素的学习算法来进行标记化。
有传言说有人这样做了(请参阅基础技术),但这只有在您负担得起支付许可费的情况下才对您有用。

顺便提一句。许多单词可以用几种语言完全一样地写出来,你不会得到可靠的语言检测。更糟糕的是,算法(通常是一些基于 n-gram 的检测器)将需要几个八位字节来检测任何东西(正确或错误)。

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

于 2012-05-09T20:13:53.457 回答
0

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

  1. 使用 ICU BreakIterator和英语 ( Locale::getEnglish() ) 规则发现基本“单词”
  2. 将#1 中的单词输入我的引擎,这反过来又给了我按分数排序的“真实”语言

出于您的目的,因为您的输入是 UTF-8,您可以使用setText()方法获取UText * (请注意此处链接的示例,它几乎正是您所需要的——不过,您可能想要使用 C++ API)可以设置遍历UTF-8。

于 2012-05-09T20:09:15.457 回答