我正在尝试理解用于构建相关/常用关键字或标签的空间地图的策略或想法。以SO为例;如果您转到https://stackoverflow.com/tags并输入“python”,您将获得包含该词的所有标签,但没有可能密切相关的标签(WSGI,Google的App Engine,飞行等)。
根据我的问题,您如何构建一个可以查询的空间地图,以便从搜索中找到密切相关的标签/关键字,按其重量排序?但是那么如何存储说标签foo的重量可能更大的标签仍然保持系统响应?
我已经看过David Weinberger的Google Tech-talk,这是一个让我思考的伟大技术演讲。 http://video.google.com/videoplay?docid=2159021324062223592&ei=qseASZvgI6e4qAP91a2PDg&q=google+tech+talk
答案 0 :(得分:1)
检查O'Reilly的"Programming Collective Intelligence"中的群集概念。
答案 1 :(得分:0)
似乎最有可能建立关于此类关系的数据的方法是编制哪些标签最常出现在一起,同时与最少数量的其他标签一起出现。
也就是说,“c ++”和“stl”一起出现很多,“stl”很少(?)出现没有“c ++”,因此它们是相关的(至少在一个方向上)。 “c ++”和“算法”也出现在一起很多,但它们更频繁地分开,所以它们没有关系。
答案 2 :(得分:0)
在考虑如何构建数据时,我所拥有的一个想法可能是一个四表系统。一个表将是源数据(例如,有SO必须有某种问题表),它连接到一个标签表,然后连接到标签权重表连接到标签表。
#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
}
我不知道这个结构的效率如何,但我想它可以解决一些问题。否则为了使其工作,对源数据的新入场可能会触发更新后触发器,或者让后台的工作进程在预设时间重新平衡权重。
答案 3 :(得分:-2)