代码改变世界

随笔分类 -  全文检索、数据挖掘、推荐引擎

全文检索、数据挖掘、推荐引擎系列7---条目相似度算法

2011-08-29 17:11 by java ee spring, 490 阅读, 收藏,
摘要: 在实际的项目中,有许多场合需要进行条目相似度计算,比如在电商系统中,经常有喜欢这个商品的用户还喜欢,通常计算商品的相似度是实现这种功能的方法之一,这可以视为一种基于内容的推荐系统的应用。同时,计算相似度不仅可以用于推荐商品,利用同样的算法,我们还可以计算出用户的相似度,可以向用户推荐其感兴趣的其他用户。与文本分析不同,对相似度的计算一般基于与用户的交互数据,如用户对商品进行投票、打分、浏览、购买等行为,经过适当的流程,将这些交互数据进行数字化,如浏览、购买、投票与否用0/1表示,对打分用实际的分数计算。这类算法与文本分析算法相比具有两个明显的优势:第一是文本分析算法需要处理英文和中文问题,并且 阅读全文

全文检索、数据挖掘、推荐引擎系列6---基于KMean的文本自动算法

2011-08-24 16:28 by java ee spring, 268 阅读, 收藏,
摘要: 对一系列文章进行自动聚类可以做为基于内容的推荐引擎的基础,如果要实现文本的自动聚类,首先按照本系列5中所介绍的,对文章进行分词,然后计算得出文章的术语向量表示,即求文章中每个不同的单词以其所对应的TF*IDF,具体计算方法如5中所示。目前文本自动聚类算法中,用得最多是KMean算法,本文中就介绍KMean算法的应用。当然,KMean算法可以通过调用Mahout或WEKA这两个开源的机器学习算法库来实现,但是在这类算法中需要准备比较复杂的输入文件,预处理过程比较复杂,还有一点,我们可能在实际应用中要对KMean算法进行调整,这样自己编写KMean算法重加有助于我们对文本聚类算法的理解。我们首先定 阅读全文

全文检索、数据挖掘、推荐引擎系列5---文章术语向量表示法

2011-08-19 16:39 by java ee spring, 292 阅读, 收藏,
摘要: 无论是要进行全文检索,还是对文章进行自动聚类分析,都需要将文章表示为术语向量(Term Vector),在Lucene内部就是通过术语向量来对文章进行索引和搜索的,但是Lucene没有向外提供合适的术语向量计算接口,所以对术语向量计算还必须我们自己来做。术语向量解述众所周知,一篇文章由一个个的单词组成,我们在进行文本处理时,首先进行中文分词,包括去除“的、地、得”等常用停止词,对关键词加上同义词,如缩写和全称,如果是英文可能还需要变为小写,去除复数和过去分词等,可能还需要提取词根,总之经过上述步聚的预处理,文章将变成由一系列单词组成的字符串数组。对一系统中的每一篇文章,我们首先计算每个单词的出 阅读全文

全文检索、数据挖掘、推荐引擎系列4---去除停止词添加同义词

2011-08-16 16:37 by java ee spring, 327 阅读, 收藏,
摘要: Lucene对文本解析是作为全文索引及全文检索的预处理形式出现的,因此在一般的Lucene文档中,这一部分都不是重点,往往一带而过,但是对于要建立基于文本的内容推荐引擎来说,却是相当关键的一步,因此有必要认真研究一下Lucene对文解析的过程。Lucene对文本的解析对用户的接口是Analyzer的某个子类,Lucene内置了几个子类,但是对于英文来说StandardAnalyzer是最常用的一个子类,可以处理一般英文的文解析功能。但是对于汉字而言,Lucene提供了两个扩展包,一个是CJKAnalyzer和SmartChineseAnalyzer,其中SmartAnalyzer对处理中文分词 阅读全文

全文检索、数据挖掘、推荐引擎系列3---全文内容推荐引擎之中文分词

2011-08-12 16:34 by java ee spring, 290 阅读, 收藏,
摘要: 基于内容的推荐引擎有两种实现途径,一种是根据条目的元数据(可以将元数据理解为属性),另一种是根据条目的文本描述信息。本系列中将先描述基于条目描述信息的全文检索实现方式,然后描述基于元数据的内容推荐引擎实现方式。对于基于条目文本描述信息的内容推荐引擎,目前有很多资料可以参考,基本步聚是先对文本内容进行分词,包括提取出单词、去掉常用词如的地得、加入同意词、对英语还有去掉复数形式和过去分词形式等;第二步是计算各个词在每篇文章中的出现频率,以及在所有文章中的出现频率,即TF/IDF;第三步计算文章向量;最后是利用自动聚类算法,对条目进行聚类,这样就可以实现向用户推荐同类产品的需求了。但是在这里有一个非 阅读全文

全文检索、数据挖掘、推荐引擎系列2---异步服务实现

2011-08-11 16:08 by java ee spring, 238 阅读, 收藏,
摘要: 正向前一篇分析的,在全文检索、数据挖掘、推荐引擎的后台系统中,通常可以提供三种类型的服务:同步服务、异步服务、后台服务。对于同步服务可以采用Web Service、XML Over HTTP或Restful服务,我在项目中就采用了Jason over HTTP,主要考虑Javascript解析Json效率较高,但是还要看各人喜好。对于异步服务在实现上,如果选用Java做为编程语言,基本就需要选择JMS了。而后台服务主要是定时任务,可以采用新版JEE中的Timer服务,或直接使用Timer。在JMS实现异步服务中,最简单的方法是采用消息驱动Bean来实现,但是JMS中有两种机制:一种是Queue 阅读全文