реализация функции detect_anomalies
This commit is contained in:
parent
2435c11e80
commit
44af5bf3db
109
main.py
109
main.py
@ -1,55 +1,6 @@
|
|||||||
# Система анализа и модерации отзывов на товары (E-Commerce Review Engine)
|
# Система анализа и модерации отзывов на товары (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): # чистит текст отзыва от знаков препинания
|
def clean_text(text: str): # чистит текст отзыва от знаков препинания
|
||||||
black_list = ",?:();-+=*%"
|
black_list = ",?:();-+=*%"
|
||||||
@ -119,7 +70,7 @@ def enrich_review(review: dict, keywords_dict: dict, positive_words: set, negati
|
|||||||
return upgrade_review
|
return upgrade_review
|
||||||
|
|
||||||
|
|
||||||
def filter_valid_reviews(reviews: list): # фильтрует отзывы
|
def filter_valid_reviews(reviews: list, spam_indicators): # фильтрует отзывы
|
||||||
valid_base = []
|
valid_base = []
|
||||||
for i in range(len(reviews)):
|
for i in range(len(reviews)):
|
||||||
if validate_rating(reviews[i].get('rating')) and not (
|
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):
|
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):
|
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():
|
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) ========")
|
print("\n======== Введите название файла с форматом .csv или используйте по умолчанию (Enter) ========")
|
||||||
name_report = input()
|
name_report = input()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user