Нахождение биграммы в индексе местоположения - PullRequest
1 голос
/ 13 июня 2009

У меня есть таблица, которая индексирует расположение слов в пачке документов. Я хочу определить наиболее распространенные биграммы в наборе.

Как бы вы сделали это в 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 Ответ

1 голос
/ 14 июня 2009

Прошло много лет с тех пор, как я написал 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

Вы также можете добавить фактические идентификаторы слов в список выбора, если это полезно, и добавить объединение в любую таблицу, которая у вас есть, которая разыменовывает WordID для фактических слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...