Нграммы без слов приказов в улье

Создание name_tab:

CREATE TABLE name_tab (country string,
new_item ARRAY<STRUCT<ngram:array<string>,
estfrequency:double>>);

Вставить заявление:

INSERT OVERWRITE TABLE name_tab
SELECT country, ngrams(sentences(var2),3,100) as word_map
FROM bdd 
GROUP BY country;

Создание name_tab_new:

CREATE TABLE name_tab_new (country string, ngram1 string, ngram2 string,  ngram3 string, estfrequency double);

Вставить заявление:

INSERT OVERWRITE TABLE name_tab_new
SELECT country , X.ngram[0], X.ngram[1], X.ngram[2], X.estfrequency
FROM name_tab
LATERAL VIEW explode(new_item) Z as X;

Эти запросы в Hive работают. Это создает N грамм по стране. Проблема: для одной страны есть разница между этой нграммой {aa, bb, cc} и это нграм {bb, aa, cc},

Я хочу решение, которое не имеет значения, слова заказы. Для одной страны я не хочу различия между {aa, bb, cc} а также {bb, aa, cc}, Я хочу только один из них.

большое спасибо

Пример результатов:

* Англия, хлеб, бутерброд, сок, 120

Англия, стол, стул, инструмент, 54

Англия, бутерброд, хлеб, сок, 32

Италия, море, рома, колизей, 47*

На самом деле, я хочу это:

* Англия, хлеб, бутерброд, сок, 152

Англия, стол, стул, инструмент, 54

Италия, море, рома, колизей, 47*

Я надеюсь, что в функции ngrams есть опция, которая не учитывает порядок.

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

В таблице name_tab у нас есть:

Первая строка Англия, {"ngram":["хлеб", "сэндвич", "сок"],"estfrequency":120.0}, {"ngram":["desk","стул", "инструмент"],"estfrequency":54.0}, {"ngram":["sandwich","bread","juice"],"estfrequency":32.0}

Вторая строка Италия, {"ngram":["sea","Roma","Coliseo"],"estfrequency":47.0}

1 ответ

демонстрация

with t as (select 'a  b a c c a b b a a a a c c b c a b c a b' as mycol)

select      sort_array(e.ngram) as ngram
           ,sum(e.estfrequency) as estfrequency

from       (select  explode(ngrams(sentences(mycol),2,1000)) e

            from    t
            ) t

group by    sort_array(e.ngram)
;

+-----------+--------------+
|   ngram   | estfrequency |
+-----------+--------------+
| ["a","a"] | 3.0          |
| ["a","b"] | 6.0          |
| ["a","c"] | 5.0          |
| ["b","b"] | 1.0          |
| ["b","c"] | 3.0          |
| ["c","c"] | 2.0          |
+-----------+--------------+
Другие вопросы по тегам