def search_article_by_key_word(theme_name, version_id, key_word, page_id):
    try:
        news_id2index_dict, news_obj_list = file_tools.get_news_id2index_dict_and_obj_list(themes_data_dir, theme_name, version_id)
        
        ori_tag_list = ["highlight_zheshang", "highlight_comm", "highlight_resh", "highlight_comp"]
        hit_word_tag = "<highlight_red>" + key_word + "</highlight_red>"

        key_word_tag_list = ['<' + ori_tag_list[i] + '>' + key_word + '</' + ori_tag_list[i] + '>' for i in range(0, len(ori_tag_list))]

        theme_article_count = len(news_obj_list)
        news_obj_filtered_list = []
        for article in news_obj_list:

            if key_word != "all":
                hit = False
                for key_word_tag in key_word_tag_list: 
                    hit = (hit or (key_word_tag in article.body))
                if not hit: 
                    continue

            #print(article.body)
            for key_word_tag in key_word_tag_list:
                article.body = article.body.replace(key_word_tag, hit_word_tag)
            news_obj_filtered_list.append(article)

        article_search_result_count = len(news_obj_filtered_list)
        limit = 10
        paginator = Paginator(news_obj_filtered_list, limit)
        page_id = page_id
        paginator_article_list = paginator.page(page_id)
        return paginator_article_list, theme_article_count, article_search_result_count
    except Exception as e:
        print(e)
        return None
def get_news_obj_list_and_unremark_page_id(theme_name, version_id, user_name):

    news_id2index_dict, news_obj_list = file_tools.get_news_id2index_dict_and_obj_list(themes_data_dir, theme_name, version_id)

    remarked_news_id_set = set(db_tools.get_remarked_news_id_list(theme_name, version_id, user_name))

    ori_news_id_set = set(news_id2index_dict.keys())

    unremark_news_id_set = ori_news_id_set - remarked_news_id_set
    next_unremark_article_page_id = 0
    if len(unremark_news_id_set) != 0:
        next_unremark_article_page_id = min([news_id2index_dict[news_id] for news_id in unremark_news_id_set])

    return news_obj_list, next_unremark_article_page_id