Поскольку последние несколько месяцев я работал исключительно с JavaScript, я решил сделать проект с одним из первых языков, которые я изучил, когда начал серьезно относиться к программированию. Python!
В связи с этим мне потребовались некоторые идеи для проекта, поэтому я решил возиться с Reddit API и хотел сделать проект типа анализа / визуализации данных. Затем я просмотрел документацию по оболочке под названием PRAW и увидел, что могу извлекать комментарии, и поэтому мне пришла в голову идея находить самые популярные слова на основе комментариев к каждому субреддиту.
Остерегайтесь, впереди много технических болтовни, не стесняйтесь переходить до конца, чтобы увидеть результаты
Оболочка поставляется с методом, который возвращает массив, содержащий отдельные элементы отправки, каждый со своими собственными комментариями. Оттуда я мог перебирать каждое сообщение, а затем извлекать из каждого комментария отдельные слова и анализировать их. Легко, правда? или так я думал.
Как оказалось, комментарии на самом деле представляют собой гигантский набор отдельных персонажей! Итак, теперь мне нужно было найти способ преобразовать гигантский массив символов в отдельные слова.
Решение, которое я придумал, было простым. Каждый раз, когда я встречал пустой символ, это означало, что текущее слово закончилось. Поэтому я бы объединял каждый символ, пока не дойду до пустого места, и сохраню строку в массив.
Получившийся массив выглядел так:
Идет прогресс, но, как вы можете видеть, есть символы, которые не являются буквами, которые в дальнейшем могут исказить данные. Так что мне нужен был способ избавиться от них. К счастью, в python есть изящный метод, встроенный для проверки буквенно-цифровых символов, поэтому я мог просто проверить их и соответственно уменьшить строку. Я также следил за тем, чтобы не проходили пустые слова.
Замечательно, теперь последнее, что мне нужно было сделать, это сопоставить количество символов, поэтому я использовал словарь, чтобы отслеживать количество вхождений. Затем я отсортировал его, чтобы получить самые популярные вхождения.
Когда я впервые протестировал его, я обнаружил, что, естественно, лучшими результатами будут общие слова, такие как «то», «это», «то» и т. Д., И поэтому я хотел игнорировать эти общие слова, чтобы найти слова, более уникальные для каждого субреддита. Не очень элегантное, но эффективное решение заключалось в том, чтобы создать набор общих слов, и перед добавлением слова в список он проверяет, есть ли слово в наборе, и игнорирует его, если это так. Я использовал набор вместо обычного списка для более эффективного времени поиска O (1) против O (n)
теперь у меня есть упорядоченное сопоставление уникальных слов с субреддитом, поэтому мне нужно просто отобразить его. У Python есть аккуратная библиотека под названием Matplotlib, которая может красиво представлять данные. Я использовал компонент круговой диаграммы для отображения данных и выбрал 10 самых популярных слов.
Результаты были великолепны, я протестировал его на нескольких субреддитах, каждый с размером выборки в 10 000 комментариев. Вот что сказали сабреддиты:
Внимание, впереди много нецензурной брани! (в конце концов, это Reddit)
Это был действительно забавный хакер, который оказался технически сложнее, чем я ожидал. Вы можете посмотреть его код вместе с другими моими проектами здесь
Спасибо за прочтение! Надеюсь, вы кое-что узнали, было ли это о Reddit или о технологиях.