2011-04-16 57 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