代码之家  ›  专栏  ›  技术社区  ›  David

关键字/标记的空间映射

  •  2
  • David  · 技术社区  · 17 年前

    我试图理解构建相关/通用关键字或标签的空间地图的状态或想法。以so为例;如果 https://stackoverflow.com/tags 输入“python”,你将得到所有包含这个词的标签,但没有可能密切相关的标签(wsgi、谷歌的应用引擎、flying等)。

    根据我的问题,你如何建立一个空间地图,可以被查询来从搜索中找到密切相关的标签/关键字,按它们的权重排序?但是,如何将say标签foo的重量存储到可能更多的标签上,并保持系统响应?

    我已经看过大卫温伯格的谷歌技术演讲,这是一个伟大的技术演讲,让我思考。 http://video.google.com/videoplay?docid=2159021324062223592&ei=qseASZvgI6e4qAP91a2PDg&q=google+tech+talk

    4 回复  |  直到 17 年前
        1
  •  1
  •   aldrinleal    17 年前

    检查O'Reilly的集群概念 "Programming Collective Intelligence" .

        2
  •  0
  •   Sparr    17 年前

    似乎建立这种关系的数据最有可能的方法是编目哪些标记最常出现在一起,而哪些标记与最少的其他标记一起出现。

    也就是说,“C++”和“STL”出现在一起,而“STL”很少出现(?)没有“C++”出现,所以它们是相关的(至少在一个方向)。“C++”和“算法”也出现在一起,但它们更频繁地出现分离,因此它们不相关。

        3
  •  0
  •   David    17 年前

    在考虑如何构造数据时,我的一个想法可能是一个四表系统。一个表是源数据(例如,必须有某种类型的问题表),它连接到一个标记表,然后是一个标记权重表,它连接回标记表。

    #pseudo code
         source table {
         id: int
         source_data: text   
         }
    
         source_tag table {
            source_id: int
            tag_id: int
         }
    
         tag table{
          id: int
          tag: String(30)
         }
    
        tag_weight table {
            base_tag_id: int
            weight: float( 0-10 or 100 ) or int ( count of mutual occurrence )
            source_tag_id: int      
        }
    

    我不知道这种结构有多有效,但我想应该是有办法的。否则,要使其正常工作,新的源数据入院可能会触发后更新触发器,或者让后台的工作进程在预设时间重新平衡权重。

        4
  •  -2
  •   Eduard Wirch    17 年前

    你需要一个好的搜索引擎。;)

    自己动手:实现一种相似性算法。例如: Levenshtein distance 或 Dice's coefficient .

    或者用一些现成的东西,比如 Lucene .

    推荐文章