Это возможно в Улей. Разбейте не-буквенные символы и используйте боковой вид + разнесение, затем подсчитайте слова:
with your_data as(
select stack(2,
'Hey, how are you?',
'Hey, Who is there?'
) as initial_string
)
select w.word, count(*) cnt
from
(
select split(lower(initial_string),'[^a-zA-Z]+') words from your_data
)s lateral view explode(words) w as word
where w.word!=''
group by w.word;
Результат:
word cnt
are 1
hey 2
how 1
is 1
there 1
who 1
you 1
Еще один метод с использованием sentences
Функция, возвращает массив токенизированных предложений (массив слов):
with your_data as(
select stack(2,
'Hey, how are you?',
'Hey, Who is there?'
) as initial_string
)
select w.word, count(*) cnt
from
(
select sentences(lower(initial_string)) sentences from your_data
)d lateral view explode(sentences) s as sentence
lateral view explode(s.sentence) w as word
group by w.word;
Результат:
word cnt
are 1
hey 2
how 1
is 1
there 1
who 1
you 1
предложений (строка str, строка lang, строка языка) Функция разбивает строку текста на естественном языке на слова и предложения, где каждое предложение разбивается на соответствующей границе предложения и возвращается в виде массива слов. 'Lang' и 'locale' являются необязательными аргументами. Например, предложения («Привет! Как дела?») Возвращает ((«Привет», «Есть»), («Как», «Есть», «Вы»))