2011-07-04 10 views
-1

現在,我試圖創建一個算法,根據他在文本字段中的輸入給用戶一個分數。賦予第一個單詞更多權重的算法

此分數應該鼓勵用戶在他的個人資料中添加更多文本。

該算法應該工作的方式是它應該對第一個單詞進行一定的權重,對第二個單詞的權重應該小一些。第三個單詞的重量會比第二個單詞少一點,等等。

我們的目標是鼓勵用戶擴展他們的文本,但同時也要避免垃圾郵件。例如,第500個詞的附加價值應該不會太大。 100個單詞的文本和500個單詞的文本之間的差異應該很大。

我到目前爲止有什麼意義?

現在,我不知道從哪裏開始這個問題。我嘗試過多次Google查詢,但似乎沒有發現任何類似的內容。任何人都可以將我指向正確的方向嗎? 我想這樣的算法必須已經存在某處(或者至少可能存在一般想法),但我似乎無法找到有關該主題的一些幫助。

任何人都可以指向正確的方向嗎? 我真的很感謝你能給我的任何幫助。

非常感謝。

+0

這是什麼編程語言? – EdoDodo

+0

不幸的是,它最終會寫成VB(不是我最喜歡的語言) –

回答

1
// 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); 
1

這取決於您想要/需要它的複雜程度,以及您是否希望持續減少應用於特定單詞的權重。

最簡單的可能是對第一個單詞應用一個相對較高的權重(比如1000),然後每個後續單詞的權重比前一個單詞的權重小一個;所以第二個單詞的權重爲999,第三個單詞的權重爲998等。這有一個「缺點」:權重的總和不會超過1000個單詞的標記 - 您必須決定你自己是否對你的特殊情況不好。不過,這可能並不完全符合你的需要。

如果您不想要線性縮減,它可能很簡單,例如第一個單詞的權重爲X,第二個單詞的權重等於X的Y%,第三個單詞的權重等於到X的Y%的Y%等等。第一個單詞和第二個單詞之間的差別將大於第二個單詞與第三個單詞之間的差異,並且當你達到第500個單詞時,差異將會是要小得多。這也不難實現,因爲它不是一個複雜的公式。或者,如果你真的需要,你可以使用一個更復雜的數學函數來計算重量 - 嘗試谷歌搜索'指數衰減',看看它是否對你有任何用處。

1

實現自定義評分函數並不是很困難。下面是一個僞代碼:

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 
0

我會去的東西像result = 2*sqrt(words_count),反正你可以使用具有衍生小於1例如任何功能log

相關問題