PHP找到相关性

时间:2010-08-10 11:36:04

标签: php lucene sphinx

假设我收集了10篇不同主题的100,000篇文章。我不知道哪些文章实际上属于哪个主题,但我有完整的新闻文章(可以分析它们的关键字)。我想根据他们的主题对这些文章进行分组。知道我该怎么做吗?任何引擎(狮身人面像,lucene)都可以。

7 个答案:

答案 0 :(得分:2)

在机器学习/数据挖掘方面,我们将这类问题称为分类问题。最简单的方法是使用过去的数据进行未来预测,即统计导向: http://en.wikipedia.org/wiki/Statistical_classification,您可以先使用朴素贝叶斯分类器(常用于垃圾邮件检测)

我建议你阅读这本书(虽然是为Python写的):编程集体智慧(http://www.amazon.com/Programming-Collective-Intelligence-Building-Applications/dp/0596529325),他们有一个很好的例子。

答案 1 :(得分:2)

提供maschine学习库的apache项目 Mahout 。其功能包括:

  

[...]群集需要例如文本文档并将它们分组为局部相关文档组。分类从现有的分类文档中学习特定类别的文档是什么样的,并且能够将未标记的文档分配给(希望)正确的类别。 [...]

您可以在http://mahout.apache.org/

下找到Mahout

虽然我从未使用Mahout,只考虑过它;-),但似乎总是需要相当多的理论知识。因此,如果你打算花一些时间在这个问题上,Mahout可能是一个很好的起点,特别是因为它有很好的记录。但是不要指望它很容易; - )

答案 2 :(得分:1)

创建分类器的简单方法:

从100K手动读取和存储N个示例文档到您的10个主题中的每一个。通常,越多的示例文档越好。

创建一个Lucene / Sphinx索引,其中包含与每个主题相对应的10个文档。每个文档都将包含连接在一起的该主题的所有示例文档。

要对文档进行分类,请将该文档作为查询提交,方法是将每个单词设为OR项。你几乎总能得到所有10个结果。 Lucene / Sphinx将为每个结果分配一个分数,您可以将其解释为文档与每个主题的“相似性”。

可能不是超精确,但如果你不想经历训练真正朴素贝叶斯分类器的麻烦,这很容易。如果你想走那条路,你可以谷歌为WEKA或MALLET,两个很好的机器学习库。

答案 3 :(得分:1)

摘自“智能网络算法”第7章(Manning 2009):

“换句话说,我们将在假设的背景下讨论我们的算法的采用 Web应用程序。特别是,我们的示例涉及一个新闻门户网站,其灵感来自Google新闻网站。“

因此,该书第7章的内容应为您提供解决问题的代码和理解。

答案 4 :(得分:0)

您可以使用sphinix搜索所有10个不同主题的所有文章,然后设置关于文章链接到特定主题的匹配数量的阈值,等等

答案 5 :(得分:0)

我推荐Haralambos Marmanis和Dmitry Babenko撰写的“智能网络算法”一书。有一章介绍了如何做到这一点。

答案 6 :(得分:0)

我不可能完全自动化这个,但你可以做大部分。问题是主题来自何处?

从每篇文章中提取最常见的单词和短语列表,并将其用作标记。

然后我会列出一个主题列表,并分配属于该主题的单词和短语,然后将其与标签相匹配。问题是每篇文章可能会有多个主题。

也许最好的方法是使用某种形式的贝叶斯分类器来确定哪个主题最能描述该文章。这将需要您最初训练系统。

此类技术用于确定电子邮件是否为垃圾邮件。

article might可以提供一些帮助