0

我正在使用这些单词列表

现在我只想到德语、俄语、英语和法语。

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

当我得到输入文本时,我将搜索所有列表,并且将返回命中最多的列表作为答案。

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

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

4

2 回答 2

2

这将作为第一个近似值。

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

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

施瓦辛格在幼儿园警察。

对于任何读者来说,这里的语言都是英语是很清楚的。但是什么告诉你?正是“in”使这个短语成为英语。因此,有一些基于短功能词的方法被赋予了更高的权重。

因此,如果您对自己的项目很认真,那么对该领域进行一些研究是个好主意。顺便说一句,为什么不使用现有的语言检测库之一呢?先试试这个搜索。还有内存方面的考虑(单词列表/哈希图可能会变得非常大)。但作为一种可行的快速解决方案。

于 2015-05-16T12:05:39.163 回答
1

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

于 2015-05-16T12:11:48.853 回答