【ZERO】无特征关键词分类
简述即,“星巴克团购”很明显能看出是团购相关的,因为包含“团购”。由此也可以反推“星巴克”也很可能和团购有一定关联性。
通过这样的方法,能挖掘出不少潜在相关的词。根据我这边的数据,挖出的词量和直接相关的词量处于同一量级。
但这个思路,代码实现起来并不是太容易,逐个遍历词的方法效率过于低。因此我写了下通过倒排索引来匹配的代码。
进行了几回优化,将运行效率从初版大幅提升。我这边实测300W+关键词,半小时内处理完毕。此代码应该能支持千万级的分析挖掘。
运行方式为:python [脚本名称] [输入文件] [输出文件] [特征词项]
输入文件,需两列数据,第二列为搜索量
输出文件,有四列数据,关键词、搜索量、是否直接相关、是否间接相关
特征词项,在前面的举例中,即应设置为“团购”
注:运行前需先行安装jieba模块,用于分词
1 #encoding=utf-8 2 3 import jieba 4 import sys 5 6 # 输入文件 输出文件 特征词项 7 input_file, output_file, feature = sys.argv[1:4] 8 # feature='大全' 9 # 建立倒排索引 10 posting_list = {} 11 for kw_id, line in enumerate(open(input_file)): 12 if kw_id % 10000==0: 13 print kw_id 14 kw, searches = line.rstrip().split('\t', 1) 15 # print kw,searches 16 17 segs = jieba.cut(kw) 18 for seg in segs: 19 try: 20 posting_list[seg].append(kw_id) 21 except: 22 posting_list[seg] = [kw_id] 23 # print posting_list 24 for seg, doc_list in posting_list.iteritems(): 25 # print seg,doc_list 26 posting_list[seg] = set(doc_list) 27 # print posting_list 28 29 feature_set = posting_list[feature.decode('utf-8')] 30 # print feature_set 31 32 33 f = open(output_file, 'w') 34 for kw_id, line in enumerate(open(input_file)): 35 if kw_id % 10000==0: 36 print kw_id 37 38 kw, searches = line.rstrip().split('\t', 1) 39 40 relate, indirect_relate = '0', '0' 41 42 # 直接相关词 43 if feature in kw: 44 relate = '1' 45 else: 46 sets = [ posting_list[seg] for seg in jieba.cut(kw) ] 47 extend_kw_ids = set.intersection(*sets) 48 if len(feature_set & extend_kw_ids) >= 1: 49 indirect_relate = '1' 50 51 print >>f, '\t'.join([kw, searches, relate, indirect_relate]) 52 f.close()
脚本直接从seo前线创始人zero那里趴过来,不同只是在缩进上对比原代码有所改动,因为原码貌似不能直接使用,其它无,提示不要在windows下运行,编码会出问题;本人运行效果如下:

浙公网安备 33010602011771号