lucene权重计算及空间向量模型来判断两篇文档之间的关系
2015-08-14 15:27
316 查看
首先一个文档由好多的词(term)组成,其次,对于文档之间,不同的词的重要性不同。例如:I hava a dream这句话,"have" ,"dream"就比“a”重要。
所以在判断文档之间的关系首先找到哪些词对文档关系影响大。
找出term对文档重要性的过程就是计算词的权重的过程。计算词的权重有两个参数:第一个是词(term),第二个是文档(document).
词的权重表示该词在此文档中的重要性。越重要的词有越大的权重,因而在计算文档的相关性的时候发挥更大的作用。
判断词之间的关系从而得到文档相关性的过程使用向量空间模型的算法。
1.计算词的权重(term weight)的过程:
影响一个词在一篇文档中的重要性有两个因素决定:tf(term frequency)和df(document frequency).
tf该term在文档中出现的次数。越大说明该term在文档中出现的次数就越多,该次就是重要的词。
df多少文档包含了该词。越大说明该词就越普通,就不是关键的词。
计算tw(词权重)的公式:
这仅仅只term weight计算公式的简单典型实现。实现全文检索系统的人会有自己的实现,Lucene就与此稍有不同。
2.判断term之间的关系从而得到文档相关性的过程,也即向量空间模型的算法(vector space model)。
我们把文档看做一系列的词,每个词(term)都有一个权重(term weight).不同的词会根据自己在文档中的权重来影响文档相关性的打分计算。
于是把所有文档钟词(term)的权(weight)重看做一个向量。
Document = {term1, term2, …… ,term N}
Document Vector = {weight1, weight2, …… ,weight N}
同样我们把查询语句看作一个简单的文档,也用向量来表示。
Query = {term1, term 2, …… , term N}
Query Vector = {weight1, weight2, …… , weight N}
我们把所有搜索出的文档向量及查询向量放到一个N维空间中,每个词(term)是一维。
我们认为两个向量之间的夹角越小,相关性越大。
所以我们计算夹角的余弦值作为相关性的打分,夹角越小,余弦值越大,打分越高,相关性越大。
所以在判断文档之间的关系首先找到哪些词对文档关系影响大。
找出term对文档重要性的过程就是计算词的权重的过程。计算词的权重有两个参数:第一个是词(term),第二个是文档(document).
词的权重表示该词在此文档中的重要性。越重要的词有越大的权重,因而在计算文档的相关性的时候发挥更大的作用。
判断词之间的关系从而得到文档相关性的过程使用向量空间模型的算法。
1.计算词的权重(term weight)的过程:
影响一个词在一篇文档中的重要性有两个因素决定:tf(term frequency)和df(document frequency).
tf该term在文档中出现的次数。越大说明该term在文档中出现的次数就越多,该次就是重要的词。
df多少文档包含了该词。越大说明该词就越普通,就不是关键的词。
计算tw(词权重)的公式:
这仅仅只term weight计算公式的简单典型实现。实现全文检索系统的人会有自己的实现,Lucene就与此稍有不同。
2.判断term之间的关系从而得到文档相关性的过程,也即向量空间模型的算法(vector space model)。
我们把文档看做一系列的词,每个词(term)都有一个权重(term weight).不同的词会根据自己在文档中的权重来影响文档相关性的打分计算。
于是把所有文档钟词(term)的权(weight)重看做一个向量。
Document = {term1, term2, …… ,term N}
Document Vector = {weight1, weight2, …… ,weight N}
同样我们把查询语句看作一个简单的文档,也用向量来表示。
Query = {term1, term 2, …… , term N}
Query Vector = {weight1, weight2, …… , weight N}
我们把所有搜索出的文档向量及查询向量放到一个N维空间中,每个词(term)是一维。
我们认为两个向量之间的夹角越小,相关性越大。
所以我们计算夹角的余弦值作为相关性的打分,夹角越小,余弦值越大,打分越高,相关性越大。
相关文章推荐
- hdu 4063 福州赛区网络赛 圆 ****
- e良师益友为大家解读PPT文件转换为视频格式的步骤及注意事项:
- Html如何嵌套HTML
- python读取xml文件
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- 每日一题(19)——数组分割(动态规划)
- 每日一题(18)——买书问题(动态规划)
- LeetCode:Lowest Common Ancestor of a Binary Search Tree(BST最近公共祖先)
- EntityFramework中常用的数据修改方式
- 利用ViewPager+Fragment+actionbar实现可左右滑动的Action Tab
- 每日一题(15)——Digit Root(大数)
- BACnet协议开发
- 深度优先搜索——迷宫问题(华为oj)
- ubuntu redis-server
- C++指针详解
- [HEOI2014][BZOJ3611] 大工程|虚树|树型dp|dfs序|树上倍增LCA
- 关于DMARC协议
- 一个空循环的问题
- webservice框架jersey简单总结
- 每日一题(14)——找到符合要求的整数