关联挖掘似乎可以在文本语料库中检索相关术语。关于此主题有几个着作,包括众所周知的LSA方法。挖掘关联的最直接方法是建立docs X terms
的共生矩阵,并找到最常出现在同一文档中的术语。在我之前的项目中,我通过对TermDocs的迭代直接在Lucene中实现它(我通过调用IndexReader.termDocs(Term)得到它)。但我在Solr看不出任何类似的东西。
所以,我的需要是:
我将通过以下方式评价答案:
答案 0 :(得分:3)
您可以将Lucene(或Solr)索引导出到Mahout,然后使用Latent Dirichlet Allocation。如果LDA不足以满足您的需求,您可以从Mahout中获取相关矩阵,然后使用Mahout进行奇异值分解。
我不知道Solr的任何LSA组件。
答案 1 :(得分:2)
由于我的问题仍然没有答案,我必须写下自己的想法并接受它。然而,如果有人提出更好的解决方案,我会高兴地接受它而不是我的。
我将使用共生矩阵,因为它是关联挖掘的最主要部分。通常,Solr以某种方式提供构建此矩阵所需的所有功能,尽管它们不如使用Lucene直接访问那样高效。要构建矩阵,我们需要:
使用标准Solr组件可以轻松完成这两项任务。
可以使用检索字词TermsComponent或faceted 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