2015-06-02 1 views
3

Я пытаюсь получить подсчет слов для генерации представления типа облака слов из моего PostgreSQL db. Я надеялся воспользоваться встроенной эффективностью ts_vectors. Я вижу, что есть функция ts_stats, которая возвращает список лексем и их частот, учитывая столбец ts_vector.PostgreSQL - конвертировать лексемы в полные слова через ts_stat

Строки вернулись выглядеть примерно так:

word ndoc nentry 
studi 322  43434 
compani 233  2322 

И запрос выглядит следующим образом:

SELECT * FROM ts_stat('SELECT tsv from doc') 
ORDER BY nentry DESC, ndoc DESC, word 
LIMIT 10 

Однако мне нужно полное слово, а не только лексем. Есть ли способ конвертировать лексему в одно из своих полных представлений с PostgreSQL? Вы можете легко преобразовать слово в лексему, но я не могу понять, как сделать обратное.

Спасибо.

+0

Вы когда-нибудь находили решение? –

+1

Нет, я остановился на гораздо менее эффективном решении потянуть много текста в свой код приложения и сделать подсчеты после некоторого элементарного завершения. Думаю, я взгляну на базы данных, более ориентированные на полнотекстовый поиск ... – Rob

ответ

0

Измените конфигурацию вашего ts_vector на «simple». по умолчанию используется «английский», который делает вывод , например.

SELECT * FROM ts_stat('SELECT to_tsvector(''freds company company company hello ridiculous'')'); 

выходы рассчитывает на ridicul, compani, hello, fred

с 'простой' конфигурации не происходит, вытекающих

SELECT * FROM ts_stat('SELECT to_tsvector(''simple'',''freds company company company hello ridiculous'')'); 

выходов счетчиков для: ridiculous,hello,freds,company

0

это не представляется возможным. Вы можете сохранить исходный текст в отдельный столбец.

Лексема представляет собой нормализованное представление (используя словарь или Штеммер) слов, так что он может соответствовать несколько форм: лексемы 'walk' матчей 'walks', а также 'walking', поэтому исходная форма не может быть определена.

Смежные вопросы