{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Python для сбора данных\n", "\n", "*Алла Тамбовцева*\n", "\n", "## Домашнее задание 2 (продвинутая часть)\n", "\n", "### Формат сдачи\n", "\n", "Дедлайн: 22 марта, 23:59 Формат сдачи: ipynb-файл или py-файл с решением задач нужно загрузить на Dropbox по [ссылке](https://www.dropbox.com/request/vE9rHdMyDnAtv4TwMhlO).\n", "\n", "Задание основано на [обзоре](https://nbviewer.jupyter.org/github/allatambov/py-icef/blob/master/2-26-02/texts.ipynb) по работе с текстами и [материалах](https://www.datacamp.com/community/tutorials/wordcloud-python) по облакам слов на DataCamp." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задание 1\n", "\n", "Напишите функцию, которая принимает на вход два txt-файла (их названия) и делает следующее:\n", "\n", "* Считывает из файлов тексты и формирует на их основе строки: одна строка для каждого текста.\n", "\n", "* Удаляет из строк всю пунктуацию и цифры, приводит все буквы к нижнему регистру. \n", "\n", "* Приводит все слова в каждой строке к начальной форме и сохраняет преобразованные тексты.\n", "\n", "* На основе нормализованных текстов (слова в начальной форме, в нижнем регистре без лишних символов) считает меру косинусной близости и возвращает её значение, то есть одно число типа *float*. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Подсказка:** почитайте [обзор](https://towardsdatascience.com/overview-of-text-similarity-metrics-3397c4601f50) по мерам близости текстов в Python. Обратите внимание на следующий код в обзоре:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from collections import Counter\n", "from sklearn.feature_extraction.text import CountVectorizer\n", "from sklearn.metrics.pairwise import cosine_similarity\n", "def get_cosine_sim(*strs): \n", " vectors = [t for t in get_vectors(*strs)]\n", " return cosine_similarity(vectors)\n", " \n", "def get_vectors(*strs):\n", " text = [t for t in strs]\n", " vectorizer = CountVectorizer(text)\n", " vectorizer.fit(text)\n", " return vectorizer.transform(text).toarray()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Посмотрите на результат исполнения следующего кода: " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "get_cosine_sim(\"very good dog\", \"very good bird\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задание 2\n", "\n", "Напишите функцию, которая принимает на вход текст, сохранённый в одну строку, строит по нему облако слов (настройки можете выбрать самостоятельно) и сохраняет в файл `wordcloud.png`. \n", "\n", "**Внимание:** облако слов должно выводиться на белом или чёрном фоне, цвет фона должен выбираться в зависимости от тональности: положительно окрашенный – белый, отрицательно окрашенный – чёрный. \n", "\n", "Тональность текста должна определяться простым способом, без обучения, на основе списков тональных слов. Если доля положительно окрашенных слов больше доли отрицательно окрашенных слов, то текст считается положительным, иначе – отрицательным. Списки положительно и отрицательно окрашенных слов можно создать на основе файла `emo_dict.csv` ([ссылка](https://github.com/dkulagin/kartaslov/tree/master/dataset/emo_dict) на тональный словарь русского языка)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | term | \n", "tag | \n", "value | \n", "
---|---|---|---|
0 | \n", "счастливая | \n", "PSTV | \n", "3.0 | \n", "
1 | \n", "адреналин | \n", "PSTV | \n", "3.0 | \n", "
2 | \n", "телепортация | \n", "PSTV | \n", "3.0 | \n", "
3 | \n", "сбора | \n", "PSTV | \n", "3.0 | \n", "
4 | \n", "партнёрша | \n", "PSTV | \n", "3.0 | \n", "