代码之家  ›  专栏  ›  技术社区  ›  Andrew Harry

在位置索引中查找bigram

  •  1
  • Andrew Harry  · 技术社区  · 17 年前

    我有一个表,它索引了一堆文档中单词的位置。 我想找出这组中最常见的大字。

    MSSQL 2008 ? 该表具有以下结构:

    LocationID -> DocID -> WordID -> Location
    

    我想尝试做一些复杂的连接。。。我只是在做我的头。

    有没有一个简单的方法可以做到这一点?

    样本数据

    LocationID  DocID   WordID  Location
    21952       534     27  155
    21953       534         109     156
    21954       534       4     157
    21955       534     45      158
    21956       534     37      159
    21957       534     110     160
    21958       534     70      161
    
    1 回复  |  直到 17 年前
        1
  •  1
  •   Kenan Banks    17 年前

    我写SQL已经好几年了,所以我的语法可能有点不对劲;不过,我相信这个逻辑是正确的。

    SELECT CONCAT(i.WordID, "|", j.WordID) as bigram, count(*) as freq
    FROM index as i, index as j
    WHERE j.Location = i.Location+1 AND 
          j.DocID = i.DocID
    GROUP BY bigram
    ORDER BY freq DESC
    

    如果有用的话,您还可以将实际的单词ID添加到选择列表中,并将连接添加到任何将单词ID取消引用到实际单词的表中。