发现更大的SEO世界
 找回密码
 注册
搜索
»首页»SEO培训 SEO论坛 SEO交流 帖子
发新帖
ZERO,SEO执着爱好者    

无特征关键词分类Python实现代码

思路来自caoz的分享:http://www.seoqx.com/post/81

简述即,“星巴克团购”很明显能看出是团购相关的,因为包含“团购”。由此也可以反推“星巴克”也很可能和团购有一定关联性。

通过这样的方法,能挖掘出不少潜在相关的词。根据我这边的数据,挖出的词量和直接相关的词量处于同一量级。


但这个思路,代码实现起来并不是太容易,逐个遍历词的方法效率过于低。因此我写了下通过倒排索引来匹配的代码。

进行了几回优化,将运行效率从初版大幅提升。我这边实测300W+关键词,半小时内处理完毕。此代码应该能支持千万级的分析挖掘。

运行方式为:python [脚本名称] [输入文件] [输出文件] [特征词项]

输入文件,需两列数据,第二列为搜索量

输出文件,有四列数据,关键词、搜索量、是否直接相关、是否间接相关

特征词项,在前面的举例中,即应设置为“团购”

注:运行前需先行安装jieba模块,用于分词

  1. # coding:utf-8
  2. import jieba
  3. import sys

  4. # 输入文件 输出文件 特征词项
  5. input_file, output_file, feature = sys.argv[1:4]

  6. # 建立倒排索引
  7. posting_list = {}
  8. for kw_id, line in enumerate(open(input_file)):
  9.         if kw_id % 10000==0:
  10.                 print kw_id
  11.         kw, searches = line.rstrip().split('\t', 1)
  12.         
  13.         segs = jieba.cut(kw)
  14.         for seg in segs:
  15.                 try:   
  16.                         posting_list[seg].append(kw_id)
  17.                 except:
  18.                         posting_list[seg] = [kw_id]

  19. for seg, doc_list in posting_list.iteritems():
  20.         posting_list[seg] = set(doc_list)

  21. feature_set = posting_list[feature.decode('utf-8')]

  22. f = open(output_file, 'w')
  23. for kw_id, line in enumerate(open(input_file)):
  24.         if kw_id % 10000==0:
  25.                 print kw_id

  26.         kw, searches = line.rstrip().split('\t', 1)

  27.         relate, indirect_relate = '0', '0'

  28.         # 直接相关词
  29.         if feature in kw:
  30.                 relate = '1'
  31.         else:
  32.                 sets = [ posting_list[seg] for seg in jieba.cut(kw) ]
  33.                 extend_kw_ids = set.intersection(*sets)
  34.                 if len(feature_set & extend_kw_ids) >= 1:
  35.                         indirect_relate = '1'

  36.         print >>f, '\t'.join([kw, searches, relate, indirect_relate])
  37. f.close()
复制代码

评分

参与人数 2赞同 +8 收起 理由
52gcs + 4 决定再用起python
莫山 + 4 很给力!

查看全部评分

发表于 2014-6-3 14:32:15
回复 收藏
c0901yuan,一直喜欢 用c0901yuan  做网名。    

如果 有一个整个流程的代码 就OK了。。。挖词 分类。  分好类 在挖词  然后在分  每挖一次对比一次
发表于 2014-6-3 14:38:19
回复 收藏
xfxdtt,不变初心。。    

比如 输入的特征词是 团购
星巴克团购这个词,直接相关是包含团购的,间接相关是包含星巴克
星巴克咖啡是间接相关,美食团购是直接相关
可以这样理解吗
发表于 2014-6-3 16:55:56
回复 收藏
ZERO,SEO执着爱好者    

xfxdtt 发表于 2014-6-3 08:55
比如 输入的特征词是 团购
星巴克团购这个词,直接相关是包含团购的,间接相关是包含星巴克
星巴克咖啡是间 ...

这边仅指的是“星巴克”属于间接相关,没有考虑“星巴克咖啡”等词的情况。

这类词或许也有价值,待以后试试取这些词是否靠谱。
 楼主| 发表于 2014-6-3 17:22:56
回复 收藏
快速回复 返回顶部 返回列表