Нграммы без слов приказов в улье
Создание 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 |
+-----------+--------------+