2012-10-08 164 views
5

我想建立一个推荐系统,根据他的行为(谷歌搜索,点击,他也可以显式评价网页)向用户推荐网页。为了了解Google新闻的方式,它会显示来自网络的关于特定主题的新闻文章。用技术术语来说就是聚类,但我的目标是相似的。它将基于用户的行为进行基于内容的推荐。网页推荐系统

所以我的问题是:

  1. 我怎么可能拖网在网上找到相关网页页面?
  2. 我应该使用什么算法来从网页中提取数据是文本分析和文字频率的唯一方法呢?
  3. 最后哪个平台最适合这个问题。我听说过Apache mahout,它有一些可重复使用的algos,这听起来很合适吗?
+2

你可以写关于你的问题多本书籍。 –

+0

哈哈,他们听起来像是个大问题吗?那么我正在寻找一个简单的解决方案。只是简单描述如何处理这样一个项目。 –

+1

[编程集体智慧](http://shop.oreilly.com/product/9780596529321.do)是一个简单的,无数学的机器学习入门,它包含一个与您的问题类似的用例。 – Maurits

回答

9

正如Thomas Jungblut所说,你可以在你的问题上写几本书;-) 我会尝试给你一个简短的指针列表 - 但要注意,不会有现成的现成的解决方案...

  1. 爬取互联网:有很多的工具包这样做,就像Scrapy为Python,crawler4j和Heritrix的为Java或WWW ::机器人为Perl。要从网页中提取实际内容,请查看boilerpipe。

    http://scrapy.org/

    http://crawler.archive.org/

    http://code.google.com/p/crawler4j/

    https://metacpan.org/module/WWW::Robot

    http://code.google.com/p/boilerpipe/

  2. 首先,通常可以使用协同过滤,而不是基于内容的方法。但是,如果你想有很好的报道,尤其是长尾巴,那么分析文本是没有办法的。有一点需要注意的是话题建模,例如LDA。在Mallet,Apache Mahout和Vowpal Wabbit中实施了几种LDA方法。 对于索引,搜索和文本处理,请看Lucene。这是一款非常棒的成熟软件。

    http://mallet.cs.umass.edu/

    http://mahout.apache.org/

    http://hunch.net/~vw/

    http://lucene.apache.org/

  3. 另外的Apache Mahout中也包含像LDA(见上文),集群和文本处理的事情,也有其他工具包如果您想专注于协作过滤,则可以使用它:LensKit(也在Java中实现)和MyMediaLite (免责声明:我是主要作者),它是用C#实现的,但也有一个Java端口。

    http://lenskit.grouplens.org/

    http://ismll.de/mymedialite

    https://github.com/jcnewell/MyMediaLiteJava

+0

感谢zenog您的描述性答案。这是我正在寻找的答案,非常感谢:) –

4

这应该是一个很好看的:Google news personalization: scalable online collaborative filtering

它专注于协同过滤,而不是基于内容的建议,但它触及了一些非常有趣的点状的可扩展性,项目流失,算法,系统设置和评估。

亨利马乌具有很好的协同过滤技术,这是你描述为使用用户的行为(点击,阅读等),你可能引入使用rescorer类基于一些内容。

您可能还想看看Myrrix,这在某种程度上是Mahout品味(又称推荐)部分的进化。此外,它还允许在使用rescorer类的协作过滤之上应用基于内容的逻辑。

如果你有兴趣在Mahout中,该Mahout in Action book将是最好的地方开始。

+0

谢谢Astatic。我没有阅读你所建议的论文,但希望它涵盖了谷歌如何从网站上的所有网页找到与来自单个网站的文章相比的网页。 Myrrix看起来很有趣,需要更多地关注它。再次感谢 –