Пусть есть Таблица с набором строк в каждой ячейке. Для простоты все в одной колонке.
Требуется посчитать количество слов, которые встречаются в этих фразах. Другими словами, узнать частоту употребления слов.
Основное решение
Например, в колонке A:A
данные.
Нужно все свести в одну ячейку =QUERY(A:A;;99^99)
, чтобы получить полный текст.
Далее разбить текст на отдельные слова =SPLIT(QUERY(A:A;;99^99);" ")
.
Необходимо это все транспонировать TRANSPOSE(SPLIT(QUERY(A:A;;99^99);" "))
, чтобы получить вертикальный массив для запроса.
Список слов с количеством вхождений с сортировкой по умолчанию можно получить так
=QUERY(
TRANSPOSE(SPLIT(QUERY(A:A;;99^99);" "));
"select lower(Col1), count(Col1)
group by lower(Col1)"
)
С заголовками и явной сортировкой
=QUERY(
TRANSPOSE(SPLIT(QUERY(A:A;;99^99);" "));
"select lower(Col1), count(Col1)
group by lower(Col1)
order by lower(Col1)
label lower(Col1)'Слово ⇧', count(Col1)'Количество'";
1
)
Сортировка по убыванию количества вхождений
=QUERY(
TRANSPOSE(SPLIT(QUERY(A:A;;99^99);" "));
"select lower(Col1), count(Col1)
group by lower(Col1)
order by count(Col1) desc
label lower(Col1)'Слово', count(Col1)'Количество ⇩'";
1
)
Решение со списком исключений
Например, в колонке A:A
данные, а в колонке I:I
- список слов, который не нужно подсчитывать.
Получить тексты можно и так (в колонку K:K
):
=ARRAYFORMULA(LOWER(TRANSPOSE(SPLIT(QUERY(A:A;;99^99);" "))))
Теперь список слов за исключением заданного списка с сортировкой по убыванию количества вхождений будет таким
=QUERY(
FILTER(K2:K;ISNA(MATCH(K2:K;I2:I;0)));
"select lower(Col1), count(Col1) where Col1<>''
group by lower(Col1)
order by count(Col1) desc
label lower(Col1)'Слово', count(Col1)'Количество ⇩'";
1
)
Таблица с полными примерами Частота употребления слов. QUERY
Комментарии
Отправить комментарий
Спасибо за ваше сообщение. Оно может быть не опубликовано сразу из-за того, что попало на предмодерацию. Дождитесь публикации сообщения. Спасибо за понимание.
Thank you for your message. It may not be published immediately due to the fact that it got to pre-moderation. Wait for the message to be published. Thank you for understanding.