當用戶寫一篇文章時,我想基於現有的標籤列表自動生成用戶寫入標籤。如何基於標籤列表自動從文章生成標籤?
例如,我有一個像列表:
曼哈頓布魯克林 皇后 ....
如果用戶寫一個包含這些關鍵詞一個文章,它會來的標籤。
像用戶有標題:「今天我在曼哈頓滑冰」,然後曼哈頓應該包括標籤。
我曾考慮使用foreach標記列表,但如果標記列表變大,它會非常緩慢。
你們是否有解決方案來自動生成標籤?或有任何想法來實現這個問題?
在此先感謝。
當用戶寫一篇文章時,我想基於現有的標籤列表自動生成用戶寫入標籤。如何基於標籤列表自動從文章生成標籤?
例如,我有一個像列表:
曼哈頓布魯克林 皇后 ....
如果用戶寫一個包含這些關鍵詞一個文章,它會來的標籤。
像用戶有標題:「今天我在曼哈頓滑冰」,然後曼哈頓應該包括標籤。
我曾考慮使用foreach標記列表,但如果標記列表變大,它會非常緩慢。
你們是否有解決方案來自動生成標籤?或有任何想法來實現這個問題?
在此先感謝。
取決於你有標籤號,特里很可能會在這種情況下很好地工作。使用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
理念 - 客戶端+服務器端解決方案:
你可能有一個標題文本框,然後用文章的身體另一輸入(文本區域)。您需要在用戶離開標題輸入時觸發的事件(或輸入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);
}
}
我需要更具體的上下文來提供更具體的答案(想法):)
Dampe您好,感謝您的快速反應,問題是我有成千上萬個標籤如果所有的標籤都是foreach,那麼它會像你說的那樣很慢。 – 2011-04-16 02:46:24
啊,那麼這是我的聯盟我猜:X我不知道如何做這種優化搜索。 – Damb 2011-04-16 02:48:08
大聲笑。無論如何,非常感謝你 – 2011-04-16 02:48:59
使用一個HashSet來存儲您的標籤。
下面的文章供參考:
這很酷,謝謝你格蘭特 – 2011-04-16 12:50:23