Beispiel #1
0
def recommendations():
    s = session()
    labeled = s.query(News).filter(
        News.label != None).all()  #новости, которые разметили
    news_title = [news.title for news in labeled]
    news_label = [news.label for news in labeled]
    bayes = NaiveBayesClassifier(
    )  #пропускаем данные через наивный классификатор
    bayes.fit(news_title, news_label)
    notlabeled = s.query(News).filter(
        News.label == None).all()  #новости, которые не разметили
    new_news_title = [news.title for news in notlabeled]
    new_news_label = bayes.predict(new_news_title)
    good_news, maybe_news, never_news = [], [], []
    #Добавляем метки нерзамечанным новостям
    for id, label in enumerate(new_news_label):
        if label == 'good':
            good_news.append(notlabeled[id])
        elif label == 'maybe':
            maybe_news.append(notlabeled[id])
        elif label == 'never':
            never_news.append(notlabeled[id])
    classified_news = [good_news, maybe_news, never_news]
    return template('news_ranked',
                    good_news=good_news,
                    maybe_news=maybe_news,
                    never_news=never_news)
Beispiel #2
0
def add_label():
    s = session()
    label = request.GET['label']
    newid = request.GET['id']
    headline = s.query(News).filter(News.id == int(newid)).all()[0]
    headline.label = label
    s.commit()
    redirect("/news")
Beispiel #3
0
def add_label():
    label = request.query.label
    id = request.query.id
    s = session()
    changing_news = s.query(News).get(id)
    changing_news.label = label
    s.commit()
    redirect("/news")
Beispiel #4
0
def add_label():
    # 1. Получить значения параметров label и id из GET-запроса
    id = request.query.get('id')
    label = request.query.get('label')
    s = session()
    entry = s.query(News).get(id)
    # 3. Изменить значение метки записи на значение label
    entry.label = label
    # 4. Сохранить результат в БД
    s.commit()
    redirect("/news")
Beispiel #5
0
def update_news():
    news_s = get_news('https://news.ycombinator.com/newest', n_pages=5)
    s = session()
    news_bd = s.query(News).all()
    news_bd = [(n.title, n.author) for n in news_bd]
    for new in news_s:
        if (new['title'], new['author']) not in news_bd:
            news = News(title=new['title'],
                        author=new['author'],
                        url=new['url'],
                        comments=new['comments'],
                        points=new['points'])
            s.add(news)
            s.commit()
    redirect('/news')
Beispiel #6
0
def update_news():
    new_news_list = get_news("https://news.ycombinator.com/", n_pages=5)
    s = session()
    old_news = s.query(News).all()
    for news in new_news_list:
        for o_news in old_news:
            if (news['title'] == o_news.title
                    and news['author'] == o_news.author):
                break
        else:
            new_news = News(title=news['title'],
                            author=news['author'],
                            url=news['url'],
                            comments=news['comments'],
                            points=news['points'])
            s.add(new_news)
            s.commit()
    redirect("/news")
Beispiel #7
0
def update_news():
    news_list = get_news("https://news.ycombinator.com/newest", n_pages=1)
    cnt = 0
    for elem in news_list:
        s = session()
        if len(
                s.query(News).filter(News.title == elem['title']).filter(
                    News.author == elem['author']).all()) > 0:
            print('Not writing')
            continue
        cnt += 1
        print('Writing data element:', cnt)
        news = News(title=elem['title'],
                    author=elem['author'],
                    url=elem['url'],
                    comments=elem['comments'],
                    points=elem['points'])
        s.add(news)
        s.commit()
    redirect("/news")
Beispiel #8
0
def recommendations():
    # 1. Получить список неразмеченных новостей из БД
    # 2. Получить прогнозы для каждой новости
    # 3. Вывести ранжированную таблицу с новостями
    s = session()
    none_news = []
    rows = s.query(News).filter(News.label == None).all()
    learn_news = s.query(News).filter(News.label != None).all()
    X_train, y_train = [], []
    for news in learn_news:
        X_train.append(news.title)
        y_train.append(news.label)
    X_train = [clean(x).lower() for x in X_train]
    model = NaiveBayesClassifier(alpha=1)
    model.fit(X_train, y_train)
    for news in rows:
        none_news.append(news.title)
    predict_labels = model.predict(none_news)
    for news, label in zip(rows, predict_labels):
        news.label = label
    classified_news = sorted(rows, key=lambda news: news.label)
    return template('./news_recommendations.html', rows=classified_news)
Beispiel #9
0
def classify_news():
    # 1. Получить список неразмеченных новостей из БД
    # 2. Получить прогнозы для каждой новости
    # 3. Вывести ранжированную таблицу с новостями
    s = session()

    good, maybe, never, X_train, y_train = [], [], [], [], []

    headlines_classified = s.query(News).filter(News.label != None)
    headlines_nonclassified = s.query(News).filter(News.label == None)

    for topic in headlines_classified:
        X_train.append(topic.title)
        y_train.append(topic.label)
        if topic.label == 'good':
            good.append(topic)
        elif topic.label == 'maybe':
            maybe.append(topic)
        else:
            never.append(topic)

    model = NaiveBayesClassifier()
    model.fit(X_train, y_train)

    for topic in headlines_nonclassified:
        topic.label = model.predict(topic.title)
        if topic.label == 'good':
            good.append(topic)
        elif topic.label == 'maybe':
            maybe.append(topic)
        else:
            never.append(topic)

    rows = good + maybe + never

    return template('news_template.tpl', rows=rows)
Beispiel #10
0
def news_list():
    TEMPLATE_PATH.insert(0, '')
    s = session()
    rows = s.query(News).filter(News.label == None).all()
    return template('news_template', rows=rows)
Beispiel #11
0
def news_list():
    s = session()
    rows = s.query(News).filter(News.label == None).all()
    return template('news_template.tpl', rows=rows)