Подсчет количества вхождений слов в строку

Пусть есть Таблица с набором строк в каждой ячейке. Для простоты все в одной колонке.

Требуется посчитать количество слов, которые встречаются в этих фразах. Другими словами, узнать частоту употребления слов.

Основное решение

Например, в колонке 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

Комментарии

Не нашли ответ? Пишите!

Имя

Электронная почта *

Сообщение *