什么是信息检索的最佳语言?

时间:2011-02-03 10:34:14

标签: information-retrieval

我正在开始一个信息检索项目。我将分析大量的信息(数百万个文本文档)。

以下是我的想法:

  • 它可以在C中完成,因为它会很快,但我不喜欢C中的字符串操作。
  • 它可以在Perl中完成,因为字符串操作看起来非常简单,但它应该是面向对象的。
  • 我不想使用C#,因为我在工作中使用它而我不喜欢它。另外,我没有使用Windows。

以下是人们在建议Python时所说的内容:

  

它应该用Java完成,因为Java适用于真正的工程师而Python适用于黑客。

的想法是什么?

4 个答案:

答案 0 :(得分:4)

我在大学的几个信息检索项目中使用了Java,我可以为此推荐它。以下是一些想法:

  • 字符串操作良好的数据结构在信息检索中非常重要。因此,我不推荐像C这样的系统语言。
  • 然而,大量数据要求您根据内存和算法复杂性要求仔细选择数据结构。脚本语言中的列表和词典可能无法为您提供足够的控制。另一方面,Java Collections Framework有许多不同的地图,列表和集合实现,并提供了良好的文档,可以为您提供足够的信息来选择正确的文档。
  • 如果您正在处理大量数据,那么您需要在并行中执行此操作以加快速度。 Java中没问题:java.util.concurrent中有许多高性能并发集合。您甚至可以考虑对某些任务使用Hadoop及其MapReduce数据处理方式。
  • 您自然会将自然语言处理作为检索管道的一部分。对于超出基本标记化和词干化的内容,您可能需要使用NLP库 对于Java,有一些相当不错的:Stanford CoreNLPApache OpenNLPLingPipe 我使用过斯坦福和OpenNLP,我非常满意。对于更基本的东西,我建议稍后使用,但对于高级解析或依赖解析等高级内容,我会选择Stanford CoreNLP。
  • (这是有争议的,但对于较大的项目,我推荐静态类型语言。我认为它们使项目更易于维护,因为它们往往会迫使您考虑其设计和结构。使用脚本的项目像Python或Perl这样的语言可能会成为看似松散(但实际上是强烈)耦合的脚本的大量集合。​​)

请注意,其中一些参数并非特定于Java,并且可能适用于类似的语言,如C#,以及在某种程度上也适用于C ++。

答案 1 :(得分:1)

嗯,用于某事的最好的语言总是一个品味,个人经验,你正在处理的问题等问题。例如,即使它非常用于IR,我到目前为止,我们没有积极的Java经验,因此语言不会出现在我的偏好或推荐中。那个,我最近在大学的一个课程中在IR工作,这里是我用过的东西:

  • Ruby用于基本网络抓取。我基本上使用Nokogiri gem来提取Web文档的文本,进行一些解析(尽管可以进行大量的解析)。这非常有趣,不是那么难,基本上,考虑到Ruby中的完整OOP,适合“它应该是面向对象的”部分。非常好的文档。
  • 用于构建排名的C ++ 。使用C ++的标准模板库(STL)有一种非常有趣的方法来构建排名算法(基本上是向量空间模型)。 STL容器提供了一个非常好的数据结构实现,这对于本主题至关重要。还有面向对象和非常好的文档。

我没有时间使用的另一件事是 Scrapy ,一个用于网页抓取的 Python模块。我的谷歌搜索给我的印象是,这个用途非常广泛,而且文档非常好。看起来非常可配置,专门用于聚焦网络爬行。面向对象也是如此。我计划在未来进入这个目标。

这些是我的想法。

答案 2 :(得分:0)

如果你需要使用文本,Perl在这方面也非常好,也很快。 Perl有一个非常现代和干净的OOP系统叫做Moose

答案 3 :(得分:0)

SQL - 结构化查询语言。

为了记录,我没有看到任何地方写的“编程语言”。

至于真正的工程师的黑客和Java的Python,让我说使用Java的工程师倾向于做一些大的混乱,从纠正这些工程师的经验说。

Python更加现代化,如果你足够了解它,可以通过很多方法使代码具有高性能,同时保持其简洁明了。

不,我不喜欢,也不使用Python。实际上,我比Java更精通Java ......