从text :: system structure

时间:2015-05-16 11:36:56

标签: java nlp language-detection

我正在使用these word lists

现在我只考虑德语,俄语,英语和法语。

我想我要做的就是将它们全部作为散列图的一部分,每个语言一个,以单词作为键,布尔值作为值。

当我得到一个输入文本时,我将搜索所有列表,并以最多匹配的那些将作为答案返回。

也许我会尝试使用多线程并使用不同的线程同时搜索每个词典。

这是解决这个问题的好方法吗?

2 个答案:

答案 0 :(得分:2)

这可以作为第一个近似值。

用于语言检测的固定单词列表的问题是,真实文本(尤其是短文本)可能无法在列表中提供足够的匹配。更可靠的方法是收集其他语言特征的一部分(例如反映形态和正字法的字母n-gram的统计数据),而不仅仅是完整的单词。

此外,对于某些文本,您可能会得到意想不到的结果。请考虑以下短语:

  

Schwarzenegger在幼儿园警察。

对于任何读者来说,很明显这里的语言是英语。但是什么告诉你的?正是“in”使这句话明白无误。因此,存在基于短函数词的方法,其被赋予更高的权重。

因此,如果你认真对待你的项目,那么研究一下这个区域是个好主意。那么,为什么不使用现有的一个库进行语言检测呢?首先尝试this search。还有内存考虑因素(单词列表/哈希映射可能变得非常大)。但作为一种可行的快速解决方案。

答案 1 :(得分:1)

不太可能。在HashMap中存储大量数据会占用大量RAM。只有在添加对其他语言的支持时,问题才会增加。您希望将单词列表保留在磁盘上。有很多方法可以解决这个问题。您可以对已排序的文本文件执行二进制搜索,每种语言对应一个文本文件。或者,您可以将数据存储在数据库中,索引文本列,然后让数据库引擎完成工作。您还可以使用许多数据库引擎中提供的全文搜索功能。并且可能有更多(可能)更好的方式。但是,重点是将单词列表加载到内存中会导致内存问题。