在Solr中实现术语关联挖掘的最简单方法是什么?

时间:2011-09-12 20:53:13

标签: lucene solr associations

关联挖掘似乎可以在文本语料库中检索相关术语。关于此主题有几个着作,包括众所周知的LSA方法。挖掘关联的最直接方法是建立docs X terms的共生矩阵,并找到最常出现在同一文档中的术语。在我之前的项目中,我通过对TermDocs的迭代直接在Lucene中实现它(我通过调用IndexReader.termDocs(Term)得到它)。但我在Solr看不出任何类似的东西。

所以,我的需要是:

  1. 检索特定字段中的最多关联字词
  2. 检索特定字段内最接近指定的字词。
  3. 我将通过以下方式评价答案

    1. 理想情况下,我希望找到直接涵盖指定需求的Solr组件,即直接获取相关术语的内容。
    2. 如果这是不可能的,我正在寻找获得指定字段的共现矩阵信息的方法。
    3. 如果这也不是一个选项,我想知道最简单的方法1)获得所有条款和2)获取这些术语出现的文件的ID(数字)。

3 个答案:

答案 0 :(得分:3)

您可以将Lucene(或Solr)索引导出到Mahout,然后使用Latent Dirichlet Allocation。如果LDA不足以满足您的需求,您可以从Mahout中获取相关矩阵,然后使用Mahout进行奇异值分解。

我不知道Solr的任何LSA组件。

答案 1 :(得分:2)

由于我的问题仍然没有答案,我必须写下自己的想法并接受它。然而,如果有人提出更好的解决方案,我会高兴地接受它而不是我的。

我将使用共生矩阵,因为它是关联挖掘的最主要部分。通常,Solr以某种方式提供构建此矩阵所需的所有功能,尽管它们不如使用Lucene直接访问那样高效。要构建矩阵,我们需要:

  1. 所有字词或至少最常用字词,因为罕见字词不会影响其关联挖掘的结果。
  2. 这些术语出现的文档,至少是顶级文档。
  3. 使用标准Solr组件可以轻松完成这两项任务。

    可以使用检索字词TermsComponentfaceted search。我们只能获得最高术语(默认)或所有术语(通过设置最大术语数量,详情请参阅特定功能的文档)。

    使用相关术语获取文档只是搜索此术语。这里的弱点是我们每学期需要1个请求,并且可能有数千个术语。另一个缺点是,简单搜索或分面搜索都不能提供有关已找到文档中当前术语出现次数的信息。

    有了这个,很容易建立共生矩阵。为了挖掘关联,可以使用其他软件,如Weka或编写自己的实现,比如Apriori algorithm

答案 2 :(得分:-1)

您可以在以下查询中获取已找到文档中当前术语的出现次数:

http://ip:port/solr/someinstance/select?defType=func&fl=termfreq(field,xxx),*&fq={!frange l=1}termfreq(field,xxx)&indent=on&q=termfreq(field,xxx)&sort=termfreq(field,xxx) desc&wt=json