2011-04-16 65 views
0

當用戶寫一篇文章時,我想基於現有的標籤列表自動生成用戶寫入標籤。如何基於標籤列表自動從文章生成標籤?

例如,我有一個像列表:

曼哈頓布魯克林 皇后 ....

如果用戶寫一個包含這些關鍵詞一個文章,它會來的標籤。

像用戶有標題:「今天我在曼哈頓滑冰」,然後曼哈頓應該包括標籤。

我曾考慮使用foreach標記列表,但如果標記列表變大,它會非常緩慢。

你們是否有解決方案來自動生成標籤?或有任何想法來實現這個問題?

在此先感謝。

回答

1

取決於你有標籤號,特里很可能會在這種情況下很好地工作。使用trie,您可以構建標籤前綴的樹形數據結構。例如,如果您有「A」,「to」,「tea」,「ted」,「ten」,「i」,「in」和「inn」等標籤,那麼您將構建以下「前綴樹」 :

+ - i - + i + - n - + in + - n - + inn + 
    - A - + A + 
    - t - + t + - o - + to + 
       - e - + te + - n - + ten + 
          - a - + tea + 
          - d - + ted + 

在此樹中,「 - 字符 - 」表示邊緣,「+字符串+」表示節點。一旦你已經建立了這個線索,我想下面的算法:

TrieNode root = rootOfTrie; 
TrieNode current = root; 

while (still typing) 
{ 
    switch (key pressed) 
    { 
     case letter: 

     if (current == null) 
      break; 

     bool found = false; 

     foreach (successor trie edge) 
     { 
      if (edge.Letter == letter) 
      { 
       current = sucessor edge.node; 
       found = true; 
       break; 
      } 
     } 

     if (!found) 
      current = null; 

     break; 

     case whitespace: 

     if (current != root && current != null && trie node is tag) 
      suggest node current as tag; 

     current = root; 
     break; 

     case backspace: 

     // You may want to handle this case by back-tracking in the trie. 

     current = null; 
     break; 

     default: 

     current = null; 
     break; 
    } 
} 

閱讀維基百科更特里數據結構:http://en.wikipedia.org/wiki/Trie

+0

這很酷,謝謝你格蘭特 – 2011-04-16 12:50:23

0

理念 - 客戶端+服務器端解決方案:

你可能有一個標題文本框,然後用文章的身體另一輸入(文本區域)。您需要在用戶離開標題輸入時觸發的事件(或輸入textarea輸入)。然後,您可以從textarea中獲取文本,並將其與可用標籤列表進行比較(如果您有數百個標籤,這可能會很慢)。

如何比較:比方說,在服務器端,您生成了可用標籤列表,並且您已將該列表設置爲頁面上某個隱藏字段的內容。然後在客戶端,您可以閱讀該隱藏字段的內容並將標籤列表加載到某個列表var。 (或者你可以使用Ajax來取決於你的技能)。現在你有可用標籤列表和一個句子(文章標題)。您可以拆分該句子,並選取每個長於2個字符的單詞(例如),然後檢查該標籤列表是否包含給定單詞(針對從分裂中獲得的每個單詞)。

僞碼本:

foreach(string word in titleSplit) 
{ 
    if (listOfTags.contains(word)) 
    { 
     // You have matching word-tag. 
     // Add it's text into your tags element, or to some collection 
     // which will be processed later on. 
     tags.add(word); 
    } 
} 

我需要更具體的上下文來提供更具體的答案(想法):)

+0

Dampe您好,感謝您的快速反應,問題是我有成千上萬個標籤如果所有的標籤都是foreach,那麼它會像你說的那樣很慢。 – 2011-04-16 02:46:24

+0

啊,那麼這是我的聯盟我猜:X我不知道如何做這種優化搜索。 – Damb 2011-04-16 02:48:08

+0

大聲笑。無論如何,非常感謝你 – 2011-04-16 02:48:59