Идет поток коротких текстов. Каждый из них имеет размер твита, или давайте просто предположим, что все они твиты.
Пользователь может голосовать за любой твит. Итак, каждый твит имеет одно из следующих трех состояний:
актуально (за)
по умолчанию (нейтрально, т.е. без голосования)
неактуально (отрицательный голос)
Всякий раз, когда приходит новый набор твитов, они будут отображаться в определенном порядке. Этот порядок определяется голосами пользователя за все предыдущие твиты. Цель состоит в том, чтобы присвоить балл каждому новому твиту. Эта оценка рассчитывается на основе схожести или совпадения слов между текстом этого твита и всеми предыдущими твитами, за которые проголосовал пользователь. Другими словами, твит с наивысшим баллом будет тем, который содержит максимальное количество слов, за которые ранее проголосовали положительно, и минимум слов, за которые ранее проголосовали как отрицательные. Кроме того, новые твиты с высокой оценкой будут вызывать уведомление для пользователя, поскольку они считаются очень актуальными.
И последнее, минимум семантического рассмотрения (обработка естественного языка) было бы здорово.
Я читал о Частота термина — обратная частота документа и нашел это очень простое и базовое решение:
Напоминаем: высокий вес в tf–idf достигается высокой частотой слова и низкой суммарной частотой слова во всей коллекции.
Если пользователь проголосует за твит, все слова этого твита получат положительный балл (то же самое для отрицательного случая). Это означает, что у нас будет большой набор слов, где каждое слово имеет общее количество положительных и отрицательных баллов.
Если (оценка твита > 0), то этот твит вызовет уведомление.
Оценка твита = сумма оценок всех отдельных слов этого твита.
оценка слов = частота слов * обратная общая частота
частота слов во всех предыдущих голосованиях = (всего положительных голосов за это слово - общее отрицательных голосов за это слово) / всего голосов за это слово
Обратная общая частота = логарифм (общее количество голосов за все слова / общее количество голосов за это слово)
Достаточно ли этого метода? Я открыт для любых лучших методов и любого готового API или алгоритма.