def extract_feature() : text = "" post_set = []; class_set = []; feature = [] jieba.analyse.set_stop_words("stop_word.txt") for index in range(len(dict_list)) : with open("./lily/" + dict_list[index] + ".txt", "r") as my_file : #读入每个板块所有的帖子 for post in my_file : post_set.append(list(jieba.cut(post, cut_all = False))) #将post字符串存入list class_set.append(index) text += post feature.extend(jieba.analyse.extract_tags(text, 100)) return feature, post_set, class_set
def createQuery(post_set, feature) : query_set = [] vec_size = len(feature) for post in post_set : vector = [0] * vec_size for word in post : if word in feature : vector[feature.index(word)] += 1 query_set.append(vector) return query_set def makeVector(post, feature, size) : vector = [0] * size for word in post : if word in feature : vector[feature.index(word)] += 1 return vector
#计算两个向量的内积 def dotProduct(vec1, vec2) : total = 0 for i in xrange(len(vec1)) : total += vec1[i] * vec2[i] return total
计算测试文本和所有训练文本的哈希值生成哈希表
1 2 3 4 5 6 7 8
def localitySensitiveHash(vec, planes) : dot_prod_list = [dotProduct(vec, plane) for plane in planes] return (sum([2 ** i if dot_prod_list[i] > 0 else 0 for i in xrange(0, len(dot_prod_list))]) % 8)
hash_table = [(localitySensitiveHash(row, planes), class_set[class_index]) for class_index, row in enumerate(train_set)] hash_dict = defaultdict(list) for (hash_value, class_index) in hash_table : hash_dict[hash_value].append(class_index)