1

我想获取人们在聊天室中聊天的内容并进行以下信息检索:

  1. 获取关键字
  2. 忽略所有干扰词,主要保留动词和名词
  3. 对关键字执行词干提取,这样我就不会以多种形式存储相同的关键字
  4. 如果同义词关键字已存储在我的存储中,则应使用现有同义词而不是新关键字
  5. 将处理后的关键字存储在持久存储中,并参考它所在的聊天消息和说出它的用户

有了这些经过处理的信息,我想慢慢了解人们在聊天室中谈论的内容,然后根据这些关键字自动找到相关的聊天室等。

我的问题如下:执行上述操作的最佳 C/C++ 或 .NET 工具是什么?

4

1 回答 1

2

我部分同意@larsmans 的评论。在实践中,您的问题可能确实比您发布的问题更复杂。

但是,简化问题/问题,我想您的问题的答案可能是 Lucene 的实现之一:Lucene (Java)、Lucene.Net (C#) 或CLucene (C++)。

按照您问题中的要点:

Lucene 将通过使用字符串标记器来处理第 1 点(您可以自定义或使用自己的)。对于第 2 点,您可以使用像StopFilter这样的TokenFilter,这样 Lucene 就可以读取它不应该使用的停用词列表(“the”、“a”、“an”...)。对于第 3 点,您可以使用PorterStemFilter。第 4 点有点棘手,但可以使用定制的TokenFilter来完成。第 1 点到第 4 点在分析/标记化阶段执行,由分析器负责。

关于第 5 点,在 Lucene 中,您可以存储带有字段的文档。一个文档可以有任意数量和混合的字段。因此,您可以为每个聊天室创建一个文档,并将其所有文本连接起来,并让文档的另一个字段引用从中提取它的聊天室。您最终会得到一堆可以比较的 Lucene 文档。因此,您可以将您当前的聊天室与其他聊天室进行比较,看看哪个与您所在的聊天室更相似。

如果您想要的只是一组描述聊天室的最佳关键字,那么您的需求更接近@larsmans 所说的信息提取/自动摘要/主题发现任务。但是您仍然可以将 Lucene 用于解析/标记化阶段。

*我参考了 Java 文档,但是 CLucene 和 Lucene.Net 具有非常相似的 API,因此找出差异不会很麻烦。

于 2011-09-20T13:25:00.787 回答