{"id":42604927,"url":"https://github.com/zabojeb/tinkoff-feedback-analysis","last_synced_at":"2026-01-29T01:49:46.335Z","repository":{"id":230548218,"uuid":"779616050","full_name":"zabojeb/tinkoff-feedback-analysis","owner":"zabojeb","description":"LLM-based feedback collection and analysis system for Tinkoff","archived":false,"fork":false,"pushed_at":"2024-05-04T09:05:22.000Z","size":980,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-06T16:40:49.350Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zabojeb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-30T10:10:39.000Z","updated_at":"2024-05-06T14:53:25.000Z","dependencies_parsed_at":"2024-05-02T10:50:36.311Z","dependency_job_id":null,"html_url":"https://github.com/zabojeb/tinkoff-feedback-analysis","commit_stats":null,"previous_names":["zabojeb/tinkoff-feedback-analysis"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zabojeb/tinkoff-feedback-analysis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabojeb%2Ftinkoff-feedback-analysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabojeb%2Ftinkoff-feedback-analysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabojeb%2Ftinkoff-feedback-analysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabojeb%2Ftinkoff-feedback-analysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zabojeb","download_url":"https://codeload.github.com/zabojeb/tinkoff-feedback-analysis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabojeb%2Ftinkoff-feedback-analysis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28859935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T22:56:21.783Z","status":"ssl_error","status_checked_at":"2026-01-28T22:56:00.861Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-29T01:49:45.669Z","updated_at":"2026-01-29T01:49:46.329Z","avatar_url":"https://github.com/zabojeb.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AFAStt: Automated Feedback Analysis System for Tinkoff\n\nВременно вебсайт доступен по ссылке \u003chttps://zabojeb.github.io/tinkoff-feedback-analysis/hello.html\u003e\n\nДополнительное задание выполнено в файле .ipynb\n\n\u003e [!NOTE]\n\u003e Некоторые функции, которые не были реализованы в прототипе буду описаны здесь.\n\u003e Поэтому прочитать README - важно!\n\n## Ход работы\n### Парсинг\nМы реализовали парсинг с двух платформ:\n- \u003chttps://banki.ru\u003e\n- \u003chttps://sravni.ru\u003e\n\nТем не менее, парсинг с других платформ не представляет из себя сложной задачи.\n\nВ прототипе и датасете мы используем парсинг только с banki.ru.\nПоэтому код парсинга sravni.ru представим здесь:\n```python\ndef parse_sravniru(num, page):\n    data = {\\\"good\\\": [], \\\"bad\\\": []}\n    r = 0\n    while True:\n        if r \u003e= num:\n            with open(\\\"output.json\\\", \\\"w\\\") as f:\n                json.dump(data, f)\n            return data\n            \n        req = requests.get(f\\\"https://www.sravni.ru/proxy-reviews/reviews/?filterBy=withRates\u0026fingerPrint=ea060f38d490a841e5bae143a1505423\u0026isClient=true\u0026locationRoute=\u0026newIds=true\u0026orderBy=byDate\u0026pageIndex={page}\u0026pageSize=10\u0026reviewObjectId=5bb4f769245bc22a520a6353\u0026reviewObjectType=banks\u0026specificProductId=\u0026withVotes=true\\\")\n        reviews = req.json()\n        \n        if reviews[\\\"items\\\"] == []:\n            return data\n\n        for item in reviews[\\\"items\\\"]:\n            review = item[\\\"text\\\"].replace(\\\"\\\\n\\\", \\\"\\\").replace(\\\"\\\\r\\\", \\\"\\\").replace(\\\"\\\\t\\\", \\\"\\\")\n            if review != \\\"\\\" and review != \\\" \\\" and review != \\\"\\\\n\\\" and review != ', ':\n                if int(item[\\\"rating\\\"]) in (1, 2, 3):\n                    data[\\\"bad\\\"].append(review)\n                elif int(item[\\\"rating\\\"]) in (4, 5):\n                    data[\\\"good\\\"].append(review)\n                    \n                r += 1\n                \n                print(f\\\"Получено отзывов с сравни.ру: {r}/{num}\\\")\n                \n            page += 1\n```\n\n### Почему вебсайт?\nВ презентации мы говорили, что сделаем приложение или вебсайт на React.\nСейчас вебсайт написан на чистом HTML5+CSS+JS\n\nМы выбрали такой формат из-за удобства использования. Вебсайтом можно пользоваться на любом устройстве.\nЭтому способствует адаптивный дизайн.\n\n### Как оно работает?\nУ нас есть python-скрипт, который парсит отзывы, анализирует их и формирует базу данных.\nПарсинг - довольно долгий процесс. Оценка длится еще больше.\n\nПоэтому для начала работы нужно сформировать первоначальный полный датасет,\nа затем обновлять его по запросу пользователя.\n\nПри обновлении в датасет будут добавляться **только** новые отзывы.\n\nСейчас наш датасет статический и не может обновляться (хотя мы можем это реализовать),\nпотому что мы не обладаем достаточными финансовыми ресурсами.\n\n### To-Do List\n- Сортировка и фильтрация по времени. Это довольно легко реализовать, ведь с отзывами хранится время публикации в формате timestamp.\n- Выявление средней оценки. Этот параметр также есть в датасете, это легко реализовать.\n- Выявление \"реальной\" оценки. Это уже не совсем легко, но достаточно просто. На данный момент мы тестируем различные модели с Hugging Face для выявления эмоциональной окраски отзывов и их анализа.\n- Отображение графиков с динамикой изменения среднй оценки. Это реализуемо, но для этого нужен большой датасет и, возможно, реализация предыдущего пункта.\n\n\u003e [!WARNING]\n\u003e Project is WIP now.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabojeb%2Ftinkoff-feedback-analysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzabojeb%2Ftinkoff-feedback-analysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabojeb%2Ftinkoff-feedback-analysis/lists"}