2016-08-11 43 views
0

我目前正在建立一個簡單的輸入框,它根據現有的名稱和電子郵件ID列表標記輸入的電子郵件ID。當開始在「收件人」框中輸入電子郵件地址時,類似於Gmail和Outlook的功能。基於標籤使用頻率和上次使用時間對基於標籤的自動完成進行排序的算法?

我有每個郵件地址的頻率和lastUsedTimeStamp數據。基於此,我需要對建議進行排序,以便將最有用的選項置頂。我得到的第一個想法是基於'frequency/durationSincelastUsed'進行排序,但有一種感覺是它會嚴重抑制結果集。接下來的想法是首先比較頻率,然後比較同樣使用的建議之間的時間戳。

有沒有人有更好的想法?不知道Gmail如何做到這一點。現在打破我的頭一段時間。

回答

0

第一次我做了這樣的事情,我計算了一個基於自上次使用以來的時間的值。如果在過去的15分鐘內使用了電子郵件地址,該值非常高(如100)。然後在幾個小時後迅速下降到0。

我的排序先使用該值,然後使用頻率。

背後的想法是,當你發送郵件到一個不常用的地址時,你發送另一個郵件到同一個地址的可能性在發送後立即變高(例如你可能發送了多張圖片),但那麼它會在相對較短的時間內下降。

我用過的另一種方法是維護一個固定大小的「近期收件人」列表。因此,您發送電子郵件的最後5個地址始終顯示在列表頂部。無論何時我發送電子郵件,我都會將該地址放在列表頂部,並將底部的地址推出。

這兩個都很容易實施,並且有效。我發現第二個更容易實現,並且我能夠讓用戶定義最近收件人列表的大小。

第二個也更容易解釋給你的用戶。讓用戶瞭解第一個滑動時間尺度是困難的,幾乎不可能爲他們創建一個界面來微調下降週期。

-1

我帶着一種相關的答案:排序郵件列表(例如收件箱)按標籤

在Chrome中,例如,開放式檢查源,去安慰和copypaste這段JavaScript代碼

!function() { //ordenar por tag 
    function e(e) 
    { 
     var t,u,v,w,n,a,p,q,r,s,l=e.getElementsByTagName("td"); 
     for(a=0;a<l.length;a++) 
     { 
      if("xY a4W"==l[a].className) 
       for(t=l[a].getElementsByTagName("div"),p=0;p<t.length;p++) 
        if("xS"==t[p].className) 
         for(u=t[p].getElementsByTagName("div"),q=0;q<u.length;q++) 
          if("xT"==u[q].className) 
           for(v=u[q].getElementsByTagName("div"),r=0;r<v.length;r++) 
            if("yi"==v[r].className) 
             for(w=v[r].getElementsByTagName("div"),s=0;s<w.length;s++) 
              if("ar as"==w[s].className&&(n=w[s].getElementsByTagName("div"),n.length)) 
               return n[0].getAttribute("title"); 
      if(l[a].hasAttribute("role")&&"link"==l[a].getAttribute("role")) 
       for(t=l[a].getElementsByTagName("div"),r=0;r<t.length;r++) 
        if("y6"==t[r].className&&(n=t[r].getElementsByTagName("span"),n.length)) 
         return n[0].innerHTML 
     } 
    return"" 
    } 
    function t(e,t) 
    { 
     return e=e[0].toLowerCase(),t=t[0].toLowerCase(),t>e?-1:e>t?1:0 
    } 
    function n(n) 
    { 
     var a=Array.prototype.slice.call(n.getElementsByTagName("tr"),0);if(a.length) 
     { 
      for(var r=a[0].parentNode,l=[],g=0;g<a.length;g++)l[g]=[e(a[g]),a[g]]; 
      for(l=l.sort(t),g=0;g<l.length;g++) 
       r.appendChild(l[g][1]) 
     } 
    } 
      for(var a=document.getElementsByTagName("table"),r=0;r<a.length;r++) 
       if("F cf zt"==a[r].className) 
       { 
        n(a[r]);break 
       } 
}(); 

(感謝https://www.gtricks.com/gmail/sort-gmail-subject-label-sender/對發起人訂購的初始想法)