diff --git a/main.py b/main.py index dec0e83..386afa5 100644 --- a/main.py +++ b/main.py @@ -1,55 +1,6 @@ # Система анализа и модерации отзывов на товары (E-Commerce Review Engine) #словари -spam_indicators = [ - "заработок в интернете", "легкие деньги", "пассивный доход", - "быстрый заработок", "миллион за неделю", "лотерея", - "вы выиграли приз", "ваш приз ждет", "выигрыш", - "без вложений", "с гарантией возврата", "инвестиции", - "как заработать", "деньги просто так", "криптовалюта без риска", - "финансовая пирамида", "реферальная программа", "партнерская программа" -] -positive_words = {"отличное качество", "высокое качество", "хорошее качество", - "качественный", "добротный", "надежный", "прочный", "долговечный", - "превосходный", "безупречный", "аккуратно сделан", "хорошая сборка", - "качественные материалы", "ничего не люфтит", "сидит плотно", - "отлично работает", "супер", "огонь", "класс", "достойный", - "не уступает бренду", "сделан на совесть" -} -negative_words = {"плохое качество", "низкое качество", "дешевый", "хлипкий", - "непрочный", "недолговечный", "брак", "некачественный", "сыпется", - "ломается", "разваливается", "плохая сборка", "криво сделано", - "зазоры", "люфтит", "скрипит", "хрупкий", "одноразовый", "дешевка", - "не соответствует заявленному", "отвратительное качество", - "ужасное качество", "худшее качество", "мусор", "шлак", "не годится" -} -delivery_words = [ - "быстрая доставка", "бесплатная доставка", "доставка вовремя", "курьер вежливый", - "упаковано хорошо", "доставка день в день", "отслеживание", "пришло целым", - "забрал сам", "пункт выдачи рядом", "доставили быстро", "соблюдены сроки", - "уведомления о статусе", "sms оповещение", "забрать сегодня", "долгая доставка", - "опоздали", "повреждена упаковка", "не дозвониться", "потеряли заказ", - "не пришло уведомление", "неправильный адрес", "курьер грубый", "пункт выдачи далеко", - "ждал неделю", "разбито при доставке", "не привезли", "потеряли посылку", - "не отслеживается", "перепутали заказ", "плохая упаковка", "доставка платная", - "дорогая доставка", "не привезли вовремя", "вернули на склад" -] -price_words = [ - "низкая цена", "доступная цена", "дешево", "бюджетный", - "хорошая цена", "адекватная цена", "цена качество", "скидка", - "распродажа", "акция", "выгодно", "недорого", - "дешевле чем везде", "цена огонь", "цена порадовала", "экономия", - "дешево и сердито", "спеццена", "цена кусается", "дорого", - "высокая цена", "завышенная цена", "переплата", "цена не оправдана", - "дороговато", "цены конские", "цена завышена", "не по карману", - "золотое", "слишком дорого", "цена не соответствует качеству", "дороже чем у других", - "наценка", "обдираловка", "цена выросла", "денег не стоит" -] -keywords_dict = { - "quality": list(positive_words) + list(negative_words), - "delivery": delivery_words, - "price": price_words -} def clean_text(text: str): # чистит текст отзыва от знаков препинания black_list = ",?:();-+=*%" @@ -119,7 +70,7 @@ def enrich_review(review: dict, keywords_dict: dict, positive_words: set, negati return upgrade_review -def filter_valid_reviews(reviews: list): # фильтрует отзывы +def filter_valid_reviews(reviews: list, spam_indicators): # фильтрует отзывы valid_base = [] for i in range(len(reviews)): if validate_rating(reviews[i].get('rating')) and not ( @@ -146,7 +97,13 @@ def calculate_average_rating_by_topic(reviews: list): def detect_anomalies(reviews: list, sentiment_threshold: float = 0.5): - return list + anomalys = [] + for i in reviews: + print(i) + if ((i['rating'] >= 4 and i['sentiment'] < -sentiment_threshold) or + (i['rating'] <= 2 and i['sentiment'] > sentiment_threshold)): + anomalys.append(i['id']) + return anomalys def generate_summary_report(valid_reviews: list, all_reviews_count: int, anomalies: list): @@ -154,7 +111,55 @@ def generate_summary_report(valid_reviews: list, all_reviews_count: int, anomali def main(): - + spam_indicators = [ + "заработок в интернете", "легкие деньги", "пассивный доход", + "быстрый заработок", "миллион за неделю", "лотерея", + "вы выиграли приз", "ваш приз ждет", "выигрыш", + "без вложений", "с гарантией возврата", "инвестиции", + "как заработать", "деньги просто так", "криптовалюта без риска", + "финансовая пирамида", "реферальная программа", "партнерская программа" + ] + positive_words = {"отличное качество", "высокое качество", "хорошее качество", + "качественный", "добротный", "надежный", "прочный", "долговечный", + "превосходный", "безупречный", "аккуратно сделан", "хорошая сборка", + "качественные материалы", "ничего не люфтит", "сидит плотно", + "отлично работает", "супер", "огонь", "класс", "достойный", + "не уступает бренду", "сделан на совесть" + } + negative_words = {"плохое качество", "низкое качество", "дешевый", "хлипкий", + "непрочный", "недолговечный", "брак", "некачественный", "сыпется", + "ломается", "разваливается", "плохая сборка", "криво сделано", + "зазоры", "люфтит", "скрипит", "хрупкий", "одноразовый", "дешевка", + "не соответствует заявленному", "отвратительное качество", + "ужасное качество", "худшее качество", "мусор", "шлак", "не годится" + } + delivery_words = [ + "быстрая доставка", "бесплатная доставка", "доставка вовремя", "курьер вежливый", + "упаковано хорошо", "доставка день в день", "отслеживание", "пришло целым", + "забрал сам", "пункт выдачи рядом", "доставили быстро", "соблюдены сроки", + "уведомления о статусе", "sms оповещение", "забрать сегодня", "долгая доставка", + "опоздали", "повреждена упаковка", "не дозвониться", "потеряли заказ", + "не пришло уведомление", "неправильный адрес", "курьер грубый", "пункт выдачи далеко", + "ждал неделю", "разбито при доставке", "не привезли", "потеряли посылку", + "не отслеживается", "перепутали заказ", "плохая упаковка", "доставка платная", + "дорогая доставка", "не привезли вовремя", "вернули на склад" + ] + price_words = [ + "низкая цена", "доступная цена", "дешево", "бюджетный", + "хорошая цена", "адекватная цена", "цена качество", "скидка", + "распродажа", "акция", "выгодно", "недорого", + "дешевле чем везде", "цена огонь", "цена порадовала", "экономия", + "дешево и сердито", "спеццена", "цена кусается", "дорого", + "высокая цена", "завышенная цена", "переплата", "цена не оправдана", + "дороговато", "цены конские", "цена завышена", "не по карману", + "золотое", "слишком дорого", "цена не соответствует качеству", "дороже чем у других", + "наценка", "обдираловка", "цена выросла", "денег не стоит" + ] + keywords_dict = { + "quality": list(positive_words) + list(negative_words), + "delivery": delivery_words, + "price": price_words + } print("\n======== Введите название файла с форматом .csv или используйте по умолчанию (Enter) ========") name_report = input()