Алгоритм придать больший вес первому слову - PullRequest
0 голосов
/ 04 июля 2011

Сейчас я пытаюсь создать алгоритм, который дает оценку пользователю в зависимости от его ввода в текстовое поле.

Эта оценка должна побуждать пользователя добавлять больше текста вего личный профиль.

Способ работы алгоритма заключается в том, что он должен учитывать определенный вес первого слова и немного меньший вес второго слова.Третье слово получит немного меньший вес, чем второе, и так далее.

Цель состоит в том, чтобы поощрять пользователей расширять свои тексты, но также избегать спама в целом.Например, добавленная стоимость 500-го слова не должна быть слишком большой.Разница между текстом из 100 слов и текстом из 500 слов должна быть существенной.

Имею ли я пока какой-то смысл?

Прямо сейчас, я не знаю, с чего начать с этого вопроса.Я пробовал несколько запросов Google, но, похоже, не нашел ничего подобного.Может кто-то указать мне верное направление?Я предполагаю, что такой алгоритм уже должен где-то существовать (или, по крайней мере, общая идея, вероятно, существует), но я не могу найти какую-то помощь по этому вопросу.

Может ли кто-нибудь указать мне правильное направление??Я очень признателен за любую помощь, которую вы можете мне дать.

Большое спасибо.

Ответы [ 4 ]

1 голос
/ 04 июля 2011

Зависит от того, насколько сложным вы хотите / должны быть, и хотите ли вы постоянно уменьшать вес, примененный к конкретному слову.

Самым простым было бы, возможно, применить относительно высокий вес (скажем, 1000) к первому слову, и тогда каждое последующее слово имеет вес на единицу меньше веса предыдущего слова; таким образом, второе слово имеет вес 999, третье слово имеет вес 998 и т. д. Это имеет «недостаток», заключающийся в том, что сумма весов не увеличивается после отметки 1000 слов - вам придется выбрать Сами ли это плохо для вашей конкретной ситуации. Но это может не совсем то, что вам нужно.

Если вы не хотите линейного сокращения, это может быть что-то простое, например, первое слово имеет вес X, второе слово имеет вес, равный Y% от X, третье слово имеет вес, равный Y% от Y% от X и т. Д. Разница между первым и вторым словом будет больше, чем разница между вторым и третьим словом, и к тому времени, как вы достигнете 500-го слова, разница будет очень большой меньше. Это также не сложно реализовать, так как это не сложная формула.

Или, если вам действительно нужно, вы можете использовать более сложную математическую функцию для расчета веса - попробуйте прибегнуть к «экспоненциальному затуханию» и посмотрите, будет ли это вам полезно.

1 голос
/ 04 июля 2011

Нетрудно реализовать пользовательскую функцию оценки.Вот один в псевдокоде:

function GetScore( word_count )

    // no points for the lazy user
    if word_count == 0
        return 0

    // 20 points for the first word and then up to 90 points linearly:
    else if word_count >= 1 and word_count <= 100
        return 20 + 70 * (word_count - 1) / (100) 

    // 90 points for the first 100 words and then up to 100 points linearly:
    else if word_count >= 101 and word_count <= 1000
        return 90 + 10 * (word_count - 100) / (900) 

    // 100 points is the maximum for 1000 words or more:
    else
        return 100

 end function
1 голос
/ 04 июля 2011
// word count in user description
double word_count = ...; 

// word limit over which words do not improve score
double word_limit = ...;

// use it to change score progression curve
// if factor = 1, progression is linear
// if factor < 1, progression is steeper at the beginning
// if factor > 1, progression is steeper at the end
double factor = ...;


double score = pow(min(word_count, word_limit) / word_limit, factor);
0 голосов
/ 05 июля 2011

Я бы выбрал что-то вроде result = 2*sqrt(words_count), в любом случае вы можете использовать любую функцию, производная которой меньше 1, например log

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...