V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Ariagle
V2EX  ›  问与答

如何根据标题反向匹配关键字?

  •  
  •   Ariagle · 2012-05-30 22:00:19 +08:00 · 3475 次点击
    这是一个创建于 4342 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景是这样的:

    爬虫程序会周期性收录一些 item , item 有 title 这一属性;
    另有一堆 object ,每个 object 均有若干 keyword ;
    object 通过自己的 keyword 来对 item 的 title 进行搜索,以获取到匹配自己的 item ;

    当用户访问 object 时,就进行一次搜索,以返回 item 结果。但这样没法给 item 和 object 建立双向关联,即只能通过 object 的 keyword 来搜索 items ,不能通过 item 反向找回 objects 。
    (item 和 object 是多对多关系,并不是一一对应的)

    新建立一个关系表是肯定的,问题是,如何给它们建立关联呢?

    一个想法是,周期性去轮 object 集合,逐个 object 进行处理,搜索出匹配的 items ,然后将其写进关系表。但是这样不太环保,大部分 object 是不需要更新的,只有少部分 object 需要增删 item 关联。

    那么,有没有什么办法,能直接根据 item 的 title 来反向匹配出 object 呢?这样只需在爬虫收录新 item 后,对这堆新 item 建立新关联就行了。
    或者有其他的办法能高效环保地建立起关联?(难道要去动用机器学习相关技能……)
    9 条回复    1970-01-01 08:00:00 +08:00
    tioover
        1
    tioover  
       2012-05-30 22:11:27 +08:00
    可能没有看懂……而且我是小小

    可不可以这样,keyword单独列个表,关联object和item,在item加入的时候就将关联写入keyword表?
    Ariagle
        2
    Ariagle  
    OP
       2012-05-30 22:17:58 +08:00
    刚才在推上收获了一个方法:将 keyword 当作字典,对 title 进行分词,然后就能反向去搜索 object 的 keyword 了。感谢 @zhoushuqun

    @tioover 楼顶的问题就是在于没法根据 item 来找到 item 和 keyword 的对应关系,所以当有新 item 加入时就不知怎么去操作 keyword 表了。
    tioover
        3
    tioover  
       2012-05-30 22:21:51 +08:00
    @Ariagle 唔这样啊……或许可以把所有keyword放在内存里面然后在新item加入以后一个一个试着匹配? 不过还是分词的方法好点吧
    Ariagle
        4
    Ariagle  
    OP
       2012-05-30 22:28:05 +08:00
    @tioover 嗯,你这个实质上就是楼顶的方法,有新 item 时就一个个地轮 object (即 keyword ),匹配的话就写入关系表。不过效率很低就是了…
    benzhe
        5
    benzhe  
       2012-05-30 22:35:20 +08:00
    tilte 分词入一个新表,并建立跟 item 的关系,同时也建立 tilte 跟 keyword 的关系,应该可以这样吧。
    其实最好把原来的数据表贴出来再研究
    Ariagle
        6
    Ariagle  
    OP
       2012-05-30 22:41:03 +08:00
    说白了就是萌否的“条目-资源”问题 http://moefou.org/tv/1206/resources
    现在只能通过 用户->条目->资源 这种方向来给用户显示内容,应该属于“拉”模式,而这种方法目前遇到了不少瓶颈。
    若要改成 资源->条目->用户 这种“推”模式,就面临楼顶提到的问题了。
    road2stat
        7
    road2stat  
       2012-05-30 23:11:49 +08:00
    一个简单的想法是,对 title 分词,然后利用快速 k-NN 算法计算 title 的分词结果与各 item 的 keyword 向量之间的余弦距离,得到排序结果。
    这样比暴力匹配可能更精细一些,速度不会太慢,也可以得到双向的关系。不过如果数据比较稀疏,可能准确率会受到影响。
    Ariagle
        8
    Ariagle  
    OP
       2012-05-30 23:21:15 +08:00
    @road2stat 应该用不着这样计算相似度了吧,只要分词结果和 keyword 完全匹配,就可认定关系了。分词完后使用 sphinx 之类的搜索引擎应该就能比较快地找到结果。
    road2stat
        9
    road2stat  
       2012-05-31 02:50:58 +08:00
    嗯,分词基本上是最大的问题,之后的处理比较自由。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2749 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:50 · PVG 22:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.