Статьи

Подсчет частоты слов в файле с использованием Python

Задумывались ли вы о быстром способе рассказать, на чем сосредоточен какой-то документ? Какова его основная тема? Позвольте мне дать вам этот простой трюк. Перечислите уникальные слова, упомянутые в документе, а затем проверьте, сколько раз было упомянуто каждое слово (частота). Этот способ даст вам представление о том, о чем документ в основном. Но это не будет легко работать вручную, поэтому нам нужен какой-то автоматизированный процесс, не так ли?

Да, автоматизированный процесс сделает это намного проще. Давайте посмотрим, как мы можем перечислить различные уникальные слова в текстовом файле и проверить частоту каждого слова с помощью Python.

В этом уроке мы будем использовать test.txt в качестве нашего тестового файла. Идите и скачайте, но не открывайте! Давайте сделаем маленькую игру. Текст в этом тестовом файле взят из одного из моих руководств в Envato Tuts +. Основываясь на частоте слов, давайте догадаемся, из какого из моих руководств этот текст был извлечен.

Пусть игра начнется!

Поскольку мы собираемся применить шаблон в нашей игре, нам нужно использовать регулярные выражения (регулярные выражения). Если «регулярные выражения» — это новый термин для вас, это хорошее определение из Википедии:

Последовательность символов, определяющих шаблон поиска, в основном для использования при сопоставлении с шаблоном или при сопоставлении строк, т. Е. Операции типа «найти и заменить». Эта концепция возникла в 1950-х годах, когда американский математик Стивен Клин формализовал описание обычного языка и стал широко использоваться в утилитах обработки текста Unix ed, редакторе и grep, фильтре.

Если вы хотите узнать больше о регулярных выражениях, прежде чем продолжить работу с этим учебником, вы можете посмотреть мой другой учебник Регулярные выражения в Python и вернуться снова, чтобы продолжить этот учебник.

Давайте работать шаг за шагом над созданием этой игры. Первое, что мы хотим сделать, это сохранить текстовый файл в строковой переменной.

1
2
document_text = open(‘test.txt’, ‘r’)
text_string = document_text.read()

Теперь, чтобы упростить применение нашего регулярного выражения, давайте превратим все буквы в нашем документе в строчные буквы, используя функцию lower () , следующим образом:

1
text_string = document_text.read().lower()

Давайте напишем наше регулярное выражение, которое будет возвращать все слова с количеством символов в диапазоне [3-15] . Начиная с 3 мы избегаем слов, которые могут не заинтересовать нас в подсчете их частоты, например, если , в , и т. Д., И слова, длина которых превышает 15 могут быть неверными. Регулярное выражение для такого шаблона выглядит следующим образом:

1
\b[az]{3,15}\b

\b относится к границе слова . Для получения дополнительной информации о границе слова, вы можете проверить этот учебник .

Приведенное выше регулярное выражение можно записать следующим образом:

1
match_pattern = re.search(r’\b[az]{3,15}\b’, text_string)

Поскольку мы хотим просмотреть несколько слов в документе, мы можем использовать функцию findall :

Возвратите все неперекрывающиеся совпадения шаблона в строке в виде списка строк. Строка сканируется слева направо, и совпадения возвращаются в указанном порядке. Если в шаблоне присутствует одна или несколько групп, вернуть список групп; это будет список кортежей, если шаблон имеет более одной группы. Пустые совпадения включаются в результат, если они не касаются начала другого совпадения.

На этом этапе мы хотим найти частоту каждого слова в документе. Подходящей концепцией для использования здесь являются словари Python , поскольку нам нужны пары key-value , где key — это слово , а value представляет собой частоту слов, появившихся в документе.

Предполагая, что мы объявили пустой словарь frequency = { } , вышеприведенный абзац будет выглядеть следующим образом:

1
2
3
for word in match_pattern:
   count = frequency.get(word,0)
   frequency[word] = count + 1

Теперь мы можем увидеть наши ключи, используя:

1
frequency_list = frequency.keys()

Наконец, чтобы получить слово и его частоту (сколько раз оно появилось в текстовом файле), мы можем сделать следующее:

1
2
for words in frequency_list:
   print words, frequency[words]

Давайте соберем программу в следующем разделе и посмотрим, как выглядит результат.

Обсудив программу шаг за шагом, давайте теперь посмотрим, как выглядит программа:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
import re
import string
frequency = {}
document_text = open(‘test.txt’, ‘r’)
text_string = document_text.read().lower()
match_pattern = re.findall(r’\b[az]{3,15}\b’, text_string)
 
for word in match_pattern:
    count = frequency.get(word,0)
    frequency[word] = count + 1
     
frequency_list = frequency.keys()
 
for words in frequency_list:
    print words, frequency[words]

Если вы запустите программу, вы должны получить что-то вроде следующего:

Mac OS X терминал

Вернемся к нашей игре. Говоря о частотах слов, как вы думаете, о чем говорил тестовый файл (с содержанием из моего другого учебника по Python)?

(Подсказка: проверьте слово с максимальной частотой).