首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server中的BM25实现

Server中的BM25实现
EN

Stack Overflow用户
提问于 2013-05-07 06:56:10
回答 1查看 543关注 0票数 0

当我试图在Server 2008 BM25中实现R2算法时,我遇到了麻烦。我知道Server包含全文搜索选项,它已经实现了BM25的一个变体,但是我想做一些测试,而且由于FTS过程是不可编辑的(据我所知),我决定自己实现它。

我有两个表,TF (术语频率)和DF (文档频率),其结构如下:

TF

*注:重量栏表示单词的重要性(通常为1)

代码语言:javascript
复制
ID | Term | DocumentID | Count | Weight*

DF

代码语言:javascript
复制
ID | Term | Count

TF表包含术语和文档之间的关系;也就是说,术语在文档中的频率。DF表包含关于一个术语包含多少文档的信息。使用这两个表,我现在要根据BM25中的公式计算两个文档之间的维基百科文章相似度值(其中一个文档充当查询)。表TF和DF分别转换为函数f(q,D)和n(q):

我希望结果是这样的:

代码语言:javascript
复制
DocumentA_ID | DocumentB_ID | BM25_Value

下面是一些我到目前为止所掌握的代码:

代码语言:javascript
复制
ALTER PROCEDURE [dbo].[BM25]
-- default parameters k => [1.2 - 2.0], b => [0.0 - 1.0]
    @K1 FLOAT = 1.2,
    @B FLOAT = 0.75
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @N FLOAT;
    DECLARE @AVGDL FLOAT;

    -- number of all documents
    SELECT @N = CAST(COUNT(*) AS FLOAT)
    FROM FullDocument;

    -- average length of documents (in words)
    SELECT @AVGDL = AVG(Length) 
    FROM (
        SELECT  DocumentID, 
                CAST(COUNT(*) AS FLOAT) AS Length 
        FROM TF 
        GROUP BY DocumentID 
    ) A;

    -- BM25 implementation  
--  SELECT  TF.Term, 
--          TF.DocumentID, 
--          C.DocumentLength, 
--          LOG((@N - DF.Count + 0.5)/(DF.Count + 0.5)) * (TF.Count * (@K1 + 1))/(TF.Count + @K1 * (1 - @B + @B * (C.DocumentLength / @AVGDL))) AS BM25, 
--          Weight
--  FROM TF 
--  INNER JOIN DF ON TF.Term = DF.Term
--  INNER JOIN (
--      SELECT  DocumentID, 
--              COUNT(*) AS DocumentLength 
--      FROM TF 
--      GROUP BY DocumentID
--  ) C ON TF.DocumentID = C.DocumentID
END

在最后一节(BM25实现)中,我很难构造查询以获得所需的结果格式。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 06:27:04

我在DBA.SE上重新发布了这个问题,但最终还是自己解决了。这是指向DBA.SE问题的链接,在这里我还添加了问题的解决方案。

https://dba.stackexchange.com/questions/42023/bm25-full-text-search-implementation-in-sql-server/42215#42215

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16412989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档