2

我试图了解构建相关/常见关键字或标签的空间地图的策略或想法。以 SO 为例;如果您访问https://stackoverflow.com/tags并输入“python”,您将获得包含该单词的所有标签,但没有可能密切相关的标签(WSGI、Google 的 App Engine、flying 等) .

根据我的问题,您如何构建一个可以查询的空间图,以从搜索中找到密切相关的标签/关键字,按权重排序?但是,如何将标签 foo 的权重存储到可能更大数量的标签中,并且仍然保持系统响应?

我已经看过 David Weinberger 的 Google 技术演讲,这是一个让我思考的很棒的技术演讲。 http://video.google.com/videoplay?docid=2159021324062223592&ei=qseASZvgI6e4qAP91a2PDg&q=google+tech+talk

4

4 回答 4

1

查看 O'Reilly 的“Programming Collective Intelligence”中的集群概念。

于 2009-02-02T12:28:51.380 回答
0

似乎最有可能构建有关此类关系的数据的方法是分类哪些标签最常一起出现,同时与其他标签的数量最少。

也就是说,“c++”和“stl”经常一起出现,而“stl”很少(?)出现没有“c++”,所以它们是相关的(至少在一个方向上)。"c++" 和 "algorithm" 也经常一起出现,但分开出现的次数更多,所以没有关系。

于 2009-01-28T23:21:36.610 回答
0

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

#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      
    }

我不知道这种结构的效率有多高,但我认为它有一些工作要做。否则,为了使其工作,对源数据的新准入可能会触发更新后触发器,或者在后台有一个工作进程在预设时间重新平衡权重。

于 2009-01-29T00:27:42.933 回答
-2

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

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

或者使用现成的东西,比如Lucene

于 2009-01-28T22:09:44.007 回答