├── .gitignore ├── README.md ├── engine ├── FieldTree.py ├── GetBookModel.py ├── analysis.py ├── book_recsys.py ├── build_association_strength.py ├── build_domain_tags.py ├── build_pro_vec.py ├── build_rawtags.py ├── build_wac_tree.py ├── corpus │ ├── book_recsys.py │ ├── gen_book_corpus.py │ ├── gen_book_meta.py │ ├── jieba_cut.py │ ├── jieba_test.py │ ├── make_mecab_seed_data.py │ ├── make_mecab_train_data.py │ ├── process_wiki.py │ └── train_word2vec_model.py ├── log │ ├── books.sample0.txt │ ├── books.sample2.txt │ ├── domain.0.5.txt │ ├── domain.0.6.txt │ ├── domain.0.7.txt │ ├── domain.0.8.txt │ ├── domain.0.9.txt │ ├── domain.tags.txt │ ├── domain.tags1.txt │ ├── interest_vector.txt │ ├── mark.rank.txt │ ├── mark.sample.txt │ ├── meta.start-jieba.txt │ ├── meta.start.txt │ ├── tag.domain-classify.txt │ ├── tag.domain.txt │ ├── tags.author.txt │ ├── tags.raw20-jieba.txt │ ├── tags.raw20.txt │ ├── tags.record.txt │ ├── tags.start-jieba.txt │ └── tags.start.txt ├── merge_msr_word.py ├── stdtag.py ├── test_user_model.py ├── train_word2vec_model.py ├── update_book_domain.py ├── update_popular.py ├── update_standardtags.py ├── update_tags_db.py ├── update_user_model.py └── wac.py ├── spider ├── README.md ├── doubanbook │ ├── bookinfo_starter.py │ ├── crawls │ │ ├── user_books-1 │ │ │ ├── requests.queue │ │ │ │ └── p0 │ │ │ └── requests.seen │ │ └── user_books │ │ │ ├── requests.queue │ │ │ └── p1 │ │ │ ├── requests.seen │ │ │ └── spider.state │ ├── doubanbook │ │ ├── __init__.py │ │ ├── __init__.pyc │ │ ├── comm │ │ │ ├── __init__.py │ │ │ ├── __init__.pyc │ │ │ ├── filter_error_page.py │ │ │ ├── filter_error_page.pyc │ │ │ ├── rotate_useragent.py │ │ │ └── rotate_useragent.pyc │ │ ├── items.py │ │ ├── items.pyc │ │ ├── pipelines.py │ │ ├── pipelines.pyc │ │ ├── settings.py │ │ ├── settings.pyc │ │ ├── spiders │ │ │ ├── __init__.py │ │ │ ├── __init__.pyc │ │ │ ├── book_infos.py │ │ │ ├── book_infos.pyc │ │ │ ├── group_mems.py │ │ │ ├── group_mems.pyc │ │ │ ├── user_books.py │ │ │ └── user_books.pyc │ │ └── store.py │ ├── scrapy.cfg │ └── userbook_starter.py ├── sublime-save.sublime-project └── sublime-save.sublime-workspace └── website ├── README.md ├── app.py ├── blog ├── blog.py ├── blog.pyc ├── model.py ├── model.pyc └── templates │ ├── base.html │ ├── edit.html │ ├── index.html │ ├── new.html │ └── view.html ├── model.py ├── sessions ├── 50731696fe57545e4a8c7cfcd64b894a8c9bbb1a └── e00833b4b3dda6e25eaf17d9f2a8026c23c5a45a ├── templates ├── book.html └── index.html └── test.py /.gitignore: -------------------------------------------------------------------------------- 1 | docs/ 2 | mongoexports/ 3 | pkgs/ 4 | website/sessions/* 5 | *.json 6 | *.gz 7 | *.zip 8 | *.pyc 9 | *.log 10 | 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # book-recsys 2 | 毕业设计 - 书籍推荐系统 3 | -------------------------------------------------------------------------------- /engine/FieldTree.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | 4 | 5 | FIELDS = { 6 | u'计算机`计算机科学`计算机技术':{ # 0 7 | u'程序设计`编程`程序开发`编程语言`programming':{#3 8 | u'c/c++`c`c++`c语言':{#11 9 | u'stl':{},#10 10 | u'c/c++`c`c++`c语言':{},#9 11 | }, 12 | u'java':{#6 13 | u'j2ee':{},#7 14 | u'java':{},#8 15 | }, 16 | u'python':{#4 17 | u'python':{},#5 18 | 19 | } 20 | }, 21 | u'网络`network':{#12 22 | 23 | }, 24 | u'算法`algorithm':{#2 25 | 26 | }, 27 | u'数据结构':{#1 28 | 29 | }, 30 | } 31 | } 32 | 33 | class FieldNode(object): 34 | """docstring for FieldNode""" 35 | 36 | def __init__(self, taglist, level, parents): 37 | self.tags = [t.lower() for t in taglist.split('`')] 38 | self.name = self.tags[0] 39 | self.level = level 40 | self.parents = parents 41 | self.books = [] 42 | 43 | def match(self, tagname): 44 | if tagname.lower() in self.tags: 45 | return True 46 | 47 | # a.getBranchLoc(b), return None if a b not in same branch, return 1 if a is one level deeper than b. 48 | def getBranchLoc(self, node): 49 | lev = self.level - node.level 50 | if lev == 0: 51 | return 52 | elif lev > 0: 53 | if node in self.parents: 54 | return lev 55 | else: 56 | if self in node.parents: 57 | return lev 58 | 59 | class FieldTree(object): 60 | """docstring for FieldTree""" 61 | 62 | # fields = { 63 | # u'计算机':{'level':1, 'parents':set(), 'books':[]}, 64 | # u'编程':{'level':2, 'parents':set((u'计算机',)), 'books':[]}, 65 | # u'C/C++':{'level':4, 'parents':set((u'编程', u'计算机')), 'books':[]}, 66 | # u'STL':{'level':4, 'parents':set((u'C/C++', u'编程', u'计算机')), 'books':[]}, 67 | # u'java':{'level':4, 'parents':set((u'编程', u'计算机')), 'books':[]}, 68 | # u'J2EE':{'level':4, 'parents':set((u'java', u'编程', u'计算机')), 'books':[]}, 69 | # u'算法':{'level':2, 'parents':set((u'计算机',)), 'books':[]}, 70 | # u'数据结构':{'level':2, 'parents':set((u'计算机',)), 'books':[]}, 71 | # u'网络':{'level':2, 'parents':set((u'计算机',)), 'books':[]}, 72 | # } 73 | 74 | field_nodes = [] 75 | 76 | def __init__(self, input_tree): 77 | self.vector = {} 78 | self.field_nodes = [] 79 | self.parse_fields(input_tree, 1, set(), self.field_nodes) 80 | # print self.field_nodes 81 | 82 | def parse_fields(self, input_tree, level, parents, output): 83 | for inp in input_tree.items(): 84 | node = FieldNode(inp[0], level, parents) 85 | if inp[1]: 86 | next_parents = set([node]) 87 | next_parents.update(parents) 88 | self.parse_fields(inp[1], level + 1, next_parents, output) 89 | output.append(node) 90 | 91 | def getNodeIdx(self, tagname): 92 | for fn in self.field_nodes: 93 | if fn.match(tagname): 94 | return self.field_nodes.index(fn) 95 | 96 | def getNode(self, tagname): 97 | idx = self.getNodeIdx(tagname) 98 | if idx is not None: 99 | return self.field_nodes[idx] 100 | 101 | def getVector(self): 102 | return self.vector 103 | 104 | def insertBook(self, book): 105 | lowest_idx = set() 106 | lowest_lev = 0 107 | for tag in [t['name'] for t in book['tags']]: 108 | # if tag not in self.fields: 109 | # continue 110 | logging.debug('book tag:%s' % tag) 111 | if tag == u'C++': 112 | print tag 113 | 114 | ## node version 115 | idx = self.getNodeIdx(tag) 116 | if idx is None: 117 | logging.debug('no node book tag %s'%tag) 118 | continue 119 | node = self.field_nodes[idx] 120 | 121 | ## 获得最低层次node 122 | if node.level > lowest_lev: 123 | lowest_lev = node.level 124 | lowest_idx = set([idx]) 125 | elif node.level == lowest_lev: 126 | lowest_idx.add(idx) 127 | 128 | ## 累计vector 129 | if node.name in self.vector: 130 | self.vector[node.name] += 1 131 | elif len(self.vector) == 0: 132 | self.vector[node.name] = 1 133 | logging.debug(u'获取第一个标签: %s'%tag) 134 | else: 135 | _isnewvec = False 136 | for pre_tag in [x[0] for x in self.vector.items()]: 137 | pre_node = self.getNode(pre_tag) 138 | logging.debug('compare node %s and pre_node %s' % (node.name, pre_node.name)) 139 | ret = node.getBranchLoc(pre_node) 140 | if not ret: 141 | logging.debug('node %s not in same branch of pre_node %s' % (node.name, pre_node.name)) 142 | _isnewvec = True 143 | continue 144 | if ret > 0: 145 | logging.debug('get same branch tag: %s, delete old branch tag: %s' % (tag, pre_tag)) 146 | _isnewvec = True 147 | del self.vector[pre_tag] 148 | else: 149 | logging.debug('skip same branch high level tag:%s'%tag) 150 | _isnewvec = False 151 | break 152 | 153 | if _isnewvec: 154 | logging.debug('node %s and pre_node %s finally not in same branch' % (node.name, pre_node.name) ) 155 | self.vector[node.name] = 1 156 | 157 | 158 | # 分类书籍到节点标签 159 | for idx in lowest_idx: 160 | logging.debug('CLASSIFY book:%s TO lowest_idx:%s'% (book['title'], self.field_nodes[idx].name) ) 161 | self.field_nodes[idx].books.append(book) 162 | 163 | 164 | def main(): 165 | # test FieldTree: 166 | # test_book = [1767741, 1500149, 1110934, 1091086, 1885170, 1102259, 1230206, 1246192, ] 167 | # ft = FieldTree(FIELDS) 168 | # for bk in test_book: 169 | # book = rsdb.findOneBook(unicode(bk)) 170 | # if not book or 'tags' not in book: 171 | # continue 172 | # ft.insertBook(book) 173 | # vec = ft.getVector() 174 | 175 | ft = FieldTree(FIELDS) 176 | for book in db.books.find(timeout=False): 177 | if not book or 'tags' not in book: 178 | continue 179 | if not book['general_domain'] or book['general_domain'][0][0] != u'技术': 180 | continue 181 | ft.insertBook(book) 182 | vec = ft.getVector() 183 | logging.debug('=-=-=-Final Vector: %s=-=-=' % (' '.join([ unicode(x[0])+u'='+unicode(x[1]) for x in vec.items() ]))) 184 | 185 | if __name__ == '__main__': 186 | main() -------------------------------------------------------------------------------- /engine/GetBookModel.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | from GetWacWeight import getWacWeight, loadLevel, print_wac 4 | 5 | level = loadLevel() 6 | 7 | 8 | def getBookModel(book, thres=0, iter_level=10): 9 | ret = {} 10 | print '\r\n'*5 11 | print '='*10, book['title'], '='*10 12 | for tag in [x['name'] for x in book['tags']]: 13 | tag_level = getWacWeight(tag, level, iter_level) 14 | if not tag_level: 15 | continue 16 | for lev_tag in tag_level.items(): 17 | idf = db.tags.find_one({"name":lev_tag[0]},{"idf":1})['idf'] 18 | weight = float(idf)*float(lev_tag[1]) 19 | if lev_tag[0] not in ret: 20 | ret[lev_tag[0]] = 0.0 21 | ret[lev_tag[0]] += weight 22 | ret_list = [x for x in ret.items() if x[1] > thres] 23 | ret_list.sort(cmp=lambda a,b: cmp(a[1],b[1]), reverse=True) 24 | for i in ret_list: 25 | print i[0], i[1] 26 | return dict(ret_list) 27 | 28 | 29 | 30 | def test_book_model(): 31 | test_book = [3259440, 25708312, 1090601, 5939753, 1767741] 32 | 33 | for bid in test_book: 34 | book = db.books.find_one({"id":bid}) 35 | if not book: 36 | continue 37 | tag_list = getBookModel(book, -10, 0) 38 | prog_d('test_book_model') 39 | 40 | if __name__ == '__main__': 41 | test_book_model() -------------------------------------------------------------------------------- /engine/analysis.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | import gensim 4 | 5 | 6 | class count_dict(dict): 7 | def __missing__(self, key): 8 | return 0 9 | 10 | 11 | def test_mark_sample(): 12 | books_sample = [] 13 | with open('mark.sample.txt') as f: 14 | spamreader = csv.reader(f) 15 | #print spamreader 16 | for row in spamreader: 17 | #print int(row[len(row)-1].strip()) 18 | books_sample.append( (row[0].strip().decode('utf-8'), int(row[len(row)-1].strip()) ) ) 19 | 20 | tags = getRawTags(used_limit=10) 21 | 22 | for b in books_sample: # id, pro 23 | onebook = db.books.find_one({"id":b[0]}) 24 | if 'tags' not in onebook: 25 | continue 26 | for i,tag in enumerate(onebook['tags']): 27 | #print tag_name, type(tag_name) 28 | tag_name = tag['name'] 29 | if b[1] == 1 and tag_name in tags: 30 | if 'score' not in tags[tag_name]: 31 | tags[tag_name]['score'] = 0 32 | tags[tag_name]['score'] += 8 - i 33 | logging.debug('book %s in books_sample' % b[0] ) 34 | 35 | tags_display = [x for x in tags.values() if 'score' in x] 36 | #print tags_display[1] 37 | tags_display.sort( cmp=lambda a,b: cmp(float(a['score'])/float(tags[a['name']]['count']), float(b['score'])/float(tags[b['name']]['count'])), reverse=True ) 38 | 39 | 40 | # 计算标签的专业度 41 | with open('mark.rank.txt', 'w') as f: 42 | for t in tags_display: 43 | wstr = '%s, %f\r\n' % ( t['name'], float(t['score'])/float(tags[t['name']]['count']) ) 44 | f.write(wstr.encode('utf-8')) 45 | print wstr 46 | 47 | logging.info('finished test_mark_sample') 48 | 49 | def test_book_prof(): 50 | #books = getSomeBooks(0, False) 51 | tags_pro = {} 52 | with open('mark.rank.txt') as f: 53 | reader = csv.reader(f) 54 | tags_pro = dict([( row[0].decode('utf-8'), float(row[1]) ) for row in reader]) 55 | 56 | #book_sample = [] 57 | book_ranked = [] 58 | with open('books.sample0.txt') as f: 59 | reader = csv.reader(f) 60 | for row in reader: 61 | book = db.books.find_one({"id":row[0].decode('utf-8')}) 62 | if book and 'tags' in book: 63 | score = 0 64 | for t in book['tags']: 65 | if t['name'] in tags_pro: 66 | score += tags_pro[t['name']] 67 | #wstr = '%s, %f' % (book['title'], score) 68 | book_ranked.append( (book['title'], score) ) 69 | 70 | book_ranked.sort( cmp=lambda a,b: cmp(a[1], b[1]), reverse=True ) 71 | for b in book_ranked: 72 | print '%s, %f' % (b[0], b[1]) 73 | #book_sample = [row[0].decode('utf-8') for row in reader] 74 | 75 | def test_user_pro(): 76 | 77 | tags_pro = {} 78 | with open('mark.rank.txt') as f: 79 | reader = csv.reader(f) 80 | tags_pro = dict([( row[0].decode('utf-8'), float(row[1]) ) for row in reader]) 81 | 82 | tags = getRawTags(pdebug=True) 83 | tags_acc = count_dict() 84 | for u in db.users.find(): 85 | if 'history' in u: 86 | for h in u['history']: 87 | if 'tags' in h: 88 | for t in h['tags']: 89 | tags_acc[t] += 1 90 | 91 | ret = set(tags_acc.keys()) - set(tags.keys()) 92 | for r in ret: 93 | print r 94 | #print len(tags), len(tags_acc) 95 | 96 | def test_user_model(): 97 | tags_cluster = pickle.load(open('tgcl.dmp')) 98 | # for i in cluster.items(): 99 | # print i[0], ' '.join(i[1]) 100 | 101 | tags_pro = dict([ (row[0].decode('utf-8'), float(row[1])) for row in csv.reader(open('mark.rank.txt'))]) 102 | 103 | invert_tags = {} 104 | for i in tags_cluster.items(): 105 | for j in i[1]: 106 | if i[0] in tags_pro: 107 | invert_tags[i[0]] = (j, tags_pro[i[0]]) 108 | else: 109 | invert_tags[i[0]] = (j, 0.0) 110 | 111 | dearcloud = db.users.find_one({"user_id":"cugbnxx"}) 112 | dearcloud_vec = dict( [(x, 0.0) for x in tags_cluster.keys()] ) 113 | 114 | # 所有历史累加 115 | for h in dearcloud['history']: 116 | book = db.books.find_one({"id":h['book_id']}) 117 | if book and 'title' in book: 118 | if 'tags' in book: 119 | for t in book['tags']: 120 | if t['name'] in dearcloud_vec: 121 | dearcloud_vec[t['name']] += 0.1 122 | 123 | if 'tags' not in h: 124 | continue 125 | 126 | for t in h['tags']: 127 | if t not in dearcloud_vec: 128 | continue 129 | dearcloud_vec[t] += 1 130 | 131 | dvs = dearcloud_vec.items() 132 | dvs.sort(cmp=lambda a,b: cmp(a[1],b[1]), reverse=True) 133 | for i in dvs: 134 | print i[0], i[1] 135 | 136 | 137 | # get raw tags from db.tags 138 | def getRawTags(count_limit=-1, score_limit=-1, used_limit=-1, pdebug=False): 139 | 140 | ret = [] 141 | for t in db.tags.find(): 142 | ret.append(t) 143 | if score_limit >= 0: 144 | ret.sort(cmp=lambda x,y: cmp(x['count'], y['count']), reverse=True) 145 | ret = [x for x in ret if x['count'] > score_limit] 146 | if used_limit >= 0: 147 | ret.sort(cmp=lambda x,y: cmp(len(x['book_ref']), len(y['book_ref'])), reverse=True) 148 | ret = [x for x in ret if len(x['book_ref']) > used_limit] 149 | if count_limit >= 0: 150 | ret = ret[:count_limit] 151 | 152 | if pdebug: 153 | c = 0 154 | with open('tags.record%d.txt' % used_limit, 'w') as f: 155 | for i in ret: 156 | #print i 157 | if len(i['book_ref']) > 0: 158 | c += 1 159 | pstr = '%s, %f, %d \r\n' % (i['name'], i['count'], len(i['book_ref'])) 160 | #print pstr 161 | f.write(pstr.encode('utf-8')) 162 | print 'tag count: ', c 163 | prog_d('getRawTags') 164 | return dict([(i['name'], i) for i in ret]) 165 | 166 | def getSomeBooks(offset=0, write=True): 167 | books = [] 168 | for i in db.books.find(): 169 | if 'title' in i: 170 | books.append(i) 171 | # print i['id'] 172 | logging.info('finished adding complete books to array') 173 | 174 | books_sample = getSample(books, 100, offset) 175 | print len(books_sample) 176 | 177 | if write: 178 | with open('books.sample%d.txt' % offset, 'w') as f: 179 | for i in books_sample: 180 | wstr = '%s, %s, %s, %s, \r\n' % (i['id'], 'http://book.douban.com/subject/%s/' % i['id'], i['title'], ' '.join([x['name'] for x in i['tags']]) ) 181 | f.write(wstr.encode('utf-8')) 182 | logging.info('writing book info %s' % i['id']) 183 | 184 | return books_sample 185 | 186 | def getSample(raw_list, x, offset=0): 187 | sample = [] 188 | a = len(raw_list) 189 | for i in range(a/x): 190 | rotate_index = ( (a % x)*i + offset ) % a 191 | sample.append(raw_list[rotate_index]) 192 | return sample 193 | 194 | 195 | 196 | 197 | def main(): 198 | pass 199 | 200 | if __name__ == '__main__': 201 | logging.info('=-=-=-=-= TAG_ANALYSIS START!!! =-=-=-=-=-=') 202 | console.setLevel(logging.DEBUG) 203 | main() 204 | logging.info('=-=-=-=-= TAG_ANALYSIS END!!! =-=-=-=-=') 205 | 206 | 207 | -------------------------------------------------------------------------------- /engine/book_recsys.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import math 4 | import numpy 5 | import os,sys 6 | import csv 7 | import datetime 8 | import logging 9 | import pickle 10 | from time import sleep 11 | import pymongo 12 | from pymongo import MongoClient 13 | from bson import ObjectId 14 | from stdtag import StandardTags 15 | 16 | # mongo数据库配置 17 | conn = MongoClient('localhost',27017) 18 | db = conn.group_mems 19 | 20 | # 日志模块配置 21 | logging.basicConfig(level=logging.DEBUG, 22 | format='[%(asctime)s | %(funcName)s]: %(levelname)s %(message)s', 23 | datefmt='%a, %d %b %Y %H:%M:%S', 24 | filename='log/Analysis.log', 25 | filemode='a') 26 | 27 | console = logging.StreamHandler() 28 | 29 | formatter = logging.Formatter('[%(asctime)s | %(funcName)s]: %(levelname)s %(message)s') 30 | console.setFormatter(formatter) 31 | logging.getLogger('').addHandler(console) 32 | 33 | PROG = 100 34 | PROG_REC = 0 35 | PROG_SCALE = (0,10,20,30,40,50,60,70,80,90,100) 36 | 37 | BOOK_DOMAIN = [u'技术', u'经济', u'文学', u'艺术', u'历史', u'文化', u'金融', u'漫画', u'法学'] 38 | 39 | DOMAIN = [u'程序设计', u'信息安全', u'人工智能', u'集体智慧', u'计算机硬件', u'计算机网络', u'计算机图像'] 40 | 41 | DOMAIN_TAG = [u'程序设计', u'调试', u'并发', u'版本控制', u'程序开发', 42 | u'前端开发', u'移动开发', u'多线程', u'云计算', u'编译原理', u'算法', 43 | u'信息安全', u'计算机安全', u'加密解密', u'密码学', u'人工智能', 44 | u'人机交互', u'机器学习', u'推荐系统', u'集体智慧', u'数据分析', 45 | u'回归分析', u'数值分析', u'单片机', u'嵌入式', u'硬件编程', u'嵌入式系统', 46 | u'计算机网络', u'网络协议', u'网络编程', u'计算机图像', u'机器视觉', u'数字图像处理', u'计算机视觉'] 47 | 48 | 49 | # 有缓存的数据库类,第一次访问的信息会被保存下来 50 | class RecsysDatabase(object): 51 | 52 | def __init__(self): 53 | self.books_info = {} 54 | self.users_info = {} 55 | # self.umodel_info = {} 56 | self.tags_info = {} 57 | 58 | def findOneBook(self, book_id): 59 | if book_id in self.books_info: 60 | return self.books_info[book_id] 61 | else: 62 | book = db.books.find_one({"id":book_id}) 63 | if book and 'title' in book: 64 | self.books_info[book_id] = book 65 | return book 66 | 67 | def findOneUser(self, user_id): 68 | if user_id in self.users_info: 69 | return self.users_info[user_id] 70 | else: 71 | user = db.users.find_one({"user_id":user_id}) 72 | if user: 73 | self.users_info[user_id] = user 74 | return user 75 | 76 | def findOneTag(self, tag_id): 77 | if tag_id in self.tags_info: 78 | return self.tags_info[tag_id] 79 | else: 80 | tag = db.tags.find_one({"name":tag_id}) 81 | if tag: 82 | self.tags_info[tag_id] = tag 83 | return tag 84 | 85 | def findOneModel(self, mod_id): 86 | if mod_id in self.umodel_info: 87 | return self.umodel_info[mod_id] 88 | else: 89 | mod = db.umodel.find_one({"user_id":mod_id}) 90 | if mod: 91 | self.umodel_info[mod_id] = mod 92 | return mod 93 | 94 | # 标签标准化类 95 | # transform 96 | # transform_from_db 97 | # simple_transform 98 | class StandardTags(object): 99 | 100 | def __init__(self): 101 | self.rawtags = {} 102 | self.model = None 103 | self.start = None 104 | self.domain = None 105 | pass 106 | 107 | def _loadModel(self): 108 | if not self.model: 109 | self.model = gensim.models.Word2Vec.load("corpus/misc.model") 110 | 111 | def _loadRawtags(self): 112 | if not self.rawtags: 113 | total = db.tags.count() 114 | for i,t in enumerate(db.tags.find()): 115 | self.rawtags[t['name']] = t 116 | prog_d('getting tags from mongo', i, total) 117 | 118 | self.root = 0 119 | self._loadStart() 120 | for i in self.start: 121 | if i not in self.rawtags: 122 | logging.warn('%s not in db.tags' % i) 123 | continue 124 | self.root += len(self.rawtags[i]['book_ref']) 125 | 126 | def _loadStart(self): 127 | if not self.start: 128 | self.start = [i.strip().decode('utf-8') for i in open('log/tags.start.txt')] 129 | 130 | def _loadDomain(self): 131 | if not self.domain: 132 | self.domain = [i.split(' ')[0].decode('utf-8') for i in open('log/tag.domain-classify.txt')] 133 | 134 | def transform_multi(self, input_tags, thres=0.01): 135 | self._loadRawtags() 136 | 137 | if isinstance(input_tags, list): 138 | normal = list(set(input_tags) - set(self.start)) 139 | elif isinstance(input_tags, unicode): 140 | normal = [input_tags] 141 | if not normal: 142 | return input_tags 143 | # logging.debug('start appending db.tags.') 144 | # # tag = [] 145 | # rawtags = {} 146 | # for t in db.tags.find(): 147 | # rawtags[t['name']] = t 148 | # tag.append(t) 149 | # rawtags = dict([(i['name'], i) for i in tag]) 150 | mtrx = self._solveMImatrix(start, normal) 151 | # pickle.dump(mtrx, open('dump/MImtrx.dmp', 'w')) 152 | # mtrx = pickle.load(open('dump/MImtrx.dmp')) 153 | 154 | ret = {} 155 | maximum = self._getMtrxMaxVec(mtrx) 156 | for val in maximum: 157 | if val[2] < thres: 158 | break 159 | ret.append(self.start[val[0]]) 160 | if normal[val[1]] not in ret: 161 | ret[normal[val[1]]] = self.start[val[0]] 162 | return ret 163 | 164 | # 利用word2vec计算相似标签 165 | def similar(self, inp_tag, thres=0.01): 166 | self._loadModel() 167 | self._loadStart() 168 | ret_list = {} 169 | for tag in self.start: 170 | try: 171 | ret_list[tag] = self.model.similarity(tag, inp_tag) 172 | except: 173 | continue 174 | ret_list_item = ret_list.items() 175 | ret_list_item.sort(cmp=lambda a,b:cmp(a[1],b[1]), reverse=True) 176 | return [(x[0],x[1]) for x in ret_list_item if x[1] > thres] 177 | 178 | ### 计算单个标签的最相似标准标签, 直接计算 179 | def transform(self, inp_tag, thres=0.01): 180 | self._loadRawtags() 181 | self._loadStart() 182 | if inp_tag not in self.rawtags: 183 | return 184 | ret_list = {} 185 | for tag in self.start: 186 | a_set = set([x[0] for x in self.rawtags[tag]['book_ref']]) 187 | b_set = set([x[0] for x in self.rawtags[inp_tag]['book_ref']]) 188 | ret_list[tag] = self._calMIvalue(a_set, b_set) 189 | ret_list_item = ret_list.items() 190 | ret_list_item.sort(cmp=lambda a,b:cmp(a[1],b[1]), reverse=True) 191 | return [(x[0],x[1]) for x in ret_list_item if x[1] > thres] 192 | 193 | ### 计算单个标签的最相似标准标签, 从数据库获取, 默认thres = 0.01 194 | #@return list, 如果输入标签不是启动标签 195 | #@return unicode, 输入标签原样返回 196 | #@return None, 无效标签 197 | def transform_from_db(self, inp_tag): 198 | self._loadStart() 199 | if inp_tag in self.start: 200 | return inp_tag 201 | else: 202 | ret = rsdb.findOneTag(inp_tag)#}, {'standard':1}) 203 | # print ret 204 | if ret and 'standard' in ret and ret['standard']: 205 | return ret['standard'] 206 | 207 | # 永远只返回None或者最相似标签 208 | def simple_transform(self, inp_tag): 209 | ret = self.transform_from_db(inp_tag) 210 | if isinstance(ret, unicode): 211 | return ret 212 | elif isinstance(ret, list): 213 | return ret[0][0] 214 | 215 | # 把矩阵所有数字按照大小排列, 获取一个(x,y,value)的列表,标记坐标和值 216 | def _getMtrxMaxVec(self, mtrx): 217 | ret = [] 218 | used_col = set() 219 | PROG = len(mtrx[0]) 220 | for i in range( len(mtrx[0]) ): 221 | j = i % len(mtrx) 222 | rowmax = max(mtrx[j]) 223 | if rowmax == -1: 224 | continue 225 | rowmax_idx = mtrx[j].index(rowmax) 226 | ret.append( (j, rowmax_idx, rowmax) ) 227 | mtrx[j][rowmax_idx] = -1 228 | prog_d('_getMtrxMaxVec %f' % rowmax, i, PROG) 229 | ret.sort( cmp=lambda a,b: cmp(a[2], b[2]), reverse=True) 230 | return ret 231 | 232 | def _solveMImatrix(self, normal): 233 | 234 | MImatrix = [] 235 | root = 0 236 | for i in (self.start+normal): 237 | if i not in self.rawtags: 238 | logging.warn('%s not in db.tags' % i) 239 | continue 240 | root += len(self.rawtags[i]['book_ref']) 241 | 242 | # c = 0 243 | # total = len(self.start)*len(normal) 244 | 245 | for i, st in enumerate(self.start): 246 | MImatrix.append([]) 247 | for j, t in enumerate(normal): 248 | st_set = set([x[0] for x in self.rawtags[st]['book_ref']]) 249 | if t in self.rawtags: 250 | t_set = set([x[0] for x in self.rawtags[t]['book_ref']]) 251 | MImatrix[i].append(self._calMIvalue(st_set, t_set, root)) 252 | else: 253 | MImatrix[i].append(0.0) 254 | # prog_d('solve Matrix row', c, total) 255 | # c += 1 256 | 257 | return MImatrix 258 | 259 | def _calMIvalue(self, a_set, b_set): 260 | pab = math.fabs(float(len(a_set&b_set)) / self.root) 261 | pa = math.fabs(float(len(a_set)) / self.root) 262 | pb = math.fabs(float(len(b_set)) / self.root) 263 | Iab = pab * math.log((pab+1) / (pa*pb)) 264 | Ha = -pa * math.log(pa) 265 | Hb = -pb * math.log(pb) 266 | return float(Iab) / (float(Ha + Hb) / 2) 267 | 268 | rsdb = RecsysDatabase() 269 | stdtag = StandardTags() 270 | 271 | # set PROG before using this function 272 | def prog_d(dstr, line=-1, total=100): 273 | global PROG_REC 274 | if line >= 0: 275 | progress = int(float(line)/float(total) * 100 + 1) 276 | if progress not in PROG_SCALE or progress == PROG_REC: 277 | return 278 | # print progress 279 | PROG_REC = progress 280 | dstr += ' %d%%(%d/%d) -=-=-' % (progress, line, total) 281 | logging.info('-=-=- Processing ' + dstr) 282 | else: 283 | logging.info('-=-=- Finishing ' + dstr) 284 | 285 | ### 计算用户相似度,利用余弦公式, a和b向量是维度和元素都是相同的 286 | def getCosSim(a_vec, b_vec): 287 | RU = 0.0 288 | Ra = 0.0 289 | Rb = 0.0 290 | for k in a_vec.keys(): 291 | RU += a_vec[k]*b_vec[k] 292 | Ra += a_vec[k]**2 293 | Rb += b_vec[k]**2 294 | RaD = math.sqrt(Ra) 295 | RbD = math.sqrt(Rb) 296 | root = RaD * RbD 297 | if root != 0: 298 | return RU / RaD * RbD 299 | else: 300 | return 0.0 301 | 302 | 303 | def getLines(inpfile): 304 | count = -1 305 | for count,line in enumerate(open(inpfile,'rU')): 306 | pass 307 | count += 1 308 | return count 309 | 310 | def loadBookLst(): 311 | books = [] 312 | bid = set() 313 | for u in db.umodel.find(): 314 | if 'interest_eval' not in u or 'user_id' not in u: 315 | continue 316 | for h in rsdb.findOneUser(u['user_id'])['history']: 317 | book = rsdb.findOneBook(h['book_id']) 318 | if not book or 'title' not in book: 319 | continue 320 | if book['id'] not in bid: 321 | books.append(book) 322 | bid.add(book['id']) 323 | return books 324 | 325 | def loadUModels(): 326 | umodels = [] 327 | for u in db.umodel.find(): 328 | umodels.append(u) 329 | return umodels 330 | 331 | 332 | if __name__ == '__main__': 333 | for i in range(1000): 334 | prog_d('a', i, 1000) -------------------------------------------------------------------------------- /engine/build_association_strength.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | from wac import loadLevel 4 | 5 | 6 | def main(thres=0.00001): 7 | level = loadLevel() 8 | levnodes = level[0][2].keys() 9 | assoStren = dict([(x, []) for x in level[0][2].keys()]) # 启动标签 10 | for asso in assoStren.keys(): # 每个启动标签 11 | for lev in range(len(level)): # 每一层 12 | # 构造一层与当前节点相关的关联强度 13 | assoPend = dict([(x, 0.0) for x in level[lev][2].keys()]) 14 | if lev == 0: 15 | # 第一层只标记0或者1 16 | for tag in level[lev][2].keys(): # 每一层里的每个标签 17 | if asso == tag: 18 | assoPend[tag] = 1.0 19 | else: 20 | assoPend[tag] = 0.0 21 | else: 22 | for tag in level[lev][2].keys(): 23 | # 使用前一层的标签计算与当前层tag的P值以及其关联强度的乘积 24 | for pre_tag in level[lev-1][2].items(): # 前一层的标签 pre_tag[0] unicode, pre_tag[1] dict 25 | assoPend[tag] += assoStren[asso][lev-1][pre_tag[0]] * pre_tag[1][tag]# AS * P 26 | 27 | # 添加一层关联强度 28 | assoStren[asso].append(assoPend) 29 | pickle.dump(assoStren, open('dump/assostren.dmp', 'w') ) 30 | 31 | 32 | 33 | if __name__ == '__main__': 34 | main() -------------------------------------------------------------------------------- /engine/build_domain_tags.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | from stdtag import StandardTags 4 | from wac import * 5 | import gensim 6 | 7 | stdtag = StandardTags() 8 | stdtag._loadStart() 9 | 10 | INP_DOM = u'计算机' 11 | 12 | def main(): 13 | model = gensim.models.Word2Vec.load("corpus/misc.model") 14 | tags = [] 15 | for tag in stdtag.start: 16 | try: 17 | sim = model.similarity(tag, INP_DOM) 18 | except: 19 | continue 20 | tags.append( (tag, sim) ) 21 | tags.sort(cmp=lambda a,b:cmp(a[1],b[1]), reverse=True) 22 | 23 | with open('log/tag.domain.txt', 'w') as f: 24 | for t in tags: 25 | pstr = '%s %f\n' % (t[0], t[1]) 26 | f.write(pstr.encode('utf-8')) 27 | 28 | if __name__ == '__main__': 29 | main() 30 | -------------------------------------------------------------------------------- /engine/build_pro_vec.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | # from stdtag import StandardTags 4 | from wac import * 5 | import gensim 6 | 7 | # stdtag = StandardTags() 8 | stdtag._loadStart() 9 | stdtag._loadDomain() 10 | #level = loadLevel() 11 | 12 | ### 人工分类的领域,需要转换为顶层标签对应领域 13 | # domain = { 14 | # u'技术' : [u'统计学', u'设计模式', u'技术分析', u'生物学', u'计算机科学', u'计算机技术'], 15 | # u'经济' : [u'经济学', u'经济管理'], 16 | # u'文学' : [u'诗歌', u'红学', u'职场小说', u'古代文学', u'俄国文学', u'午夜文库', u'散文', u'德语文学'], 17 | # u'艺术' : [u'绘画', u'艺术', u'美学'] , 18 | # u'历史' : [u'清史', u'传记'], 19 | # u'文化' : [u'语文', u'西方', u'中国文化', u'经学', u'新媒体', u'欧美', u'文化研究' ], 20 | # u'金融' : [u'金融学'], 21 | # u'漫画' : [u'漫画'], 22 | # u'法学' : [u'法学'], 23 | # } 24 | 25 | domain = { 26 | u'程序设计' : [u'程序设计', u'调试', u'并发', u'版本控制', u'程序开发', u'前端开发', u'移动开发', u'多线程', u'云计算', u'编译原理', u'算法'], 27 | u'信息安全' : [u'信息安全', u'计算机安全', u'加密解密', u'密码学'], 28 | u'人工智能' : [u'人工智能', u'人机交互', u'机器学习', u'推荐系统'], 29 | u'集体智慧' : [u'集体智慧', u'数据分析', u'回归分析', u'数值分析'], 30 | u'计算机硬件' : [u'单片机', u'嵌入式', u'硬件编程', u'嵌入式系统'], 31 | u'计算机网络' : [u'计算机网络', u'网络协议', u'网络编程'], 32 | u'计算机图像' : [u'计算机图像', u'机器视觉', u'数字图像处理', u'计算机视觉'], 33 | } 34 | 35 | ASSO_THRES = 0.0 36 | WORD2VEC_THRES = 0.0 37 | 38 | def build_provec(): 39 | 40 | ### 获得顶层标签的领域对应, 第四层 41 | toptag = {} 42 | for d in domain.items(): 43 | for tag in d[1]: 44 | toptag[tag] = d[0] 45 | 46 | ### 根据关联强度对每个顶层标签聚类所有启动标签,按照关联强度排列 47 | assostren = pickle.load(open('dump/assostren.dmp')) 48 | 49 | # 获得顶层标签对于启动标签的关联强度 50 | toptag_cluster = {} 51 | for tag in toptag.keys(): 52 | cluster = [] 53 | for sttag in assostren.keys(): 54 | # print sttag 55 | if tag not in assostren[sttag][4]: 56 | continue 57 | assoval = assostren[sttag][4][tag] 58 | #logging.debug('assoval %f' % assoval) 59 | 60 | if assoval > ASSO_THRES: 61 | cluster.append( (sttag, assoval) ) 62 | # print len(cluster) 63 | 64 | cluster.sort( cmp=lambda a,b:cmp(a[1], b[1]), reverse=True ) 65 | # for t in cluster: 66 | logging.debug('toptag_cluster: %s - [%s]\r\n\r\n' % (tag, ' '.join([x[0] for x in cluster]) )) 67 | toptag_cluster[tag] = cluster 68 | 69 | pickle.dump(toptag_cluster, open('dump/toptagcluster.dmp', 'w')) 70 | 71 | ### 构建pro_vec,完成Step1 72 | logging.debug(u'构建pro_vec,完成Step1') 73 | pro_vec = {} 74 | for sttag in assostren.keys(): # 启动标签 75 | idxmin = 1000 76 | ttag_spec = '' 77 | for ttag in toptag_cluster.items(): # 顶层标签 78 | cluster = [x[0] for x in ttag[1]] 79 | if sttag not in cluster: 80 | continue 81 | idx = cluster.index(sttag) 82 | if idx < idxmin: 83 | idxmin = idx 84 | ttag_spec = ttag[0] 85 | if not ttag_spec: 86 | continue 87 | pro_vec[sttag] = ( ttag_spec, math.log(idxmin + 2)) 88 | logging.debug('%s, %s, %f' % (sttag, ttag_spec, math.log(idxmin + 2)) ) 89 | pickle.dump(pro_vec, open('dump/provec.dmp', 'w')) 90 | # return assostren, toptag_cluster 91 | 92 | def build_provec_v2(): 93 | ### 获得顶层标签的领域对应, wac树的其中一层 94 | logging.debug(u'获得顶层标签的领域对应, 第四层') 95 | toptag = {} 96 | for d in domain.items(): 97 | for tag in d[1]: 98 | toptag[tag] = d[0] 99 | 100 | ### 根据关联强度对每个顶层标签聚类所有启动标签,按照关联强度排列 101 | # logging.debug(u'根据关联强度对每个顶层标签聚类所有启动标签,按照关联强度排列') 102 | # assostren = pickle.load(open('dump/assostren.dmp')) 103 | toptag_cluster = {} 104 | 105 | ### 尝试用word2vec来聚类 106 | model = gensim.models.Word2Vec.load("corpus/misc.model") 107 | 108 | # 获得每个领域标签的启动标签聚类 109 | toptag_cluster = {} 110 | for t1 in toptag.keys(): 111 | cluster = [] 112 | for t2 in stdtag.domain: 113 | sim = similar(t1, t2, model) 114 | if sim > WORD2VEC_THRES: 115 | cluster.append( (t2, sim) ) 116 | # print t1, t2, similar(t1, t2, model) 117 | # logging.info('toptag: %s, starttag: %s - %f' % (t1, t2, similar(t1, t2) ) ) 118 | cluster.sort( cmp=lambda a,b:cmp(a[1], b[1]), reverse=True ) 119 | toptag_cluster[t1] = cluster 120 | logging.debug('toptag: %s, starttag [%s]' % (t1, ' '.join([unicode(x[0])+unicode(x[1]) for x in cluster]) ) ) 121 | 122 | # pickle.dump(toptag_cluster, open('dump/toptagcluster.dmp', 'w')) 123 | 124 | logging.debug(u'构建pro_vec,完成Step1') 125 | pro_vec = {} 126 | for sttag in stdtag.domain: # 启动标签 127 | idxmin = 1000 128 | simmin = 0 129 | ttag_spec = '' 130 | for ttag in toptag_cluster.items(): # 顶层标签 131 | cluster = [x[0] for x in ttag[1]] 132 | if sttag not in cluster: 133 | continue 134 | idx = cluster.index(sttag) 135 | sim = ttag[1][idx][1] 136 | print sim 137 | if sim > simmin: 138 | simmin = sim 139 | ttag_spec = ttag[0] 140 | if not ttag_spec: 141 | continue 142 | pro_vec[sttag] = ( ttag_spec, math.log(simmin + 2) ) 143 | logging.debug(u'%s - %s, %f' % (sttag, ttag_spec, math.log(simmin + 2)) ) 144 | pickle.dump(pro_vec, open('dump/provec.dmp', 'w')) 145 | 146 | def similar(a, b, model): 147 | try: 148 | return model.similarity(a, b) 149 | except: 150 | return 0.0 151 | 152 | 153 | if __name__ == '__main__': 154 | build_provec_v2() 155 | -------------------------------------------------------------------------------- /engine/build_rawtags.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | 4 | 5 | # param could be a list of list like [[],[],[]] which contains string. 6 | # param could be a list of string. 7 | # return is False or the match value(could be a list or string) 8 | def getCommonValue(values): 9 | if not values or len(values) == 1 : 10 | return False 11 | 12 | val = values[0] 13 | if isinstance(val, list): 14 | ret = [] 15 | for v in val: 16 | for value in values: 17 | if v not in value: 18 | break 19 | else: 20 | ret.append(v) 21 | return ret 22 | elif isinstance(val, str) or isinstance(val, unicode): 23 | for value in values: 24 | if val != value: 25 | return False 26 | return val 27 | 28 | def build_starttags(used_limit): 29 | rawtags = [] 30 | for t in db.tags.find(): 31 | rawtags.append(t) 32 | 33 | rawtags.sort(cmp=lambda x,y: cmp(len(x['book_ref']), len(y['book_ref'])), reverse=True) 34 | newtags = [x for x in rawtags if len(x['book_ref']) > int(used_limit)] 35 | rawtags = dict( [(i['name'], i) for i in newtags] ) 36 | prog_d('rawtags len:%d ' % len(rawtags)) 37 | # tag_authors = {tag name: {'author': {book id: [author] }, 'title': {book id: "title"} } } 38 | tag_metas = dict() 39 | for book in db.books.find(): 40 | if 'tags' not in book or not book['tags']: 41 | continue 42 | for tag in book['tags']: 43 | if tag['name'] not in tag_metas: 44 | tag_metas[tag['name']] = dict() 45 | tag_metas[tag['name']]['author'] = dict() 46 | if book['author']: # book that have no author will be ignored. 47 | tag_metas[tag['name']]['author'][book['id']] = book['author'] # a list 48 | logging.info("finished constructing {tag name: {'author': {book id: [author] }, 'title': {book id: 'title'} } } from db.books") 49 | 50 | # string match 51 | author = set() 52 | for b in db.books.find(): 53 | if 'author' in b: 54 | for a in b['author']: 55 | author.add(a) 56 | logging.info("finished query all author from db.books") 57 | 58 | author_tags = {} 59 | for t in tag_metas.items(): 60 | if t[0] in rawtags: #### 61 | if t[0] in author: 62 | author_tags[t[0]] = [t[0]] 63 | if len(t[1]['author']) > 0: 64 | tagged_author = [x for x in t[1]['author'].values()] 65 | # should be cases. 66 | out = getCommonValue( tagged_author ) #### 67 | if out: 68 | if t[0] not in author_tags: 69 | author_tags[t[0]] = out 70 | else: 71 | author_tags[t[0]] += out 72 | 73 | starttags = list( set(rawtags) - set(author_tags.keys()) ) 74 | 75 | # mtrx = solveWord2VecMatrix(starttags) 76 | # pickle.dump(mtrx, open('dump/Word2VecMtrx.dmp', 'w')) 77 | 78 | with open('log/tags.start-jieba.txt', 'w') as f: 79 | for m in starttags: 80 | pstr = '%s 1\n' % m 81 | f.write(pstr.encode('utf-8')) 82 | 83 | with open('log/tags.start.txt', 'w') as f: 84 | for m in starttags: 85 | pstr = '%s\n' % m 86 | f.write(pstr.encode('utf-8')) 87 | 88 | # logging.debug('rawtags: %d, author: %d, starttags: %d' 89 | # % ( len(rawtags), len(author_tags), len(standard_tags) ) ) 90 | 91 | 92 | if __name__ == '__main__': 93 | logging.info("running %s" % ' '.join(sys.argv)) 94 | 95 | # check and process input arguments 96 | if len(sys.argv) < 2: 97 | print 'usage: python build_starttags.py ' 98 | sys.exit(1) 99 | used_limit = sys.argv[1] 100 | build_starttags(used_limit) -------------------------------------------------------------------------------- /engine/build_wac_tree.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | from stdtag import StandardTags 4 | import gensim 5 | 6 | stdtag = StandardTags() 7 | 8 | 9 | def solveWord2VecMatrix(starttags, model): 10 | lines = len(starttags)*len(starttags) 11 | mtrx = {} 12 | # 计算相似度矩阵 13 | c = 0 14 | for k in starttags: 15 | try: 16 | model.similarity(u"C", k) 17 | if k not in mtrx: 18 | mtrx[k] = {} 19 | for l in starttags: 20 | try: 21 | model.similarity(u"C", l) 22 | mtrx[k][l] = model.similarity(k,l) 23 | c += 1 24 | prog_d('%s %s %f similarity count' % (k,l,mtrx[k][l]), c, lines) 25 | except: 26 | continue 27 | except: 28 | continue 29 | return mtrx 30 | 31 | def getCluster(b,d, mtrx): 32 | return b 33 | 34 | def solveWACmatrix(mtrx, T=0.9): 35 | # 1-15 T=1, 15-44 T=0.9 36 | for i in range(50): 37 | if os.path.exists('dump/waclevel%d.dmp' % int(i+1)): 38 | continue 39 | if i == 0: 40 | b = mtrx 41 | else: 42 | b = pickle.load(open('dump/waclevel%d.dmp' % int(i)))[1] 43 | # {tag_name:degree},{tag1:{tag1:degree}}, {tag1:{tag:degree}} 44 | a,b,c = buildUpperLevel(b, T) 45 | 46 | pickle.dump((a,b,c), open('dump/waclevel%d.dmp' % int(i+1), 'w')) 47 | prog_d('dump/waclevel%d.dmp' % int(i+1)) 48 | 49 | # 构建上一层节点,返回值全部是字典,用于保存对应关系 50 | # @param Wl: 二维dict,原始数据,存放相似度矩阵 51 | # @return Vh: 一维dict,存放上一层点集tuple列表,(tag_name, degree) 52 | # @return Wh:二维dict,存放本层相似度矩阵 Eh通过Wh和阀值(0.0001)来确定 53 | # @return Pl: 二维dict(不等边),存放插值矩阵,上层跟下层的关系, 同样用阀值(0.0001)确定边的存在 54 | def buildUpperLevel(Wl, T): 55 | # global PROG 56 | 57 | # 计算v跟vset的degree,即v跟vset里的每一个节点的相似度累加,数据来自mtrx 58 | def calDegree(v, vset): 59 | ret = 0.0 60 | for l in vset: 61 | if v != l[0]: 62 | ret += l[1] 63 | return ret 64 | 65 | ### 第一步,生成上层顶点集 66 | 67 | # 计算所有标签的度:标签跟当层所有其他标签的相似度累加 68 | # 把节点降序排列,根据阀值筛选degree,挑选Vl的上一层节点Vh出来 69 | degree = {} # dict([ (x[0], ) for x in Vh.items() ]) 70 | for i,k in enumerate(Wl.items()): 71 | degree[k[0]] = calDegree(k[0], k[1].items()) 72 | VlItems = degree.items() 73 | VlItems.sort(cmp=lambda a,b:cmp(a[1],b[1]), reverse=True) 74 | logging.debug('\rsorted VlItems full display: %s' % ' '.join([x[0] for x in VlItems])) 75 | 76 | # 取Vl的第一个作为Vl的上一层Vh节点 77 | VhItems = [] 78 | VhItems.append(VlItems[0]) 79 | for i, v in enumerate(VlItems): 80 | prog_d('generate Vh nodes.', i, len(VlItems)) 81 | if i == 0: 82 | continue 83 | if calDegree(v, VhItems) <= calDegree(v, VlItems) * T: # 非强连接加入Vh中 84 | VhItems.append( VlItems[i] ) 85 | 86 | Vh = dict(VhItems) 87 | Vl = dict(VlItems) 88 | 89 | ### 第二步,建立两个顶点集的关系, 通过插值矩阵来刻画 90 | # 先将Wl转化为普通数组形式 91 | Wlist = [] 92 | for i,k in enumerate(Wl.items()): 93 | Wlist.append([]) 94 | for l in k[1].items(): 95 | Wlist[i].append(Wl[k[0]][l[0]]) 96 | 97 | Pl = [] 98 | Pl_ret = {} 99 | prog = len(Vh)*len(Vl) 100 | c = 0 101 | logging.debug('start generating pl mtrx. %d ' % prog) 102 | for i,k in enumerate(Vl.keys()): 103 | Pl.append([]) 104 | if k not in Pl_ret: 105 | Pl_ret[k] = {} 106 | for j,l in enumerate(Vh.keys()): 107 | 108 | # 建立插值稀疏矩阵 109 | if k in Vh and l in Vh: 110 | if k == l: 111 | Pl[i].append(1) 112 | Pl_ret[k][l] = 1 113 | else: 114 | Pl[i].append(0) 115 | Pl_ret[k][l] = 0 116 | elif k in Vl: 117 | Pl[i].append( Wl[k][l] / calDegree(k, VhItems) ) 118 | Pl_ret[k][l] = Wl[k][l] / calDegree(k, VhItems) 119 | prog_d('create P matrix', c, prog) 120 | #print c 121 | c += 1 122 | 123 | # 第三步 建立上一层的相似性矩阵Wh 124 | Wh = numpy.mat(Pl).T * numpy.mat(Wlist) * numpy.mat(Pl) 125 | 126 | # 第四步 生成边集,保存字典形式的矩阵 127 | Wh_ret = {} 128 | logging.debug('start saving mtrx.') 129 | for i,row in enumerate(Wh.A): 130 | for j,val in enumerate(row): 131 | # 初始化第二维字典 132 | if VhItems[i][0] not in Wh_ret: 133 | Wh_ret[VhItems[i][0]] = {} 134 | Wh_ret[VhItems[i][0]][VhItems[j][0]] = val 135 | 136 | return Vh, Wh_ret, Pl_ret 137 | 138 | def build_wac_tree(T): 139 | 140 | # starttags = stdtag._loadStart() 141 | model = gensim.models.Word2Vec.load("corpus/misc.model") 142 | 143 | # 载入领域相关标签 144 | stdtag._loadDomain() 145 | 146 | # 获得第一层相似度矩阵 147 | if os.path.exists('dump/word2vecmtrx.dmp'): 148 | mtrx = pickle.load(open('dump/word2vecmtrx.dmp')) 149 | else: 150 | mtrx = solveWord2VecMatrix(stdtag.domain, model) 151 | pickle.dump(mtrx, open('dump/word2vecmtrx.dmp', 'w')) 152 | 153 | # 以第一层相似度矩阵为输入,构建wac树,结果存放到dump/waclevel%d 里 154 | solveWACmatrix(mtrx, T) 155 | 156 | if __name__ == '__main__': 157 | 158 | # check and process input arguments 159 | if len(sys.argv) < 2: 160 | print 'usage: python build_wac_tree.py ' 161 | sys.exit(1) 162 | T = sys.argv[1] 163 | build_wac_tree(float(T)) -------------------------------------------------------------------------------- /engine/corpus/book_recsys.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import math 4 | import numpy 5 | import os,sys 6 | import csv 7 | import datetime 8 | import logging 9 | import pickle 10 | from time import sleep 11 | import pymongo 12 | from pymongo import MongoClient 13 | 14 | # mongo数据库配置 15 | conn = MongoClient('localhost',27017) 16 | db = conn.group_mems 17 | 18 | # 日志模块配置 19 | logging.basicConfig(level=logging.DEBUG, 20 | format='[%(asctime)s | %(funcName)s]: %(levelname)s %(message)s', 21 | datefmt='%a, %d %b %Y %H:%M:%S', 22 | filename='Analysis.log', 23 | filemode='a') 24 | 25 | console = logging.StreamHandler() 26 | 27 | formatter = logging.Formatter('[%(asctime)s | %(funcName)s]: %(levelname)s %(message)s') 28 | console.setFormatter(formatter) 29 | logging.getLogger('').addHandler(console) 30 | 31 | PROG = 100 32 | PROG_REC = 0 33 | PROG_SCALE = (0,10,20,30,40,50,60,70,80,90,100) 34 | 35 | # set PROG before using this function 36 | def prog_d(dstr, line=-1, total=100): 37 | global PROG_REC 38 | if line >= 0: 39 | progress = int(float(line)/float(total) * 100 + 1) 40 | if progress not in PROG_SCALE or progress == PROG_REC: 41 | return 42 | PROG_REC = progress 43 | dstr += ' %d%%(%d/%d) -=-=-' % (progress, line, total) 44 | logging.debug('-=-=- Processing ' + dstr) 45 | else: 46 | logging.debug('-=-=- Finishing ' + dstr) 47 | 48 | 49 | def getLines(inpfile): 50 | count = -1 51 | for count,line in enumerate(open(inpfile,'rU')): 52 | pass 53 | count += 1 54 | return count -------------------------------------------------------------------------------- /engine/corpus/gen_book_corpus.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | import gensim 4 | from gensim.corpora import textcorpus 5 | import re 6 | 7 | if __name__ == '__main__': 8 | 9 | logging.info("running %s" % ' '.join(sys.argv)) 10 | 11 | # check and process input arguments 12 | if len(sys.argv) < 2: 13 | print 'usage: python gen_book_corpus.py ' 14 | sys.exit(1) 15 | saved_file = sys.argv[1] 16 | 17 | dots = re.compile(ur'[\r\n,。?【】·`]') 18 | with open(saved_file, 'w') as f: 19 | for b in db.books.find(): 20 | if 'summary' in b and b['summary'].strip(): 21 | smry = re.sub(dots, "", b['summary']) 22 | wstr = '%s\r' % (b['summary']) 23 | f.write(wstr.encode('utf-8')) 24 | if 'author_intro' in b and b['author_intro'].strip(): 25 | ath_intr = re.sub(dots, "", b['author_intro']) 26 | wstr = '%s\r' % (b['author_intro']) 27 | f.write(wstr.encode('utf-8')) -------------------------------------------------------------------------------- /engine/corpus/gen_book_meta.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | 4 | 5 | def main(): 6 | meta = [] 7 | total = db.books.count() 8 | for i,b in enumerate(db.books.find()): 9 | if 'title' not in b: 10 | continue 11 | if b['title'].strip(): 12 | meta.append(b['title'].strip()) 13 | # if b['subtitle'].strip() and b['subtitle'].find(' ') < 0: 14 | # meta.append(b['subtitle'].strip()) 15 | prog_d('append meta.', i, total) 16 | 17 | with open('log/meta.start-jieba.txt' ,'w') as f: 18 | for m in meta: 19 | pstr = '%s 1\n' % m 20 | if pstr.count(' ') == 1: 21 | f.write(pstr.encode('utf-8')) 22 | 23 | if __name__ == '__main__': 24 | main() -------------------------------------------------------------------------------- /engine/corpus/jieba_cut.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | import jieba 4 | 5 | if __name__ == '__main__': 6 | logging.info("running %s" % ' '.join(sys.argv)) 7 | 8 | # check and process input arguments 9 | if len(sys.argv) < 3: 10 | print 'usage: python jieba_cut.py []' 11 | sys.exit(1) 12 | 13 | if len(sys.argv) == 4: 14 | inp1, outp, inp2 = sys.argv[1:] 15 | jieba.load_userdict(inp2) 16 | prog_d('jieba userdict loaded: %s' % inp2) 17 | elif len(sys.argv) == 3: 18 | inp1, outp = sys.argv[1:] 19 | 20 | totallines = getLines(inp1) 21 | with open(outp, 'w+') as jiebaf: 22 | with open(inp1) as srcf: 23 | for i,line in enumerate(srcf): 24 | jiebaf.write(' '.join(list(jieba.cut(line.decode('utf-8')))).encode('utf-8') ) 25 | prog_d('jieba write lines', i, totallines) -------------------------------------------------------------------------------- /engine/corpus/jieba_test.py: -------------------------------------------------------------------------------- 1 | #encoding=utf-8 2 | from __future__ import print_function, unicode_literals 3 | import sys 4 | # sys.path.append("../") 5 | import jieba 6 | jieba.load_userdict("userdict.txt") 7 | import jieba.posseg as pseg 8 | 9 | jieba.add_word('石墨烯', 1) 10 | jieba.add_word('凱特琳', 1) 11 | # jieba.del_word('自定义词', 1) 12 | 13 | test_sent = ( 14 | "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n" 15 | "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n" 16 | "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。" 17 | ) 18 | words = jieba.cut(test_sent) 19 | print('/'.join(words)) 20 | 21 | print("="*40) 22 | 23 | result = pseg.cut(test_sent) 24 | 25 | for w in result: 26 | print(w.word, "/", w.flag, ", ", end=' ') 27 | 28 | print("\n" + "="*40) 29 | 30 | terms = jieba.cut('easy_install is great') 31 | print('/'.join(terms)) 32 | terms = jieba.cut('python 的正则表达式是好用的') 33 | print('/'.join(terms)) 34 | 35 | print("="*40) 36 | # test frequency tune 37 | testlist = [ 38 | ('今天天气不错', ('今天', '天气')), 39 | ('如果放到post中将出错。', ('中', '将')), 40 | ('我们中出了一个叛徒', ('中', '出')), 41 | ] 42 | 43 | for sent, seg in testlist: 44 | print('/'.join(jieba.cut(sent, HMM=False))) 45 | word = ''.join(seg) 46 | print('%s Before: %s, After: %s' % (word, jieba.FREQ[word], jieba.suggest_freq(seg, True))) 47 | print('/'.join(jieba.cut(sent, HMM=False))) 48 | print("-"*40) -------------------------------------------------------------------------------- /engine/corpus/make_mecab_seed_data.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # Author: 52nlpcn@gmail.com 4 | # Copyright 2015 @ YuZhen Technology 5 | 6 | import codecs 7 | import sys 8 | 9 | def make_mecab_seed_data(input_file, output_file): 10 | input_data = codecs.open(input_file, 'r', 'utf-8') 11 | output_data = codecs.open(output_file, 'w', 'utf-8') 12 | for line in input_data.readlines(): 13 | word = line.strip() 14 | output_data.write(word+ ",0,0,0,0,0,0\n") 15 | input_data.close() 16 | output_data.close() 17 | 18 | if __name__ == '__main__': 19 | if len(sys.argv) < 3: 20 | print "pls use: python make_mecab_seed_data.py input output" 21 | sys.exit() 22 | input_file = sys.argv[1] 23 | output_file = sys.argv[2] 24 | make_mecab_seed_data(input_file, output_file) -------------------------------------------------------------------------------- /engine/corpus/make_mecab_train_data.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # Author: 52nlpcn@gmail.com 4 | # Copyright 2015 @ YuZhen Technology 5 | 6 | import codecs 7 | import sys 8 | 9 | def make_mecab_train_data(input_file, output_file): 10 | input_data = codecs.open(input_file, 'r', 'utf-8') 11 | output_data = codecs.open(output_file, 'w', 'utf-8') 12 | for line in input_data.readlines(): 13 | word_list = line.strip().split() 14 | if len(word_list) == 0: continue 15 | for word in word_list: 16 | output_data.write(word+ "\t0,0,0,0,0,0\n") 17 | output_data.write("EOS\n") 18 | input_data.close() 19 | output_data.close() 20 | 21 | if __name__ == '__main__': 22 | if len(sys.argv) < 3: 23 | print "pls use: python make_mecab_train_data.py input output" 24 | sys.exit() 25 | input_file = sys.argv[1] 26 | output_file = sys.argv[2] 27 | make_mecab_train_data(input_file, output_file) -------------------------------------------------------------------------------- /engine/corpus/process_wiki.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import logging 5 | import os.path 6 | import sys 7 | 8 | from gensim.corpora import WikiCorpus 9 | 10 | if __name__ == '__main__': 11 | program = os.path.basename(sys.argv[0]) 12 | logger = logging.getLogger(program) 13 | 14 | logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s') 15 | logging.root.setLevel(level=logging.INFO) 16 | logger.info("running %s" % ' '.join(sys.argv)) 17 | 18 | # check and process input arguments 19 | if len(sys.argv) < 3: 20 | print globals()['__doc__'] % locals() 21 | sys.exit(1) 22 | inp, outp = sys.argv[1:3] 23 | space = " " 24 | i = 0 25 | 26 | output = open(outp, 'w') 27 | wiki = WikiCorpus(inp, lemmatize=False, dictionary={}) 28 | for text in wiki.get_texts(): 29 | output.write(space.join(text) + "\n") 30 | i = i + 1 31 | if (i % 10000 == 0): 32 | logger.info("Saved " + str(i) + " articles") 33 | 34 | output.close() 35 | logger.info("Finished Saved " + str(i) + " articles") -------------------------------------------------------------------------------- /engine/corpus/train_word2vec_model.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import logging 5 | import os.path 6 | import sys 7 | import multiprocessing 8 | 9 | from gensim.corpora import WikiCorpus 10 | from gensim.models import Word2Vec 11 | from gensim.models.word2vec import LineSentence 12 | 13 | if __name__ == '__main__': 14 | program = os.path.basename(sys.argv[0]) 15 | logger = logging.getLogger(program) 16 | 17 | logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s') 18 | logging.root.setLevel(level=logging.INFO) 19 | logger.info("running %s" % ' '.join(sys.argv)) 20 | 21 | # check and process input arguments 22 | if len(sys.argv) < 4: 23 | print globals()['__doc__'] % locals() 24 | sys.exit(1) 25 | inp, outp1, outp2 = sys.argv[1:4] 26 | 27 | model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, 28 | workers=multiprocessing.cpu_count()) 29 | 30 | # trim unneeded model memory = use(much) less RAM 31 | # model.init_sims(replace=True) 32 | model.save(outp1) 33 | model.save_word2vec_format(outp2, binary=False) 34 | -------------------------------------------------------------------------------- /engine/log/domain.0.5.txt: -------------------------------------------------------------------------------- 1 | 日漫 2 | 3 | 日漫 专业书 4 | 5 | 日漫 专业书 文史 外语 6 | 7 | 文史 日漫 专业书 外语 俄罗斯文学 中国文学 数学史 新媒体 机器学习 8 | 9 | 专业书 机器学习 文史 中国文学 数学史 外语 俄罗斯文学 日漫 新媒体 人类学 日语学习 教育学 设计理论 艺术史 语音研究 投资理财 艺术设计 生物学 科学人文 汉学 电影评论 西方哲学 科幻小说 中国 文学理论 逻辑学 古代汉语 童年回忆 10 | 11 | 科幻小说 童年回忆 艺术史 古代汉语 汉学 电影评论 投资理财 西方哲学 人类学 文史 语音研究 艺术设计 中国文学 科学人文 教育学 日漫 设计理论 中国 俄罗斯文学 外语 数学史 逻辑学 日语学习 新媒体 机器学习 专业书 文学理论 生物学 文学研究 计量经济学 现代文学 历史地理 传播 世界历史 经营管理 职业规划 经管 商业 藏传佛教 法学 市场营销 企业管理 人生哲学 电影理论 心理学 神秘学 理论 史学理论 法国文学 现代 魏晋南北朝 考古学 拉美文学 古籍 海外中国研究 文字学 建筑 技术 政治经济学 自我成长 儿童教育 科学史 古文字 思想 中国现当代文学 现当代文学 中国哲学 文献学 海外汉学 新闻学 教科书 德语文学 建筑理论 文化史 传播学 管理学 职场小说 比较政治 戏曲 清史 国学 女性主义 艺术 文学 12 | 13 | 企业管理 计量经济学 现代 法学 新媒体 西方哲学 机器学习 艺术 文化史 市场营销 古籍 经营管理 思想 拉美文学 人生哲学 女性主义 教科书 教育学 人类学 管理学 历史地理 儿童教育 生物学 传播学 文史 文学 日漫 清史 史学理论 外语 文学研究 科幻小说 童年回忆 科学史 现代文学 设计理论 藏传佛教 科学人文 艺术设计 古文字 心理学 文献学 建筑理论 日语学习 建筑 技术 逻辑学 海外汉学 电影理论 中国文学 电影评论 语音研究 现当代文学 政治经济学 自我成长 世界历史 中国哲学 德语文学 新闻学 魏晋南北朝 文字学 海外中国研究 商业 汉学 俄罗斯文学 古代汉语 比较政治 理论 中国 职业规划 戏曲 神秘学 专业书 艺术史 文学理论 数学史 职场小说 投资理财 经管 中国现当代文学 法国文学 传播 国学 考古学 散文随笔 经济史 台湾文学 文学批评 前端 信息安全 古典诗词 中国近代史 软件测试 文学评论 中国古典 社会理论 欧洲 电子书 英国文学 交互设计 认知语言学 中国古典文学 大学教材 经学 建筑史 当代艺术 人工智能 伦理学 脑科学 新闻传播 文化研究 复杂系统 经济管理 现象学 音乐 当代文学 领导力 产品设计 天文 佛教 青春文学 古典文学 西方历史 文学史 书话 化学 分析哲学 文艺理论 地理 科学哲学 个人成长 灵修 音系学 成功学 语文 社会语言学 专业相关 青春小说 名著 金融学 平面设计 学术 通史 外国名著 宗教 佛学 学术史 戏剧 心灵成长 漫画绘本 项目管理 玄幻小说 研究方法 经济学 经典 美术史 艺术理论 计算机技术 电影书 俄国文学 当代 方法论 个人管理 英文原著 实验语音学 音韵学 青年漫画 数据处理 后现代 史学 学习方法 中国漫画 历史语言学 国际政治 哲学 博弈论 神学 文化 美国文学 心理治疗 城市规划 红学 近代史 民俗 古典音乐 官场小说 符号学 饮食文化 研究 美学 自我管理 语言与社会 西哲 西方 创新 网络营销 语音学 自然科学 中国史 马克思主义 工业设计 认知科学 科普 女性文学 性学 论文集 德国文学 统计学 中世纪 语言文字 中国文化 外语学习 禅宗 宋史 敏捷开发 科学 中医 家庭教育 连环画 电影研究 医学 价值投资 中国当代文学 语言学 世界史 语法研究 民俗学 拉美 传统文化 香港文学 翻译 思想史 教育 中国研究 书法 政治学 纪实文学 政治哲学 电子商务 中国现代文学 历史 语言学习 哲学史 文论 思维方法 社会心理学 古代文学 建筑设计 社会史 诗歌 14 | 15 | -------------------------------------------------------------------------------- /engine/log/domain.0.6.txt: -------------------------------------------------------------------------------- 1 | 人类学 古代文学 2 | 3 | 古代文学 人类学 新闻学 4 | 5 | 古代文学 新闻学 人类学 明史 6 | 7 | 明史 新闻学 人类学 古代文学 经学 分析哲学 书话 8 | 9 | 明史 古代文学 经学 书话 新闻学 人类学 分析哲学 写作 自我成长 网页设计 中医 戏曲 职场小说 10 | 11 | 分析哲学 人类学 书话 戏曲 网页设计 古代文学 写作 中医 经学 新闻学 明史 职场小说 自我成长 论文集 外国文学 政治经济学 西哲 个人成长 哲学史 经济管理 计算机技术 艺术史 台湾文学 中国当代文学 现代 古言 12 | 13 | 经学 书话 艺术史 古代文学 中医 计算机技术 外国文学 明史 台湾文学 西哲 中国当代文学 戏曲 论文集 哲学史 古言 自我成长 新闻学 经济管理 网页设计 政治经济学 现代 职场小说 分析哲学 人类学 个人成长 写作 方法论 语言与社会 价值投资 德国文学 理论 设计模式 伦理学 欧洲 俄罗斯文学 思维方式 建筑史 网络营销 启蒙 建筑理论 新媒体 计算机 科技 日语学习 语言文字 玄幻小说 英国文学 电影评论 近代史 中国古典文学 科幻 中国小说 新闻传播 德语文学 14 | 15 | 科技 外国文学 古代文学 中国古典文学 书话 玄幻小说 网页设计 写作 理论 建筑理论 科幻 西哲 中国当代文学 分析哲学 方法论 设计模式 台湾文学 语言与社会 新闻传播 日语学习 经学 德国文学 经济管理 中国小说 人类学 计算机 新媒体 戏曲 中医 职场小说 自我成长 古言 近代史 现代 思维方式 明史 价值投资 欧洲 俄罗斯文学 论文集 计算机技术 伦理学 建筑史 电影评论 新闻学 艺术史 英国文学 政治经济学 个人成长 语言文字 启蒙 网络营销 哲学史 德语文学 游戏开发 艺术 营销 通史 概率论 海外汉学 语音学 教科书 文论 项目管理 科学人文 诗歌 文学评论 中国现代文学 中国近代史 经管 经济学 拉美 语言学习 史学 化学 音系学 平面设计 文化 认知科学 美术 中国古典 计算机科学 前端开发 中国哲学 外语学习 魏晋南北朝 文学批评 官场小说 后现代 工业设计 人生哲学 翻译 人力资源 美学 海外中国研究 传播学 信息安全 研究 电影书 设计理论 政治学 科学 研究方法 学术 古典文学 符号学 社会语言学 商业 散文 文学史 戏剧 物理学 医学 名著 古文字 社会心理学 文史 史学理论 职业规划 大学教材 城市规划 脑科学 原版 教育 法学 成功学 西方哲学 数据分析 文学研究 16 | 17 | 职业规划 价值投资 艺术史 研究 德国文学 语音学 散文 台湾文学 社会语言学 人类学 史学 玄幻小说 电影评论 思维方式 翻译 外国文学 政治经济学 网页设计 平面设计 伦理学 人生哲学 名著 论文集 前端开发 化学 自我成长 史学理论 启蒙 音系学 中国哲学 语言与社会 信息安全 俄罗斯文学 计算机科学 新闻传播 商业 经济管理 古典文学 语言文字 拉美 德语文学 中国小说 西哲 政治学 文史 数据分析 经管 人力资源 教育 个人成长 概率论 认知科学 社会心理学 科学人文 欧洲 营销 经学 近代史 建筑理论 古文字 外语学习 英国文学 脑科学 中国古典 研究方法 中医 新媒体 海外中国研究 后现代 建筑史 戏曲 中国现代文学 设计模式 中国近代史 符号学 游戏开发 成功学 写作 城市规划 文学史 教科书 文学批评 项目管理 原版 传播学 理论 文论 通史 大学教材 文化 官场小说 魏晋南北朝 中国当代文学 文学评论 计算机 中国古典文学 科学 新闻学 戏剧 电影书 语言学习 工业设计 古言 明史 经济学 方法论 美学 海外汉学 法学 科技 学术 古代文学 分析哲学 美术 日语学习 西方哲学 文学研究 设计理论 哲学史 现代 职场小说 物理学 书话 医学 科幻 艺术 计算机技术 诗歌 网络营销 数学 考古学 宋史 景观 电影理论 民俗学 英文原著 计量经济学 文学 数据处理 经营管理 敏捷开发 语文 国际政治 科学哲学 古典诗词 思想 影评 国学 投资理财 散文随笔 女性文学 人工智能 中国 现代文学 存在主义 现象学 文化史 企业管理 科学史 红学 博弈论 中国文学 民俗 艺术设计 社会科学 中国漫画 软件测试 政治哲学 绘画 历史地理 人物传记 科幻小说 中国史 现代性 通识 西方 漫画绘本 音乐 古典音乐 反乌托邦 性学 金融学 科普 马克思主义 古代 前端 古代汉语 古籍 汉语 专业相关 书法 动漫 传播 建筑 自然科学 会计 俄国文学 音韵学 艺术理论 思想史 心理学 数学史 法国文学 社会理论 佛教 市场营销 软件工程 语言学 现当代文学 复杂系统 纪实文学 工具书 管理学 比较政治 香港文学 个人管理 认知语言学 专业书 金融 禅宗 统计学 中国历史 机器学习 法律 连环画 语音研究 自我管理 青年漫画 画册 电影研究 领导力 清史 藏书 技术 中世纪 电子书 地理 基督教 管理 教育学 灵修 学习方法 新经济 外语 道家 中国现当代文学 文学理论 生物学 心灵成长 产品设计 神秘学 藏传佛教 青春小说 学术史 神学 专业 外国名著 近代 哲学 社会史 进化论 经济史 设计 晚清 西方历史 武术 天文 社会学 世界史 女性主义 美国文学 创新 文艺理论 治愈系 课本 日漫 历史语言学 传统文化 拉美文学 饮食文化 经典 交互设计 精神分析 世界历史 中国文化 当代 电子商务 逻辑 语法研究 心理治疗 美术史 文化研究 修身 文字学 宗教 逻辑学 知识 童年回忆 入门 当代艺术 佛学 建筑设计 汉学 思维方法 实验语音学 家庭教育 文献学 历史 当代文学 中国研究 欧美 青春文学 儿童教育 18 | 19 | -------------------------------------------------------------------------------- /engine/log/domain.0.7.txt: -------------------------------------------------------------------------------- 1 | 生物学 诗歌 美学 2 | 3 | 生物学 诗歌 美学 新媒体 4 | 5 | 新媒体 美学 诗歌 生物学 欧美 6 | 7 | 诗歌 美学 生物学 新媒体 欧美 计算机科学 经济管理 8 | 9 | 欧美 经济管理 计算机科学 生物学 诗歌 美学 新媒体 艺术 传记 红学 10 | 11 | 艺术 欧美 计算机科学 生物学 传记 新媒体 诗歌 美学 经济管理 红学 古代文学 学习 计算机技术 散文 金融学 12 | 13 | 散文 诗歌 学习 计算机技术 欧美 艺术 传记 生物学 美学 红学 新媒体 经济管理 金融学 计算机科学 古代文学 语文 经学 专业 中国文化 经济学 俄国文学 专业书 14 | 15 | 计算机技术 诗歌 艺术 经济学 语文 专业书 金融学 传记 经学 欧美 学习 经济管理 计算机科学 新媒体 红学 专业 美学 古代文学 生物学 中国文化 俄国文学 散文 设计模式 法学 绘画 职场小说 午夜文库 统计学 西方 技术分析 德语文学 清史 文化研究 16 | 17 | 语文 中国文化 诗歌 金融学 计算机技术 计算机科学 专业书 经学 红学 统计学 午夜文库 古代文学 传记 设计模式 德语文学 美学 职场小说 清史 经济学 学习 技术分析 经济管理 法学 俄国文学 生物学 专业 西方 散文 绘画 文化研究 新媒体 艺术 欧美 文艺理论 进化论 创业 实用 教程 前端开发 儿童文学 文论 饮食文化 统计 学术 大学教材 科学哲学 历史学 军事 连环画 外语 日漫 18 | 19 | 经济管理 散文 午夜文库 文化研究 诗歌 法学 饮食文化 历史学 专业 欧美 西方 艺术 学习 文论 日漫 美学 大学教材 教程 创业 传记 计算机科学 进化论 实用 儿童文学 红学 专业书 经学 技术分析 清史 古代文学 俄国文学 设计模式 经济学 前端开发 新媒体 语文 统计学 绘画 学术 生物学 金融学 军事 外语 中国文化 职场小说 文艺理论 德语文学 计算机技术 科学哲学 连环画 统计 名著 俄罗斯文学 美术史 古希腊 方法 语音研究 女性文学 民俗 语法研究 趣味 文学批评 儿童教育 手工 经管 人文 教育 古代汉语 实验语音学 中国现代文学 企业管理 西方哲学 政治经济学 个人管理 画册 人生哲学 欧洲 心灵成长 文字学 中国古典文学 电子书 两性 个人成长 考古 交互设计 数据分析 宗教 纪实 现代性 敏捷开发 人工智能 网页设计 中世纪 现代 历史语言学 学术史 理论 建筑 20 | 21 | 绘画 趣味 建筑 经济管理 美术史 画册 文字学 古代文学 儿童教育 金融学 网页设计 个人管理 人工智能 法学 人文 连环画 计算机技术 实用 学术史 专业书 艺术 欧美 外语 历史学 散文 俄国文学 统计学 传记 实验语音学 职场小说 进化论 日漫 专业 文化研究 学习 统计 创业 纪实 心灵成长 军事 企业管理 设计模式 红学 文论 教程 考古 科学哲学 古代汉语 计算机科学 两性 中国现代文学 文艺理论 电子书 清史 中国文化 民俗 交互设计 历史语言学 经管 欧洲 诗歌 经济学 宗教 现代性 午夜文库 现代 文学批评 理论 个人成长 技术分析 政治经济学 语法研究 女性文学 教育 美学 中国古典文学 古希腊 名著 德语文学 前端开发 生物学 人生哲学 语音研究 语文 饮食文化 西方 西方哲学 手工 中世纪 敏捷开发 新媒体 儿童文学 方法 大学教材 学术 经学 俄罗斯文学 数据分析 音系学 软件工程 传播 当代艺术 学习方法 史学理论 文学研究 建筑史 现象学 社会科学 心理治疗 艺术理论 中国近代史 网络 入门 脑科学 战略 日本文学 哲学史 文化史 科普 禅宗 外国文学 女性主义 青春文学 工业设计 民俗学 戏剧 概率论 自我管理 医学 文学史 人力资源 现代文学 国际政治 思维方法 世界历史 书话 中国现当代文学 修身 化学 体育 前端 政治 治愈系 摄影 演讲 计算机 晚清 经济史 法律 中国古典 比较政治 数学史 心理学 育儿 z 广告 通识 课本 汉学 论文集 民主 音韵学 诗词 当代文学 建筑理论 自然科学 语言文字 拉美文学 海外汉学 英国文学 青春小说 社会史 领导力 家庭教育 设计 灵修 分析 中国当代文学 神秘学 思维方式 自我成长 精神分析 香港文学 项目管理 书法 中国哲学 汉语 网络小说 经济 视觉 基督教 神学 明史 励志 新闻传播 22 | 23 | 外语 领导力 欧洲 企业管理 古希腊 心理治疗 中国当代文学 方法 当代艺术 宗教 中国现当代文学 世界历史 青春小说 金融学 职场小说 民俗 法律 诗歌 文学批评 家庭教育 医学 英国文学 育儿 西方 个人管理 技术分析 个人成长 网络 红学 画册 文化史 中国现代文学 人文 明史 修身 绘画 散文 传播 美术史 脑科学 军事 精神分析 中世纪 人生哲学 比较政治 法学 建筑史 音乐 语文 思维方式 入门 连环画 历史语言学 网页设计 建筑理论 儿童教育 建筑 考古 自然科学 经济学 专业 计算机 项目管理 广告 音系学 新闻传播 语法研究 国际政治 人工智能 古代汉语 摄影 现象学 励志 午夜文库 艺术 文化研究 论文集 日本文学 创业 欧美 儿童文学 课本 女性文学 古代文学 文学研究 大学教材 学习 汉学 现代文学 美学 战略 文学史 现代 香港文学 专业书 民主 前端 新媒体 女性主义 交互设计 当代文学 心灵成长 设计模式 日漫 学术 电子书 敏捷开发 青春文学 学术史 学习方法 西方哲学 自我成长 治愈系 趣味 饮食文化 通识 工业设计 数学史 中国哲学 社会科学 政治 名著 语言文字 现代性 文论 视觉 俄国文学 经学 经管 手工 心理学 概率论 史学理论 民俗学 实验语音学 音韵学 晚清 化学 实用 科普 艺术理论 经济 语音研究 两性 中国古典文学 俄罗斯文学 禅宗 计算机科学 人力资源 政治经济学 中国文化 经济史 历史学 科学哲学 外国文学 计算机技术 社会史 基督教 文艺理论 软件工程 分析 清史 设计 灵修 拉美文学 传记 书话 网络小说 戏剧 演讲 体育 中国近代史 生物学 思维方法 前端开发 海外汉学 诗词 教育 进化论 汉语 经济管理 纪实 理论 德语文学 神秘学 自我管理 统计 统计学 书法 文字学 教程 哲学史 神学 中国古典 数据分析 电子版 网络文学 思想 新经济 思想史 道家 漫画绘本 创新 历史 散文随笔 时间管理 玄幻小说 价值投资 文献学 中国研究 古代 反乌托邦 翻译 台湾文学 史学 逻辑 青年漫画 科学人文 艺术设计 案例 古典诗词 拉美 研究 通信 符号学 认知语言学 博弈论 地理 西方历史 旅游 钢琴 用户体验 软件开发 系统 马克思主义 社会学 西哲 日语学习 武术 英语 管理 佛教 教材 语言学习 传播学 语言与社会 写作 建筑设计 科技 中国小说 开发 物理学 中文 思维 原版 专业相关 古籍 成功学 通史 复杂系统 近代史 传媒 财经 中国漫画 海外中国研究 心理咨询 数据处理 语言学 软件测试 认知科学 宋史 法国文学 中国文学 文学评论 市场营销 电影书 信息安全 电影评论 数学 德国文学 文化 动漫 后现代 方法论 外国 文史 网络营销 社会语言学 艺术史 中国史 意识流 古典文学 影评 童年回忆 教育学 启蒙 电影研究 人类学 中国历史 科幻 情色 围棋 文学理论 科幻小说 外国名著 当代 外语学习 新闻学 评论 游戏开发 平面设计 教科书 现当代文学 管理咨询 互联网 商业 经营管理 线性代数 藏书 日本文化 数据挖掘 国学 历史地理 社会心理学 管理学 传统文化 景观 编程语言 社会理论 逻辑学 城市规划 科学史 哲学 近代 计量经济学 古典音乐 设计理论 投资理财 职业规划 中医 语音学 产品设计 文学 考古学 人物传记 分析哲学 工具书 经典 外国小说 研究方法 知识 藏传佛教 美术 纪实文学 英文原著 佛学 天文 性学 营销 技术 官场小说 古罗马 电影理论 古文字 中国 web开发 美食 基础 伦理学 世界史 魏晋南北朝 政治哲学 金融 英语学习 戏曲 政治学 会计 古言 美国文学 机器学习 电子商务 科学 习得 存在主义 24 | 25 | -------------------------------------------------------------------------------- /engine/log/domain.0.8.txt: -------------------------------------------------------------------------------- 1 | 灵修 认知语言学 web开发 西哲 2 | 3 | 灵修 认知语言学 西哲 web开发 心灵成长 4 | 5 | 心灵成长 web开发 西哲 认知语言学 灵修 拉美文学 6 | 7 | 西哲 web开发 认知语言学 心灵成长 拉美文学 灵修 linux 8 | 9 | 拉美文学 web开发 西哲 心灵成长 认知语言学 灵修 linux 基督教 10 | 11 | 灵修 web开发 linux 西哲 心灵成长 拉美文学 认知语言学 基督教 旅游 存在主义 12 | 13 | 基督教 linux 西哲 web开发 拉美文学 旅游 心灵成长 认知语言学 存在主义 灵修 软件 中国 14 | 15 | 灵修 心灵成长 拉美文学 西哲 linux 基督教 中国 web开发 存在主义 软件 认知语言学 旅游 通史 奇幻小说 德语文学 16 | 17 | 认知语言学 灵修 德语文学 奇幻小说 通史 旅游 西哲 web开发 基督教 中国 心灵成长 软件 存在主义 拉美文学 linux 理论 中国漫画 媒体 复杂系统 18 | 19 | linux 存在主义 拉美文学 西哲 灵修 基督教 通史 复杂系统 理论 旅游 中国 认知语言学 软件 心灵成长 中国漫画 德语文学 web开发 奇幻小说 媒体 科技 编程 新经济 工业设计 经营管理 科普 比较政治 20 | 21 | 工业设计 linux 媒体 中国漫画 存在主义 西哲 软件 科技 通史 奇幻小说 中国 心灵成长 编程 复杂系统 比较政治 德语文学 灵修 旅游 经营管理 新经济 拉美文学 基督教 web开发 理论 科普 认知语言学 沟通 西方哲学 音韵学 技术 教育 创新 画册 统计 财务 戏剧 22 | 23 | 编程 基督教 拉美文学 媒体 西哲 旅游 经营管理 认知语言学 新经济 财务 科技 音韵学 技术 中国 奇幻小说 教育 德语文学 比较政治 画册 沟通 统计 linux 存在主义 戏剧 理论 web开发 中国漫画 创新 工业设计 科普 西方哲学 软件 心灵成长 复杂系统 灵修 通史 文献学 藏传佛教 台湾文学 恐怖漫画 美学 性 社会学 社会理论 清史 欧洲 古罗马 动漫 植物 敏捷开发 小说 24 | 25 | 灵修 linux 画册 藏传佛教 美学 科普 财务 基督教 心灵成长 创新 音韵学 媒体 认知语言学 古罗马 中国漫画 奇幻小说 清史 恐怖漫画 复杂系统 植物 工业设计 教育 欧洲 西哲 比较政治 经营管理 旅游 社会理论 敏捷开发 通史 台湾文学 统计 社会学 软件 理论 新经济 小说 技术 沟通 文献学 德语文学 存在主义 性 中国 编程 拉美文学 web开发 科技 西方哲学 动漫 戏剧 古典诗词 言情 数据库 拉美 财经 古代汉语 编程语言 日漫 思想 大学教材 中国文化 商业 职业规划 中医 金融 印度 社会科学 品牌 现象学 科幻小说 思维方法 用户体验 德国文学 26 | 27 | 清史 认知语言学 美学 web开发 中医 古典诗词 经营管理 财务 思想 藏传佛教 新经济 性 工业设计 中国 软件 统计 科技 动漫 心灵成长 社会学 言情 欧洲 比较政治 通史 编程 存在主义 西哲 德语文学 印度 媒体 奇幻小说 戏剧 西方哲学 敏捷开发 灵修 大学教材 品牌 画册 德国文学 中国文化 数据库 文献学 中国漫画 日漫 linux 财经 古代汉语 沟通 复杂系统 思维方法 古罗马 创新 理论 职业规划 拉美文学 基督教 商业 旅游 小说 技术 台湾文学 编程语言 社会理论 教育 科普 恐怖漫画 拉美 用户体验 科幻小说 音韵学 金融 社会科学 植物 现象学 演讲 女性文学 启蒙 天文 考古 符号学 分析 儿童教育 策划 教育学 艺术史 影评 圣经 政治 中国现当代文学 艺术理论 中国古典 专业 性学 网络营销 基础 历史 价值投资 认知 创意 史学理论 近代史 思维方式 网页设计 证券 世界史 音系学 科学 社会心理学 英语 互联网 学术 言情小说 经济 法学 恐怖小说 28 | 29 | 植物 恐怖漫画 德国文学 现象学 中国文化 比较政治 符号学 软件 复杂系统 编程语言 美学 戏剧 创意 奇幻小说 科幻小说 统计 圣经 心灵成长 启蒙 通史 政治 新经济 价值投资 科学 中国现当代文学 互联网 专业 媒体 中国古典 网页设计 商业 linux 言情小说 英语 拉美 经济 社会科学 金融 灵修 中医 法学 分析 社会心理学 教育学 大学教材 web开发 西哲 基础 艺术理论 认知 思维方法 历史 演讲 恐怖小说 日漫 儿童教育 影评 教育 台湾文学 理论 性 藏传佛教 财经 策划 德语文学 旅游 思想 科技 中国 学术 拉美文学 创新 近代史 思维方式 考古 用户体验 印度 史学理论 西方哲学 性学 经营管理 艺术史 工业设计 基督教 沟通 动漫 画册 职业规划 认知语言学 社会理论 言情 编程 文献学 女性文学 中国漫画 证券 世界史 财务 音韵学 古典诗词 网络营销 天文 古代汉语 数据库 品牌 古罗马 敏捷开发 欧洲 小说 技术 音系学 科普 存在主义 社会学 清史 佛学 中华书局 当代 创业 认知科学 中国小说 育儿 藏书 学习 法国文学 艺术 古典文学 大师 通俗 人物传记 宗教 思维 平面设计 古代文学 文化史 电影研究 政治经济学 产品经理 考古学 文学评论 神秘学 现代性 自由主义 养生 领导力 网络小说 微积分 历史语言学 国际政治 政治学 外国小说 计算机科学 信息安全 青年漫画 外语学习 后现代 销售 服装 俄罗斯文学 趣味 金融学 现代汉语 文学批评 中国文学 翻译 经典 实用 手工 论文集 书画 英语学习 香港文学 图鉴 收藏 电影理论 体育 博弈论 中国研究 技术分析 30 | 31 | 启蒙 文化史 分析 新经济 拉美 藏传佛教 认知科学 思维方式 存在主义 收藏 教育学 文献学 微积分 清史 证券 艺术史 古代汉语 画册 中国研究 考古学 后现代 商业 平面设计 小说 戏剧 社会理论 圣经 科幻小说 创意 价值投资 学术 德国文学 艺术 web开发 中国文学 金融 品牌 工业设计 复杂系统 网页设计 编程语言 自由主义 古罗马 人物传记 学习 育儿 西方哲学 基督教 手工 体育 灵修 当代 西哲 趣味 国际政治 恐怖小说 言情 宗教 社会学 古典文学 动漫 神秘学 财务 思维 音系学 佛学 俄罗斯文学 策划 心灵成长 书画 性学 藏书 互联网 法学 考古 中医 经济 大学教材 思想 比较政治 现代性 现象学 统计 中国古典 艺术理论 文学批评 社会心理学 古典诗词 社会科学 领导力 美学 用户体验 基础 编程 大师 日漫 中华书局 创业 销售 英语 科普 理论 计算机科学 史学理论 沟通 恐怖漫画 拉美文学 图鉴 中国现当代文学 技术分析 台湾文学 中国小说 电影研究 金融学 媒体 数据库 中国 敏捷开发 性 服装 奇幻小说 政治经济学 历史 德语文学 历史语言学 近代史 演讲 财经 专业 认知语言学 电影理论 科学 植物 经典 linux 论文集 政治学 通俗 音韵学 翻译 软件 科技 世界史 经营管理 博弈论 旅游 欧洲 中国文化 政治 养生 古代文学 通史 外国小说 印度 儿童教育 天文 法国文学 信息安全 英语学习 文学评论 网络小说 外语学习 香港文学 女性文学 教育 技术 言情小说 符号学 中国漫画 网络营销 现代汉语 影评 产品经理 创新 认知 思维方法 青年漫画 职业规划 实用 日语学习 科学史 经济管理 建筑史 游戏开发 传媒 经管 开发 设计理论 软件工程 明史 青春文学 纪实文学 世界历史 逻辑 女性主义 古籍 求职 推理小说 搜索引擎 文学理论 当代艺术 散文随笔 进化论 语言文字 代数 修身 习得 计量经济学 成功学 德国 管理咨询 通信 史料 汉语 音乐 投资理财 数学 计算机 社会史 古代 禅宗 脑科学 文艺理论 西方历史 入门 现代文学 语言与社会 百科 电影评论 个人管理 钢琴 实验语音学 电子版 新媒体 思想史 反乌托邦 美食 研究 社会语言学 传播学 文学 交互设计 视觉 近代 科幻 民族 广告 汉学 历史地理 中国历史 工具书 杂书 词典 建筑 诗词 软件测试 医学 程序设计 两性 中国当代文学 前端开发 教科书 案例 专业书 文论 语言学 心理治疗 经学 名著 分析哲学 自我管理 软件开发 外国文学 纪实 企业 现当代文学 精神分析 建筑理论 漫画绘本 中国史 自我成长 现代 逻辑学 佛教 32 | 33 | 文学评论 经学 中国历史 自我成长 圣经 西方历史 存在主义 心灵成长 书画 政治学 逻辑学 思维方法 现代文学 软件工程 社会学 游戏开发 信息安全 禅宗 中国小说 语言文字 基督教 创意 商业 古典诗词 美学 媒体 教科书 儿童教育 中国文化 文艺理论 linux 中国史 日语学习 百科 代数 现当代文学 论文集 演讲 经济 语言学 计量经济学 网络小说 体育 考古 汉语 开发 手工 学术 动漫 政治经济学 传播学 比较政治 汉学 创业 历史语言学 认知科学 价值投资 文学理论 技术分析 社会科学 建筑理论 服装 敏捷开发 德国文学 产品经理 翻译 逻辑 纪实 世界史 品牌 软件开发 文论 中医 网页设计 名著 戏剧 工业设计 分析 育儿 现代汉语 认知 企业 青春文学 进化论 新经济 金融 分析哲学 教育学 杂书 微积分 影评 现象学 台湾文学 创新 性 音韵学 科学 世界历史 历史 中国文学 中国漫画 基础 设计理论 文学批评 音系学 香港文学 古代汉语 专业书 符号学 软件 宗教 新媒体 拉美文学 欧洲 习得 古罗马 艺术 外国文学 理论 职业规划 社会心理学 近代史 人物传记 言情小说 思想 建筑 中国 趣味 web开发 科技 西哲 中国现当代文学 程序设计 科幻 互联网 俄罗斯文学 建筑史 神秘学 天文 销售 电影理论 财经 文化史 实验语音学 法学 入门 言情 古典文学 策划 女性文学 史学理论 当代艺术 德语文学 恐怖小说 自我管理 旅游 佛教 社会史 成功学 印度 艺术理论 管理咨询 搜索引擎 外语学习 文学 前端开发 思维 音乐 现代 实用 复杂系统 历史地理 统计 社会理论 思维方式 用户体验 民族 近代 编程语言 财务 现代性 平面设计 科学史 通史 科幻小说 经济管理 编程 英语 法国文学 灵修 心理治疗 藏传佛教 精神分析 通俗 教育 外国小说 德国 电子版 脑科学 专业 日漫 自由主义 修身 图鉴 养生 经管 网络营销 医学 美食 中华书局 文献学 电影评论 国际政治 交互设计 青年漫画 植物 电影研究 当代 古代 博弈论 大学教材 研究 数学 诗词 计算机科学 明史 反乌托邦 社会语言学 证券 政治 钢琴 科普 工具书 视觉 两性 藏书 史料 技术 中国研究 语言与社会 经营管理 大师 认知语言学 通信 收藏 古籍 小说 佛学 西方哲学 广告 启蒙 领导力 考古学 中国古典 散文随笔 经典 漫画绘本 思想史 数据库 女性主义 英语学习 艺术史 古代文学 软件测试 计算机 求职 个人管理 学习 投资理财 拉美 奇幻小说 中国当代文学 纪实文学 画册 词典 推理小说 恐怖漫画 性学 沟通 后现代 传媒 金融学 清史 案例 通识 人生哲学 民俗学 日本文学 俄国文学 宋史 历史小说 企业管理 手绘 中国现代文学 围棋 法律 设计模式 绘画 时间管理 俄罗斯 语文 工具 治愈系 军事 地理 概率论 英文原著 欧美 原版 产品设计 美术史 游记 写作 理财 戏曲 数据处理 古言 人力资源 儿童 日本文化 前端 文化研究 机器学习 知识 青春小说 图画书 童年回忆 连环画 民俗 个人成长 西方 红学 伦理学 励志 营销 自然科学 语言学习 玄幻小说 武术 语法 古典音乐 周易 房地产 操作系统 大数据 课本 人文 Web开发 方法论 心理咨询 网络文学 科学人文 神话 文学研究 英国文学 知识分子 生物学 数学史 美术 中文 市场营销 数据分析 设计 新闻传播 研究方法 中世纪 悬疑小说 法语 专业相关 情色 海外汉学 史学 经济史 电子商务 中国哲学 职业 教程 绘本 民主 咨询 散文 心理学 文史 电影 中国古典文学 人工智能 建筑设计 新闻学 传记 艺术设计 魏晋南北朝 美国文学 语音学 决策 人类学 写真 饮食文化 食谱 系统 物理 外语 午夜文库 哲学史 评论 道家 学习方法 政治哲学 书法 中国近代史 计算机技术 当代文学 科学哲学 传统文化 神学 书话 景观 管理学 文字学 学术史 意识流 摄影 经济学 产品 数据挖掘 电影书 儿童文学 教材 诗歌 城市规划 会计 外国名著 化学 古文字 时尚 物理学 国学 文化 语法研究 随笔 新闻 文学史 官场小说 饮食 海外中国研究 马克思主义 线性代数 网络 电子书 职场小说 外国 传播 项目管理 方法 战略 管理 家庭教育 统计学 语音研究 晚清 哲学 古希腊 英文 历史学 34 | 35 | -------------------------------------------------------------------------------- /engine/log/domain.0.9.txt: -------------------------------------------------------------------------------- 1 | 29 政治 欧洲 技术 国学 心理治疗 人物传记 文献学 书话 2 | 3 | 28 政治 欧洲 书话 技术 国学 文献学 心理治疗 人物传记 商业 4 | 5 | 27 心理治疗 欧洲 国学 文献学 人物传记 商业 政治 书话 技术 心理学 6 | 7 | 26 国学 欧洲 书话 政治 技术 商业 文献学 心理学 心理治疗 人物传记 拉美 8 | 9 | 25 心理学 拉美 国学 商业 文献学 人物传记 技术 心理治疗 书话 政治 欧洲 数据处理 10 | 11 | 24 心理治疗 书话 心理学 拉美 技术 人物传记 商业 欧洲 文献学 政治 国学 数据处理 西哲 12 | 13 | 23 欧洲 心理治疗 数据处理 技术 西哲 商业 拉美 书话 政治 国学 文献学 人物传记 心理学 财经 14 | 15 | 22 西哲 技术 商业 政治 数据处理 人物传记 欧洲 书话 心理学 文献学 国学 心理治疗 财经 拉美 藏传佛教 16 | 17 | 21 文献学 心理学 数据处理 技术 人物传记 欧洲 藏传佛教 商业 书话 政治 财经 国学 西哲 拉美 心理治疗 编程 古典音乐 18 | 19 | 20 拉美 技术 商业 书话 政治 数据处理 心理治疗 欧洲 心理学 藏传佛教 国学 财经 编程 古典音乐 文献学 人物传记 西哲 中国现代文学 数学分析 20 | 21 | 19 书话 数学分析 西哲 编程 藏传佛教 数据处理 人物传记 国学 政治 中国现代文学 财经 心理学 心理治疗 古典音乐 商业 文献学 拉美 欧洲 技术 架构 日本 22 | 23 | 18 文献学 技术 编程 商业 架构 心理学 古典音乐 藏传佛教 国学 数据处理 数学分析 欧洲 西哲 心理治疗 财经 政治 书话 拉美 日本 中国现代文学 人物传记 机器学习 法学 游戏开发 24 | 25 | 17 心理学 技术 财经 拉美 商业 欧洲 编程 文献学 数据处理 西哲 法学 心理治疗 架构 古典音乐 国学 游戏开发 政治 藏传佛教 中国现代文学 数学分析 书话 人物传记 机器学习 日本 绘画 饮食文化 诗词 26 | 27 | 16 藏传佛教 饮食文化 商业 国学 游戏开发 架构 古典音乐 日本 西哲 绘画 编程 书话 文献学 中国现代文学 财经 心理治疗 数据处理 人物传记 拉美 法学 欧洲 政治 心理学 机器学习 诗词 数学分析 技术 文论 语音研究 苏联 28 | 29 | 15 财经 游戏开发 饮食文化 中国现代文学 心理学 语音研究 商业 架构 藏传佛教 数据处理 绘画 日本 人物传记 技术 书话 心理治疗 古典音乐 欧洲 拉美 政治 数学分析 诗词 编程 法学 西哲 文献学 机器学习 文论 国学 苏联 基础 组织 学术 销售 30 | 31 | 14 基础 饮食文化 心理学 组织 藏传佛教 数据处理 人物传记 书话 西哲 心理治疗 技术 财经 绘画 日本 语音研究 拉美 学术 古典音乐 机器学习 文献学 文论 商业 国学 政治 苏联 法学 编程 中国现代文学 架构 数学分析 欧洲 游戏开发 诗词 销售 笔记 嵌入式 投资理财 测试 性 32 | 33 | 13 游戏开发 书话 组织 心理学 基础 西哲 饮食文化 欧洲 笔记 日本 销售 性 诗词 财经 藏传佛教 苏联 学术 古典音乐 绘画 测试 编程 数学分析 文论 数据处理 法学 文献学 技术 嵌入式 机器学习 架构 政治 语音研究 投资理财 国学 商业 中国现代文学 人物传记 拉美 心理治疗 家庭教育 外国文学 新闻传播 外国小说 地图 启蒙 宋史 34 | 35 | 12 数学分析 心理治疗 学术 财经 技术 日本 藏传佛教 外国小说 人物传记 外国文学 组织 商业 启蒙 法学 心理学 文献学 基础 地图 笔记 新闻传播 语音研究 西哲 架构 销售 家庭教育 绘画 嵌入式 游戏开发 机器学习 投资理财 苏联 诗词 测试 性 政治 书话 欧洲 饮食文化 古典音乐 中国现代文学 宋史 国学 编程 拉美 数据处理 文论 文学 安全 历史地理 成功学 化学 欧美 文字学 玄幻 36 | 37 | 11 化学 启蒙 语音研究 文学 家庭教育 地图 文献学 测试 宋史 日本 中国现代文学 商业 数学分析 财经 架构 学术 安全 古典音乐 欧洲 投资理财 外国文学 性 编程 机器学习 文字学 成功学 心理学 新闻传播 国学 嵌入式 法学 诗词 游戏开发 外国小说 心理治疗 笔记 基础 销售 数据处理 苏联 西哲 绘画 历史地理 文论 技术 欧美 玄幻 拉美 书话 藏传佛教 组织 政治 人物传记 饮食文化 现代汉语 领导力 自我完善 论文 中国近代史 清史 日本文化 通史 经济史 电影书 38 | 39 | 10 现代汉语 自我完善 架构 基础 机器学习 论文 拉美 启蒙 成功学 新闻传播 日本 法学 化学 通史 领导力 语音研究 藏传佛教 欧洲 学术 宋史 性 组织 文学 外国小说 家庭教育 欧美 销售 投资理财 心理治疗 编程 安全 文献学 商业 政治 笔记 经济史 嵌入式 文字学 数据处理 技术 历史地理 文论 西哲 心理学 测试 中国近代史 书话 中国现代文学 绘画 国学 数学分析 外国文学 古典音乐 财经 日本文化 诗词 电影书 饮食文化 苏联 玄幻 地图 人物传记 清史 游戏开发 思维方式 产品设计 小说 评论 学习方法 媒体 经典 个人管理 儿童 心理咨询 神话 科技 40 | 41 | 9 家庭教育 评论 日本文化 西哲 绘画 文学 机器学习 编程 媒体 个人管理 性 法学 政治 欧洲 数据处理 产品设计 销售 苏联 中国近代史 学习方法 架构 现代汉语 心理治疗 商业 化学 神话 笔记 技术 投资理财 地图 成功学 文献学 财经 外国文学 经济史 历史地理 文字学 基础 通史 日本 领导力 学术 清史 国学 新闻传播 心理学 电影书 科技 欧美 藏传佛教 人物传记 饮食文化 中国现代文学 诗词 心理咨询 语音研究 论文 启蒙 安全 文论 外国小说 数学分析 古典音乐 宋史 书话 游戏开发 自我完善 玄幻 小说 组织 嵌入式 经典 测试 思维方式 儿童 拉美 演讲 美食 古典诗词 战略 程序设计 古希腊 方法论 政治经济学 文化研究 传媒 摇滚 推理 佛教 期货 历史学 反乌托邦 42 | 43 | 8 经济史 化学 经典 演讲 心理学 拉美 外国小说 学习方法 法学 数学分析 欧美 历史学 文学 组织 程序设计 现代汉语 心理咨询 中国现代文学 文字学 测试 性 评论 苏联 语音研究 古典诗词 技术 通史 思维方式 推理 古希腊 战略 架构 文论 文献学 书话 商业 文化研究 佛教 电影书 投资理财 期货 神话 安全 宋史 方法论 绘画 科技 论文 笔记 国学 反乌托邦 启蒙 清史 日本 饮食文化 传媒 摇滚 玄幻 财经 欧洲 心理治疗 媒体 基础 游戏开发 编程 西哲 学术 机器学习 家庭教育 政治 自我完善 销售 新闻传播 成功学 数据处理 政治经济学 儿童 个人管理 美食 地图 日本文化 外国文学 历史地理 领导力 嵌入式 藏传佛教 中国近代史 人物传记 产品设计 古典音乐 小说 诗词 古文字 藏书 工业设计 建筑史 西方 青春文学 中国文化 自我管理 英语学习 钢琴 禅 明史 外语 教育 数据库 言情 侦探小说 纪实 案例 电影 闲书 44 | 45 | 7 评论 苏联 中国现代文学 文字学 科技 中国近代史 中国文化 媒体 现代汉语 销售 人物传记 经典 清史 玄幻 推理 欧洲 英语学习 西方 日本文化 国学 儿童 历史学 书话 战略 程序设计 古典诗词 安全 家庭教育 数据库 性 文献学 基础 神话 禅 小说 电影书 青春文学 投资理财 古文字 日本 技术 商业 电影 心理治疗 明史 政治 游戏开发 教育 文学 钢琴 佛教 化学 外国小说 古典音乐 政治经济学 法学 纪实 语音研究 闲书 笔记 诗词 测试 组织 文论 饮食文化 新闻传播 侦探小说 思维方式 外语 藏传佛教 古希腊 个人管理 摇滚 宋史 财经 自我管理 启蒙 拉美 心理咨询 反乌托邦 历史地理 方法论 产品设计 期货 藏书 领导力 案例 言情 学术 架构 文化研究 编程 欧美 数据处理 西哲 成功学 嵌入式 美食 自我完善 通史 数学分析 工业设计 外国文学 机器学习 心理学 建筑史 经济史 学习方法 绘画 演讲 地图 传媒 论文 女性文学 产品经理 古代汉语 研究 中国文学 设计理论 新媒体 文集 画册 影评 励志 养生 前端 文艺理论 武术 技术分析 音乐 建筑 童书 史料 红楼梦 教材 晚清 童年回忆 广告 古言 沟通 两性 杂书 46 | 47 | 6 养生 投资理财 外国小说 教育 自我管理 饮食文化 拉美 日本文化 学习方法 杂书 建筑史 欧洲 架构 机器学习 纪实 佛教 技术 文化研究 小说 成功学 文集 法学 政治 西方 宋史 文艺理论 新媒体 论文 日本 书话 晚清 演讲 文论 地图 数据库 摇滚 史料 苏联 闲书 欧美 推理 历史地理 古言 前端 化学 英语学习 青春文学 建筑 外语 案例 清史 明史 电影 禅 语音研究 工业设计 童年回忆 绘画 美食 广告 藏传佛教 技术分析 沟通 通史 嵌入式 文献学 画册 女性文学 励志 现代汉语 诗词 经典 财经 童书 媒体 影评 古希腊 性 中国文学 数学分析 启蒙 电影书 古典诗词 商业 程序设计 期货 测试 研究 古代汉语 外国文学 藏书 心理治疗 玄幻 组织 游戏开发 销售 古文字 家庭教育 神话 笔记 心理学 中国近代史 历史学 产品经理 传媒 思维方式 国学 数据处理 科技 学术 钢琴 安全 经济史 儿童 评论 文学 中国文化 设计理论 战略 产品设计 中国现代文学 反乌托邦 编程 音乐 个人管理 红楼梦 教材 新闻传播 政治经济学 侦探小说 言情 自我完善 基础 西哲 领导力 方法论 武术 两性 人物传记 文字学 心理咨询 古典音乐 敏捷开发 语文 文史 散文随笔 古代 戏剧 大陆 民俗 创新 道家 台湾文学 红学 产品 现象学 国际政治 职场小说 设计模式 社会理论 治愈系 禅宗 开发 英文 古罗马 马克思主义 管理 算法 实用 知识分子 杂文 思想史 数学 写真 女性主义 中国研究 语法研究 书画 人际关系 知识 西方哲学 48 | 49 | 5 中国现代文学 投资理财 演讲 测试 语文 家庭教育 杂书 藏书 建筑 诗词 现代汉语 藏传佛教 养生 神话 领导力 钢琴 两性 童年回忆 新媒体 女性主义 产品 设计理论 游戏开发 侦探小说 笔记 古典诗词 管理 数据库 论文 外语 基础 文化研究 媒体 安全 前端 性 禅 书话 文学 外国文学 台湾文学 散文随笔 人物传记 地图 英语学习 中国研究 技术 商业 知识 教材 小说 评论 销售 思想史 知识分子 数学 产品设计 佛教 工业设计 启蒙 饮食文化 闲书 中国文学 文论 民俗 成功学 美食 红楼梦 言情 古代 现象学 技术分析 历史学 国学 敏捷开发 电影 欧美 学术 心理咨询 明史 经典 大陆 画册 自我完善 数学分析 新闻传播 儿童 算法 西方哲学 自我管理 文献学 设计模式 古言 青春文学 文字学 传媒 武术 文史 编程 拉美 古希腊 中国文化 书画 政治 日本 社会理论 实用 研究 文艺理论 沟通 学习方法 期货 机器学习 程序设计 心理学 产品经理 中国近代史 古典音乐 心理治疗 清史 开发 马克思主义 西方 写真 建筑史 摇滚 案例 语法研究 音乐 宋史 玄幻 方法论 政治经济学 职场小说 影评 西哲 古罗马 外国小说 法学 经济史 电影书 数据处理 推理 红学 创新 反乌托邦 化学 欧洲 语音研究 晚清 人际关系 苏联 通史 古代汉语 广告 史料 道家 文集 日本文化 财经 思维方式 戏剧 禅宗 架构 治愈系 女性文学 杂文 古文字 国际政治 英文 组织 纪实 童书 历史地理 科技 教育 个人管理 励志 绘画 嵌入式 战略 个人成长 当代 艺术史 德国文学 德国 存在主义 天文 平面设计 手工 创意 旅游 耽美漫画 艺术理论 学术史 认知语言学 中国小说 NLP 儿童文学 脑科学 工具书 项目管理 图书馆 经学 军事 史学理论 智慧 文学研究 入门 经济管理 城市 财务 计量经济学 民主 医学 青年漫画 web开发 金融学 人类学 手绘 代数 逻辑 台版 求职 魔幻 搜索引擎 理论 名著 市场营销 植物 汉语 分析 关于书的书 50 | 51 | 4 心理咨询 诗词 儿童文学 文学 儿童 技术分析 投资理财 饮食文化 前端 红楼梦 手绘 古罗马 散文随笔 日本文化 媒体 评论 女性主义 文学研究 知识 产品 现象学 大陆 外语 台湾文学 手工 政治 设计理论 政治经济学 古文字 美食 国际政治 女性文学 演讲 现代汉语 创意 分析 项目管理 数学分析 明史 方法论 求职 台版 数学 养生 西方 金融学 德国文学 算法 佛教 武术 医学 研究 计量经济学 反乌托邦 经济管理 存在主义 古典音乐 家庭教育 沟通 历史地理 广告 电影 童年回忆 关于书的书 学术史 图书馆 创新 社会理论 外国文学 绘画 治愈系 财经 古希腊 小说 经学 文字学 艺术史 心理学 艺术理论 启蒙 城市 机器学习 代数 财务 敏捷开发 古典诗词 文集 旅游 数据处理 编程 民主 宋史 搜索引擎 认知语言学 国学 钢琴 文化研究 青春文学 建筑 论文 拉美 励志 电影书 汉语 西方哲学 植物 自我管理 产品经理 安全 民俗 领导力 红学 清史 法学 音乐 基础 纪实 通史 笔记 语法研究 中国研究 技术 人际关系 工具书 摇滚 设计模式 组织 数据库 玄幻 逻辑 杂文 成功学 学习方法 古言 中国文学 道家 职场小说 经典 文献学 文史 销售 建筑史 闲书 学术 心理治疗 个人成长 英语学习 青年漫画 禅宗 苏联 魔幻 开发 当代 嵌入式 人物传记 期货 日本 藏传佛教 西哲 历史学 画册 英文 理论 古代汉语 程序设计 战略 马克思主义 军事 中国现代文学 教育 智慧 思想史 人类学 影评 戏剧 中国文化 产品设计 市场营销 架构 性 禅 童书 天文 实用 经济史 侦探小说 传媒 欧洲 自我完善 化学 德国 游戏开发 推理 古代 web开发 入门 管理 史学理论 测试 史料 平面设计 语文 耽美漫画 中国近代史 晚清 文艺理论 科技 写真 新闻传播 欧美 外国小说 NLP 案例 工业设计 书话 个人管理 名著 杂书 商业 语音研究 教材 地图 思维方式 文论 中国小说 言情 神话 新媒体 两性 知识分子 藏书 脑科学 书画 电子书 概率论 中国历史 文学理论 宗教 传播学 历史小说 思考 计算机技术 纪实文学 图画书 线性代数 魏晋南北朝 艺术设计 英国 日版漫画 社会心理学 传记 管理咨询 后现代 现代文学 中国古典文学 专业相关 社会史 法国 进化论 考古 科学史 言情小说 决策 电子版 海外中国研究 恐怖漫画 百科 金融 认知科学 法律 时尚 投资 教育学 当代艺术 三联书店 英语 研究方法 现当代文学 革命 微积分 中国哲学 官场小说 房地产 文学批评 专业 城市规划 民族 课本 性学 企业 中医 用户体验 神学 修身 系统 网络营销 香港文学 建筑理论 52 | 53 | 3 广告 电子书 传记 国学 外国文学 编程 三联书店 女性主义 思想史 敏捷开发 台版 传媒 科学史 革命 言情 英语 海外中国研究 大陆 神话 传播学 史学理论 架构 中国近代史 思考 苏联 嵌入式 儿童 日本 汉语 化学 企业 论文 中国历史 机器学习 工具书 绘画 战略 领导力 金融学 认知语言学 建筑理论 法学 管理 家庭教育 经典 植物 语音研究 金融 红楼梦 政治经济学 房地产 书画 web开发 法国 历史地理 英国 概率论 古代 图书馆 沟通 商业 学术史 文艺理论 文化研究 产品 电子版 藏传佛教 外国小说 经济史 励志 艺术设计 名著 城市规划 思维方式 散文随笔 文学批评 城市 搜索引擎 存在主义 养生 投资理财 中国哲学 纪实 课本 钢琴 书话 当代艺术 经学 台湾文学 产品经理 设计理论 游戏开发 古典诗词 文史 政治 古代汉语 成功学 开发 NLP 文学理论 认知科学 官场小说 考古 测试 民族 民主 数学分析 关于书的书 艺术理论 女性文学 系统 脑科学 性 入门 历史小说 古希腊 马克思主义 儿童文学 杂文 线性代数 性学 心理学 禅宗 中国古典文学 数学 语文 计算机技术 医学 现代文学 拉美 启蒙 投资 社会理论 用户体验 技术 方法论 军事 社会史 项目管理 安全 计量经济学 民俗 心理咨询 组织 专业 经济管理 历史学 专业相关 评论 英文 纪实文学 人类学 古文字 演讲 西哲 通史 人物传记 治愈系 日版漫画 音乐 学术 微积分 职场小说 建筑史 中国研究 决策 戏剧 财务 文字学 知识分子 地图 美食 香港文学 教育 现代汉语 明史 基础 外语 自我管理 童书 英语学习 百科 德国 摇滚 古言 知识 画册 自我完善 销售 设计模式 手工 法律 笔记 修身 宋史 市场营销 道家 旅游 武术 研究 神学 中国文学 数据库 文献学 侦探小说 童年回忆 程序设计 新媒体 两性 新闻传播 逻辑 期货 言情小说 案例 欧洲 技术分析 天文 求职 教材 推理 日本文化 管理咨询 心理治疗 数据处理 人际关系 诗词 中国现代文学 影评 欧美 网络营销 青年漫画 晚清 平面设计 智慧 现当代文学 西方哲学 代数 闲书 当代 个人管理 中国小说 饮食文化 反乌托邦 藏书 研究方法 史料 古典音乐 创意 个人成长 小说 理论 电影书 图画书 写真 电影 恐怖漫画 中国文化 禅 青春文学 财经 时尚 社会心理学 实用 西方 现象学 学习方法 宗教 清史 文学 红学 前端 文学研究 国际政治 中医 耽美漫画 产品设计 建筑 玄幻 媒体 魏晋南北朝 进化论 后现代 算法 佛教 教育学 创新 工业设计 古罗马 手绘 语法研究 科技 文集 魔幻 分析 杂书 艺术史 文论 德国文学 科幻 中世纪 推理小说 人生哲学 德语文学 计算机科学 食谱 linux 当代文学 民俗学 逻辑学 俄罗斯文学 漫画 文学史 趣味 词汇 咨询 电影研究 午夜文库 佛学 会计 软件开发 视觉 自然科学 通俗 上海 中国古典 证券 方法 人文 瑞典 大学教材 科幻小说 日语学习 语法 心灵成长 读书 汉学 交易 科学人文 实验语音学 儿童教育 计算机 政治学 历史 散文 哲学 文化 信息安全 访谈 情感 分析哲学 统计学 摄影 教程 数据挖掘 历史语言学 古代文学 神秘学 网页设计 科普 语言学习 地理 专业书 认知 社会学 大师 考研 圣经 Web开发 创业 策划 基督教 营销 美国文学 情色 中国漫画 思维方法 语言 美容 海外汉学 博弈论 小人书 互联网 网络文学 经济 新闻学 俄罗斯 阅读 近代 思想 物理 投机 育儿 黑色幽默 美术史 语音 世界史 架空历史 科学哲学 概率 信仰 哲学史 社会科学 音系学 哲理 意大利 德语 54 | 55 | 2 知识 经济史 心理咨询 西哲 考研 哲学 古希腊 专业书 证券 读书 德语 中国漫画 产品设计 武术 新闻学 创新 历史学 传记 青春文学 情色 社会学 女性主义 古罗马 女性文学 方法论 管理咨询 晚清 数据库 学术史 官场小说 交易 黑色幽默 大学教材 化学 玄幻 经典 自我完善 语文 产品经理 创意 修身 哲理 汉学 思想史 美术史 金融学 敏捷开发 圣经 语法 营销 俄罗斯 个人成长 植物 杂书 房地产 媒体 言情 书话 文学理论 教育 外国小说 国际政治 求职 治愈系 言情小说 研究 考古 国学 工业设计 中国历史 大师 佛教 上海 线性代数 建筑理论 语言 中国小说 沟通 统计学 食谱 前端 技术 科幻小说 设计理论 访谈 写真 社会科学 现代文学 画册 组织 民族 时尚 育儿 杂文 计算机技术 地理 项目管理 财经 古代文学 财务 NLP 设计模式 论文 经济 台版 现象学 摄影 近代 数学分析 通史 经济管理 文史 诗词 法律 认知语言学 美国文学 政治学 古典诗词 法学 知识分子 西方哲学 恐怖漫画 语法研究 工具书 文学 新媒体 专业 脑科学 管理 进化论 民俗 数据处理 基础 古文字 中国哲学 纪实 逻辑学 投资理财 古代汉语 测试 藏传佛教 嵌入式 历史小说 网络营销 古言 文学史 科幻 科普 专业相关 漫画 历史地理 社会心理学 汉语 用户体验 明史 咨询 纪实文学 世界史 新闻传播 日本 手绘 德国文学 宋史 城市规划 现当代文学 电影 计算机科学 三联书店 系统 实验语音学 认知 中国古典文学 认知科学 建筑史 科学史 架构 技术分析 学习方法 社会理论 文化研究 语音 台湾文学 代数 会计 散文随笔 史学理论 历史语言学 语言学习 情感 推理小说 信仰 中国文化 中世纪 视觉 理论 方法 网页设计 计算机 史料 艺术理论 法国 概率论 中国现代文学 商业 数据挖掘 现代汉语 俄罗斯文学 书画 创业 通俗 意大利 中国研究 编程 人类学 文学批评 销售 旅游 艺术设计 评论 科技 哲学史 日语学习 美容 海外中国研究 外国文学 名著 linux 小说 午夜文库 日本文化 策划 英国 政治经济学 禅宗 德语文学 马克思主义 绘画 微积分 禅 博弈论 软件开发 开发 计量经济学 日版漫画 期货 概率 经学 信息安全 童年回忆 图画书 摇滚 侦探小说 文论 耽美漫画 佛学 投资 家庭教育 心理治疗 图书馆 儿童文学 励志 饮食文化 政治 红学 外语 民俗学 传播学 古典音乐 机器学习 养生 两性 英文 当代 道家 程序设计 实用 网络文学 建筑 语音研究 架空历史 搜索引擎 电影书 小人书 神秘学 游戏开发 藏书 民主 天文 英语学习 科学哲学 成功学 瑞典 阅读 电子版 电子书 教育学 课本 儿童 安全 思想 文字学 戏剧 领导力 Web开发 研究方法 市场营销 思维方法 科学人文 拉美 人文 投机 德国 笔记 童书 英语 儿童教育 心理学 当代艺术 平面设计 音系学 手工 西方 分析哲学 性 钢琴 文集 学术 人际关系 心灵成长 关于书的书 医学 影评 金融 大陆 宗教 散文 神话 电影研究 文化 词汇 自然科学 web开发 启蒙 革命 美食 音乐 战略 中国文学 文学研究 物理 历史 产品 社会史 算法 地图 互联网 城市 演讲 青年漫画 分析 百科 基督教 欧洲 反乌托邦 文献学 中国古典 教程 人生哲学 趣味 自我管理 入门 中国近代史 神学 海外汉学 中医 个人管理 职场小说 决策 案例 欧美 苏联 广告 逻辑 红楼梦 思维方式 人物传记 魔幻 香港文学 智慧 军事 闲书 传媒 教材 数学 当代文学 推理 古代 存在主义 思考 艺术史 后现代 企业 魏晋南北朝 文艺理论 性学 清史 动漫 数学史 资料 诗歌 中文 全球化 法语 景观 短篇小说 自由主义 心理 女性 书 书法 语言与社会 人工智能 新经济 网络 游记 中国现当代文学 生物学 英文原著 电子 习得 通识 西方历史 程序员 社交 经管 工具 文艺 电影理论 交互设计 史学 现代性 外语学习 美术 处世 玄幻小说 编程语言 精神分析 复杂系统 随笔 戏曲 古典文学 仙侠 书信 英国文学 韩国 绘本 印度 BL漫画 设计 拉美文学 网络小说 俄国 符号学 世界历史 语言文字 翻译 经营管理 考古学 建筑设计 法国文学 比较政治 奇幻小说 杂志 色彩 音韵学 词典 图鉴 日语 写作 软件 数据分析 文学评论 原版 社会语言学 自我成长 恐怖小说 人力资源 企业管理 伦理学 收藏 日漫 传播 现代 连环画 通信 大数据 政治哲学 软件测试 电影评论 时间管理 艺术 体育 操作系统 灵修 饮食 数据结构 统计 语音学 理财 外国 近代史 软件工程 中国当代文学 科学 青春小说 管理学 文字 行走 围棋 工作 电子商务 俄国文学 传统文化 自然 少女漫画 漫画绘本 少年漫画 教科书 外国名著 物理学 运动 古籍 中国 服装 思维 新闻 价值投资 经济学 意识流 悬疑小说 前端开发 论文集 周易 日本文学 中华书局 美学 职业规划 文化史 学习 语言学 职业 中国史 汉译世界学术名著丛书 品牌 56 | 57 | 1 现象学 史学理论 建筑理论 艺术理论 个人管理 海外汉学 科学人文 儿童教育 经管 语言与社会 大学教材 文论 神秘学 民俗学 设计理论 实验语音学 电影研究 脑科学 建筑史 饮食文化 德语文学 新闻传播 比较政治 历史语言学 电影理论 国际政治 文学理论 认知科学 传播学 国学 工业设计 数学史 个人成长 俄国文学 中国古典文学 古代文学 中国现当代文学 俄罗斯文学 文艺理论 法学 社会史 符号学 思维方法 历史地理 科学史 汉学 社会理论 散文随笔 文献学 美国文学 新闻学 文学批评 艺术设计 研究 中国研究 领导力 家庭教育 中国哲学 语言文字 中国当代文学 考古学 西方哲学 经营管理 经学 语音研究 研究方法 美学 古典文学 女性文学 心灵成长 文字学 科学哲学 天文 经济史 文化史 外语学习 学术史 拉美文学 语言学习 台湾文学 专业书 电影评论 现代 城市规划 复杂系统 现当代文学 中世纪 艺术 藏传佛教 性学 认知语言学 新媒体 红学 中国现代文学 投资理财 科学 人类学 美术史 西方历史 专业相关 政治经济学 逻辑学 分析哲学 电影书 古文字 艺术史 青年漫画 音系学 古典诗词 建筑设计 语言学 中国近代史 哲学 史学 学术 书话 拉美 产品设计 文学 语音学 管理学 平面设计 机器学习 语法研究 方法论 女性主义 翻译 思想史 企业管理 中国史 戏曲 教育 政治哲学 心理学 中国古典 理论 法国文学 软件测试 哲学史 当代文学 传统文化 计算机技术 人工智能 市场营销 统计学 名著 西方 中国文学 经典 自我管理 博弈论 自我成长 英国文学 电子书 人生哲学 网络营销 马克思主义 当代艺术 社会语言学 日漫 连环画 伦理学 世界历史 交互设计 职业规划 地理 魏晋南北朝 通史 戏剧 文化研究 当代 西哲 日语学习 英文原著 项目管理 经济学 医学 佛学 中国 中国文化 建筑 计量经济学 玄幻小说 后现代 清史 政治学 古典音乐 社会心理学 德国文学 神学 音韵学 海外中国研究 现代文学 香港文学 外语 纪实文学 文学史 语文 职场小说 论文集 灵修 信息安全 教育学 文学研究 宋史 漫画绘本 化学 世界史 敏捷开发 教科书 诗歌 文化 音乐 中国漫画 中医 书法 科普 数据处理 科幻小说 传播 学习方法 文史 自然科学 古籍 成功学 前端 创新 古代汉语 文学评论 宗教 外国名著 欧洲 价值投资 金融学 禅宗 青春文学 经济管理 童年回忆 生物学 历史 思想 青春小说 技术 佛教 官场小说 近代史 电子商务 商业 心理治疗 民俗 社会科学 原版 道家 反乌托邦 科技 前端开发 人力资源 设计 动漫 人物传记 课本 武术 网页设计 欧美 法律 影评 工具书 进化论 知识 管理 软件工程 数据分析 古言 中国历史 启蒙 社会学 近代 外国文学 古代 美术 专业 明史 数学 游戏开发 会计 通识 物理学 治愈系 汉语 精神分析 晚清 散文 绘画 存在主义 中国小说 入门 写作 藏书 计算机科学 概率论 修身 思维方式 现代性 营销 科幻 景观 新经济 画册 逻辑 计算机 金融 基督教 设计模式 网络文学 摄影 英语学习 军事 诗词 数据挖掘 日本文学 历史学 编程语言 广告 方法 心理咨询 人文 传媒 传记 评论 用户体验 视觉 儿童文学 习得 基础 软件开发 手工 政治 励志 情色 外国 web开发 围棋 互联网 外国小说 午夜文库 学习 网络小说 思维 演讲 考古 古希腊 管理咨询 时间管理 技术分析 案例 民主 实用 趣味 开发 创业 旅游 教材 中文 系统 意识流 通信 经济 钢琴 纪实 战略 线性代数 英语 财经 古罗马 美食 育儿 网络 日本文化 体育 电子版 教程 两性 分析 统计 物理 品牌 创意 书画 儿童 代数 周易 财务 游记 自由主义 神话 奇幻小说 恐怖小说 现代汉语 英文 饮食 恐怖漫画 知识分子 食谱 言情 程序设计 企业 法语 大数据 随笔 悬疑小说 咨询 产品 认知 策划 软件 德国 俄罗斯 通俗 产品经理 圣经 职业 史料 百科 大师 性 印度 销售 手绘 杂书 房地产 求职 言情小说 推理小说 理财 工具 词典 操作系统 Web开发 语法 小说 搜索引擎 沟通 中华书局 服装 微积分 电影 历史小说 图画书 时尚 新闻 决策 媒体 linux 绘本 养生 收藏 植物 民族 编程 图鉴 写真 数据库 证券 魔幻 玄幻 全球化 美容 智慧 日版漫画 电子 语言 童书 信仰 组织 处世 汉译世界学术名著丛书 投资 运动 人际关系 文艺 日语 架构 日本 数学分析 仙侠 工作 女性 自然 程序员 俄国 侦探小说 数据结构 论文 语音 测试 期货 算法 禅 访谈 考研 韩国 小人书 哲理 架空历史 杂文 情感 三联书店 词汇 NLP 心理 文集 漫画 关于书的书 红楼梦 闲书 德语 城市 读书 大陆 短篇小说 文字 思考 社交 黑色幽默 书 资料 阅读 法国 革命 耽美漫画 上海 台版 BL漫画 地图 笔记 推理 少年漫画 行走 少女漫画 杂志 交易 自我完善 书信 摇滚 安全 图书馆 意大利 英国 嵌入式 概率 苏联 色彩 投机 瑞典 香港 修行 悬疑 官场 校园 少女向 惊悚 生物 奥地利 社科 探险 史诗 武侠 健康 猎奇 罗马 日本漫画 三国 奇幻 出版 黑客 自传 幻想 西班牙 幽默 日本小说 人物 二战 心灵 剧本 耽美小说 职场 轻小说 人性 民国 成功 游戏 荷兰 爱尔兰 自由 茅盾文学奖 回忆录 雅思 诗 侦探推理 西藏 现实 武侠小说 旅行 华尔街 考试 大学 好书 生活 婚姻 犯罪 捷克 人生 插画 九州 财富 现代都市 加拿大 成长 明朝 故事 80后 复杂 童话 湛庐文化 有趣 家庭 股票 讽刺 进化 短篇 英文版 清朝 战争 诗集 架空 灌篮高手 福尔摩斯 回忆 记忆 2012 C++ 灵异 动物 童年记忆 盗墓 2009 巴黎 棒球 亲子 文革 晋江 生命 2008 留学 Java 火影忍者 爱情 青春 2007 三联 2014 比利时 画 侦探 暴力 杂 茶 耽美 冒险 java 宇宙 IT 诺贝尔文学奖 2013 CS 日本推理 2011 2010 123 恋爱 小学 PHP C# 画集 SQL python 日记 JavaScript 童年 梦想 短篇集 .NET 女人 月刊 死亡 恐怖 IELTS Android 穿越 Web 佛 GRE 吸血鬼 温暖 高中 BL C UI 1 Linux 猫 iOS COMIC R 感动 少女 腐 神秘 Psychology 热血 治愈 爱 AI javascript E Comic GTD History Math Design 吃 Economics Programming LonelyPlanet Architecture Deutsch Statistics Art Python 小时候 Philosophy 写真集 A Physics ebook Linguistics textbook Finance web statistics economics art psychology English programming fiction finance architecture design Photography bl linguistics history math comic philosophy business Manga photography english Textbook 少年向 -------------------------------------------------------------------------------- /engine/log/domain.tags.txt: -------------------------------------------------------------------------------- 1 | 44 世界名著 建筑师 科学史 当代文学 文献学 风险管理 认知 近现代史 自助游 2 | 3 | 43 世界名著 风险管理 当代文学 认知 文献学 近现代史 科学史 建筑师 自助游 金融 4 | 5 | 42 世界名著 当代文学 近现代史 建筑师 文献学 认知 风险管理 科学史 自助游 金融 湛庐文化 6 | 7 | 41 世界名著 近现代史 自助游 风险管理 文献学 当代文学 科学史 认知 建筑师 湛庐文化 金融 研究方法 8 | 9 | 40 世界名著 研究方法 金融 建筑师 当代文学 文献学 科学史 自助游 风险管理 认知 近现代史 湛庐文化 口才 10 | 11 | 39 研究方法 金融 口才 风险管理 科学史 当代文学 认知 自助游 近现代史 文献学 建筑师 世界名著 湛庐文化 思维 12 | 13 | 38 近现代史 科学史 世界名著 风险管理 研究方法 认知 金融 建筑师 思维 当代文学 文献学 口才 自助游 湛庐文化 香港漫画 14 | 15 | 37 近现代史 思维 世界名著 自助游 科学史 湛庐文化 文献学 研究方法 建筑师 风险管理 金融 口才 认知 当代文学 香港漫画 影像 画集 16 | 17 | 36 思维 当代文学 湛庐文化 世界名著 口才 文献学 香港漫画 建筑师 科学史 自助游 研究方法 风险管理 近现代史 金融 认知 画集 影像 机器学习 概率 18 | 19 | 35 画集 自助游 风险管理 香港漫画 口才 建筑师 世界名著 近现代史 影像 金融 概率 当代文学 文献学 认知 研究方法 湛庐文化 机器学习 科学史 思维 奇书 职场 20 | 21 | 34 金融 当代文学 香港漫画 研究方法 口才 职场 建筑师 风险管理 湛庐文化 思维 文献学 科学史 概率 机器学习 世界名著 认知 自助游 近现代史 画集 影像 奇书 史 德国哲学 22 | 23 | 33 当代文学 世界名著 概率 风险管理 湛庐文化 自助游 科学史 机器学习 香港漫画 研究方法 认知 职场 影像 口才 画集 文献学 思维 近现代史 金融 德国哲学 奇书 史 建筑师 考古 时尚 民俗学 24 | 25 | 32 机器学习 口才 香港漫画 职场 湛庐文化 奇书 世界名著 概率 思维 金融 民俗学 德国哲学 认知 近现代史 影像 考古 建筑师 自助游 画集 研究方法 风险管理 科学史 时尚 文献学 当代文学 史 教育 轻小说 价值投资 福尔摩斯 26 | 27 | 31 考古 奇书 画集 文献学 近现代史 湛庐文化 建筑师 科学史 自助游 机器学习 职场 风险管理 德国哲学 价值投资 金融 影像 研究方法 概率 香港漫画 民俗学 认知 史 当代文学 轻小说 口才 时尚 世界名著 思维 教育 福尔摩斯 财富 伦理学 金融数学 宋朝 28 | 29 | 30 影像 轻小说 世界名著 研究方法 宋朝 财富 画集 伦理学 文献学 教育 金融数学 建筑师 科学史 福尔摩斯 机器学习 认知 概率 奇书 德国哲学 自助游 史 思维 考古 当代文学 近现代史 时尚 金融 香港漫画 民俗学 职场 价值投资 口才 风险管理 湛庐文化 算法 唐朝 德国 目录学 人物传记 30 | 31 | 29 职场 湛庐文化 文献学 算法 德国 宋朝 研究方法 画集 民俗学 目录学 金融 自助游 伦理学 风险管理 金融数学 建筑师 科学史 人物传记 史 德国哲学 考古 世界名著 机器学习 轻小说 教育 影像 时尚 香港漫画 思维 口才 概率 唐朝 价值投资 奇书 认知 福尔摩斯 当代文学 近现代史 财富 教学 道教 汉语 访谈 两性 传统文化 32 | 33 | 28 画集 人物传记 教育 思维 两性 建筑师 当代文学 财富 概率 传统文化 研究方法 影像 科学史 汉语 职场 风险管理 考古 价值投资 金融数学 算法 机器学习 近现代史 金融 德国哲学 史 时尚 香港漫画 伦理学 民俗学 文献学 认知 唐朝 口才 湛庐文化 访谈 奇书 世界名著 自助游 宋朝 道教 教学 轻小说 德国 目录学 福尔摩斯 程序员 当代艺术 手册 改革 留学 香港 电子版 34 | 35 | 27 风险管理 时尚 德国哲学 香港 奇书 职场 算法 宋朝 口才 香港漫画 机器学习 文献学 唐朝 科学史 改革 传统文化 认知 电子版 价值投资 访谈 画集 轻小说 当代艺术 教学 程序员 近现代史 思维 金融 研究方法 影像 建筑师 史 概率 留学 当代文学 湛庐文化 民俗学 手册 人物传记 世界名著 考古 德国 自助游 两性 伦理学 福尔摩斯 目录学 金融数学 教育 道教 汉语 财富 伦理 自我成长 画册 自动化 比利时 百科 项目管理 技术分析 36 | 37 | 26 财富 德国哲学 当代文学 汉语 概率 电子版 口才 金融数学 程序员 湛庐文化 科学史 史 道教 职场 自助游 画册 两性 手册 当代艺术 福尔摩斯 自我成长 算法 风险管理 金融 宋朝 认知 技术分析 项目管理 唐朝 德国 思维 香港 比利时 香港漫画 伦理学 建筑师 教育 自动化 价值投资 机器学习 伦理 教学 传统文化 近现代史 目录学 轻小说 人物传记 访谈 时尚 文献学 奇书 百科 考古 影像 留学 世界名著 研究方法 民俗学 画集 改革 女性主义 荒诞 音韵学 汉字 政治经济学 论文写作 金融学 摇滚 GTD 旅游 38 | 39 | 25 画册 百科 算法 影像 目录学 时尚 摇滚 金融学 比利时 香港漫画 研究方法 世界名著 手册 科学史 职场 画集 德国哲学 当代艺术 改革 留学 程序员 音韵学 荒诞 旅游 近现代史 GTD 传统文化 德国 福尔摩斯 技术分析 考古 口才 自助游 论文写作 机器学习 价值投资 唐朝 当代文学 伦理 史 人物传记 访谈 政治经济学 宋朝 道教 电子版 汉语 轻小说 伦理学 汉字 文献学 金融数学 香港 风险管理 自动化 女性主义 金融 思维 教学 认知 民俗学 教育 概率 项目管理 两性 奇书 自我成长 湛庐文化 建筑师 财富 数据分析 资料 分析哲学 数据结构 罗马 词 架构 写真 服饰 考研 新闻传播学 40 | 41 | 24 比利时 程序员 新闻传播学 访谈 当代艺术 传统文化 金融 概率 算法 改革 考古 职场 旅游 电子版 伦理 伦理学 近现代史 写真 价值投资 画集 自助游 认知 音韵学 唐朝 人物传记 财富 风险管理 手册 分析哲学 政治经济学 资料 世界名著 服饰 德国哲学 德国 数据结构 时尚 荒诞 留学 民俗学 影像 百科 画册 两性 史 教学 湛庐文化 自动化 摇滚 研究方法 数据分析 自我成长 道教 福尔摩斯 轻小说 香港漫画 考研 金融数学 项目管理 女性主义 架构 汉语 口才 香港 GTD 汉字 罗马 机器学习 建筑师 文献学 思维 技术分析 科学史 目录学 奇书 当代文学 论文写作 金融学 教育 词 宋朝 认知语言学 历史语言学 当代小说 文化史 海外中国研究 纪实 计算机图形学 明史 易学 西哲 西方奇幻 生命科学 漫画绘本 神话学 42 | 43 | 23 荒诞 考研 自助游 湛庐文化 当代艺术 汉语 纪实 西哲 史 计算机图形学 当代小说 伦理学 近现代史 轻小说 资料 文献学 旅游 时尚 程序员 风险管理 论文写作 金融数学 传统文化 访谈 西方奇幻 明史 自动化 道教 罗马 香港 科学史 比利时 技术分析 金融 香港漫画 财富 新闻传播学 影像 数据分析 宋朝 项目管理 GTD 算法 文化史 生命科学 历史语言学 民俗学 当代文学 汉字 德国 福尔摩斯 摇滚 两性 分析哲学 女性主义 词 画册 易学 考古 认知 人物传记 海外中国研究 机器学习 音韵学 架构 奇书 电子版 认知语言学 目录学 建筑师 教学 思维 金融学 神话学 德国哲学 口才 概率 手册 改革 伦理 价值投资 写真 研究方法 服饰 世界名著 漫画绘本 留学 职场 唐朝 政治经济学 自我成长 数据结构 教育 百科 画集 神话 连环画 宏观经济学 古代史 有趣 金融经济 信息检索 新媒体 英语写作 中国 词汇学 神经科学 证券投资 生物学 图书馆 语言文字 44 | 45 | 22 架构 世界名著 考古 时尚 金融学 汉语 科学史 荒诞 文献学 比利时 旅游 认知语言学 西方奇幻 史 道教 历史语言学 画册 香港漫画 轻小说 程序员 政治经济学 财富 近现代史 古代史 德国 金融经济 语言文字 考研 词 资料 技术分析 唐朝 影像 留学 口才 湛庐文化 连环画 机器学习 分析哲学 概率 百科 职场 海外中国研究 信息检索 摇滚 两性 宋朝 研究方法 自助游 证券投资 神话 图书馆 生命科学 词汇学 德国哲学 当代小说 自动化 民俗学 伦理学 福尔摩斯 数据结构 改革 访谈 人物传记 英语写作 画集 汉字 新闻传播学 自我成长 明史 认知 罗马 新媒体 奇书 服饰 价值投资 GTD 论文写作 伦理 神话学 漫画绘本 生物学 风险管理 神经科学 易学 传统文化 宏观经济学 香港 金融数学 中国 数据分析 音韵学 教学 目录学 教育 电子版 手册 有趣 金融 当代艺术 纪实 女性主义 写真 西哲 计算机图形学 当代文学 文化史 算法 建筑师 项目管理 思维 推理小说 技巧 戏曲 理财 隋唐史 艺术理论 日语学习 清代 言情 战略管理 创意 乐谱 史料 修行 近代 人际 处世 修身 文革 46 | 47 | 21 文化史 数据分析 宏观经济学 自我成长 信息检索 机器学习 科学史 技术分析 处世 传统文化 比利时 政治经济学 罗马 清代 研究方法 新闻传播学 创意 服饰 写真 乐谱 海外中国研究 易学 神经科学 修身 摇滚 证券投资 宋朝 中国 百科 自助游 日语学习 汉字 金融 当代文学 近代 英语写作 考古 论文写作 西方奇幻 神话 算法 教学 画集 资料 GTD 金融经济 影像 考研 词 道教 人物传记 程序员 口才 计算机图形学 艺术理论 目录学 音韵学 技巧 伦理学 思维 史 戏曲 概率 建筑师 图书馆 财富 生物学 旅游 手册 民俗学 战略管理 画册 数据结构 人际 连环画 古代史 湛庐文化 理财 言情 认知 唐朝 明史 福尔摩斯 文革 改革 教育 访谈 分析哲学 隋唐史 当代小说 西哲 轻小说 漫画绘本 香港漫画 职场 历史语言学 自动化 伦理 认知语言学 女性主义 电子版 留学 有趣 风险管理 生命科学 修行 价值投资 文献学 当代艺术 架构 项目管理 近现代史 世界名著 史料 新媒体 推理小说 荒诞 时尚 词汇学 语言文字 纪实 德国 奇书 两性 德国哲学 神话学 香港 金融数学 汉语 金融学 股票 亲子 考古学 2010 电影 油画 同性恋 系统 科学人文 手工 欧美漫画 童心 linux 传播学 经济学 管理学 论文 导演 交互 剧本 冒险 策略 48 | 49 | 20 德国 考研 画册 福尔摩斯 人物传记 影像 图书馆 荒诞 口才 教育 访谈 修身 系统 目录学 香港漫画 生命科学 伦理 近代 研究方法 建筑师 分析哲学 人际 自助游 百科 算法 linux 留学 数据分析 语言文字 战略管理 生物学 自我成长 轻小说 日语学习 创意 改革 德国哲学 连环画 神话学 宏观经济学 油画 画集 汉语 财富 2010 处世 伦理学 新媒体 漫画绘本 女性主义 概率 电子版 电影 导演 史料 历史语言学 西哲 言情 程序员 同性恋 教学 技巧 职场 汉字 金融经济 史 词汇学 戏曲 世界名著 认知语言学 技术分析 考古学 宋朝 数据结构 词 童心 管理学 中国 风险管理 音韵学 文革 两性 服饰 金融学 神经科学 计算机图形学 手工 项目管理 传播学 西方奇幻 剧本 推理小说 民俗学 架构 GTD 比利时 当代艺术 当代小说 认知 金融数学 奇书 考古 冒险 明史 新闻传播学 政治经济学 罗马 艺术理论 当代文学 科学人文 价值投资 英语写作 旅游 亲子 唐朝 文化史 资料 思维 欧美漫画 纪实 摇滚 神话 湛庐文化 机器学习 论文 有趣 乐谱 证券投资 修行 近现代史 道教 论文写作 手册 金融 自动化 策略 理财 交互 古代史 隋唐史 经济学 传统文化 易学 股票 时尚 科学史 写真 信息检索 清代 海外中国研究 文献学 香港 经营管理 财经 犯罪 自传 诗歌 COMIC 语言 新经济 移动互联网 函数式编程 日本推理 二战 丹麦 自然科学 java 水彩 纪实文学 术数 中国古典 儿童文学 收藏 跨文化 经典与解释 现代都市 媒体 文化 互联网 50 | 51 | 19 金融学 人物传记 汉字 二战 新媒体 自然科学 策略 民俗学 伦理 比利时 语言文字 技术分析 剧本 建筑师 神话 服饰 信息检索 童心 考古 经济学 教育 同性恋 百科 油画 创意 德国哲学 分析哲学 湛庐文化 写真 文革 概率 有趣 日语学习 西哲 自动化 丹麦 史料 考研 新闻传播学 管理学 海外中国研究 传播学 研究方法 中国 词汇学 香港 女性主义 新经济 生命科学 考古学 收藏 经典与解释 纪实文学 宏观经济学 语言 近代 乐谱 亲子 文献学 现代都市 当代文学 科学史 风险管理 机器学习 2010 电子版 程序员 道教 手工 项目管理 画册 战略管理 水彩 人际 罗马 两性 文化史 财富 明史 欧美漫画 架构 论文 汉语 诗歌 传统文化 金融 交互 计算机图形学 职场 图书馆 历史语言学 财经 修行 史 当代艺术 中国古典 股票 术数 理财 摇滚 处世 政治经济学 GTD 认知语言学 数据结构 资料 导演 自传 犯罪 德国 互联网 目录学 金融经济 艺术理论 生物学 唐朝 跨文化 金融数学 思维 java 影像 文化 科学人文 时尚 修身 清代 英语写作 媒体 linux 纪实 古代史 隋唐史 函数式编程 香港漫画 数据分析 轻小说 冒险 自助游 手册 经营管理 留学 改革 口才 技巧 神话学 价值投资 神经科学 近现代史 言情 词 推理小说 系统 易学 教学 电影 奇书 算法 西方奇幻 旅游 连环画 儿童文学 访谈 漫画绘本 自我成长 宋朝 伦理学 日本推理 COMIC 福尔摩斯 当代小说 论文写作 戏曲 移动互联网 画集 证券投资 认知 荒诞 世界名著 音韵学 晚清 消遣 词典 文集 古文 广西师范大学出版社 侦探推理 计算语言学 法语 财务自由 美术 已入 德语 民间文学 C语言 游记 随笔 雅思 中文 启蒙 记忆 心理治疗 生存 通识 少女心 德语学习 历史学 2012 七龙珠 逻辑 服装 幻想 经济 52 | 53 | 18 机器学习 数据分析 明史 欧美漫画 跨文化 当代文学 世界名著 概率 经济 媒体 论文写作 计算机图形学 架构 经典与解释 语言文字 手册 古文 算法 当代小说 比利时 传统文化 政治经济学 手工 游记 少女心 2010 雅思 德国哲学 写真 信息检索 清代 经营管理 七龙珠 职场 移动互联网 民间文学 文革 电子版 教学 文集 新闻传播学 考研 两性 管理学 程序员 英语写作 风险管理 COMIC 油画 生物学 汉语 香港漫画 艺术理论 新经济 教育 证券投资 逻辑 影像 心理治疗 时尚 生存 术数 推理小说 中国古典 伦理 自动化 科学人文 宏观经济学 中国 西哲 晚清 服装 自我成长 当代艺术 画册 认知 修行 论文 随笔 宋朝 价值投资 隋唐史 道教 有趣 GTD 诗歌 人际 分析哲学 广西师范大学出版社 数据结构 旅游 法语 认知语言学 童心 自传 唐朝 金融经济 冒险 资料 水彩 自助游 项目管理 丹麦 亲子 文化 文献学 2012 股票 奇书 近现代史 美术 古代史 服饰 记忆 湛庐文化 纪实 历史语言学 人物传记 易学 留学 漫画绘本 目录学 言情 技术分析 音韵学 伦理学 同性恋 金融学 荒诞 启蒙 乐谱 建筑师 修身 系统 已入 近代 史 创意 科学史 犯罪 文化史 福尔摩斯 戏曲 神话学 连环画 女性主义 德语 通识 轻小说 新媒体 计算语言学 图书馆 摇滚 自然科学 历史学 交互 德语学习 神话 儿童文学 侦探推理 改革 日语学习 处世 经济学 中文 linux 口才 互联网 神经科学 消遣 词汇学 民俗学 百科 幻想 收藏 财经 词典 汉字 词 德国 理财 史料 纪实文学 访谈 策略 香港 财富 画集 考古学 西方奇幻 研究方法 技巧 财务自由 金融数学 语言 java 剧本 罗马 C语言 思维 金融 二战 现代都市 函数式编程 战略管理 生命科学 电影 日本推理 海外中国研究 传播学 导演 考古 科研 琴谱 前端 汉语研究 宋史 古典名著 人际关系 生活方式 安全 景观设计 外交 罗马史 日本漫画 现当代 魔戒 生命 减肥 短篇小说 中信出版社 香港文学 学习 生态 奥地利 古代汉语 加拿大 宗教 经济史 新儒家 海贼王 日本研究 医学 英语 先秦 编辑 短篇集 欧美文学 儿童绘本 现代性 编剧 思考 54 | 55 | 17 纪实 童心 亲子 儿童文学 手册 西哲 古典名著 媒体 先秦 德国哲学 日本研究 逻辑 生命科学 程序员 画集 新儒家 启蒙 福尔摩斯 架构 史 日本推理 文革 写真 七龙珠 琴谱 项目管理 人际 轻小说 雅思 广西师范大学出版社 中信出版社 古代史 加拿大 金融 计算语言学 财经 近代 思考 政治经济学 减肥 自助游 电影 现代都市 丹麦 修身 漫画绘本 德国 湛庐文化 历史学 文化 创意 香港漫画 思维 言情 乐谱 自传 技术分析 易学 图书馆 技巧 纪实文学 战略管理 目录学 伦理学 教学 连环画 法语 GTD 留学 函数式编程 经济学 生态 当代小说 处世 唐朝 中国古典 研究方法 外交 人际关系 生存 犯罪 生活方式 机器学习 经济史 论文 两性 金融学 建筑师 金融经济 认知 清代 景观设计 记忆 安全 COMIC 导演 英语写作 德语 文化史 口才 消遣 罗马 旅游 艺术理论 策略 修行 现代性 移动互联网 近现代史 价值投资 生物学 中文 学习 财富 分析哲学 魔戒 儿童绘本 编辑 古代汉语 已入 汉语研究 证券投资 同性恋 文集 传播学 道教 文献学 短篇小说 改革 历史语言学 二战 推理小说 传统文化 欧美文学 职场 2010 汉语 西方奇幻 财务自由 神话学 伦理 资料 linux 随笔 画册 服装 服饰 诗歌 论文写作 计算机图形学 宋史 前端 日语学习 宗教 剧本 医学 理财 中国 信息检索 神经科学 民间文学 英语 人物传记 语言 荒诞 当代艺术 戏曲 冒险 当代文学 海贼王 术数 香港文学 词典 科研 金融数学 宋朝 奥地利 美术 民俗学 水彩 自动化 词汇学 欧美漫画 少女心 系统 C语言 java 新经济 数据结构 股票 访谈 罗马史 经典与解释 女性主义 算法 宏观经济学 科学史 新闻传播学 风险管理 认知语言学 奇书 海外中国研究 语言文字 自然科学 科学人文 香港 史料 汉字 生命 心理治疗 古文 教育 管理学 编剧 影像 互联网 收藏 侦探推理 比利时 经营管理 明史 考研 隋唐史 经济 现当代 电子版 时尚 概率 摇滚 德语学习 幻想 数据分析 油画 神话 短篇集 2012 通识 跨文化 世界名著 音韵学 考古学 自我成长 有趣 手工 日本漫画 游记 百科 词 新媒体 晚清 考古 交互 法哲学 历史 模式 禅修 素描 晋江 中日 昆曲 零售 中国经济 网络文学 摄影 城市规划 民族志 大学 文艺 社会史 个人成长 不可能犯罪 职业生涯 论文集 复旦 谈判 明清史 拓扑 财务 知识 神学 中国当代文学 历史哲学 投资理财 童话 新闻传播 文论 人文地理 意大利文学 波兰 古籍 童话绘本 产品设计 西方哲学史 同志 方法论 计算机网络 css 计算机技术 谋略 中国政治 56 | 57 | 16 认知 古代汉语 修身 C语言 文化 手工 民俗学 投资理财 西哲 考古 史 纪实 经济史 口才 linux 英语 古文 通识 人文地理 css 财经 影像 大学 科学人文 文艺 画册 文革 词汇学 神经科学 福尔摩斯 罗马 素描 乐谱 访谈 生命 改革 世界名著 女性主义 跨文化 德语 德语学习 计算机网络 海贼王 现代性 论文 现当代 意大利文学 犯罪 修行 二战 教学 谋略 文献学 目录学 交互 术数 隋唐史 美术 网络文学 新闻传播 新儒家 模式 宋朝 史料 古代史 财富 明史 函数式编程 人物传记 零售 个人成长 写真 自动化 中国政治 中日 明清史 禅修 七龙珠 生物学 思考 时尚 宏观经济学 近代 海外中国研究 诗歌 中国古典 经济学 晋江 外交 日本漫画 推理小说 文化史 2012 摇滚 留学 程序员 同志 同性恋 词 雅思 幻想 神话学 电子版 游记 民间文学 亲子 传统文化 生态 旅游 冒险 电影 减肥 汉语研究 复旦 加拿大 英语写作 数据分析 摄影 生命科学 民族志 古籍 自传 前端 清代 编剧 谈判 唐朝 宋史 古典名著 晚清 经济 西方奇幻 百科 java 论文写作 日本研究 儿童文学 自然科学 神学 欧美文学 荒诞 战略管理 计算语言学 两性 先秦 传播学 证券投资 生活方式 历史 中国 新闻传播学 思维 童话 道教 有趣 历史哲学 社会史 系统 媒体 魔戒 知识 中信出版社 记忆 伦理 安全 方法论 消遣 管理学 学习 金融 汉字 波兰 丹麦 当代小说 画集 2010 轻小说 策略 财务 中国经济 服饰 创意 价值投资 认知语言学 算法 语言 理财 金融学 论文集 收藏 考研 财务自由 剧本 琴谱 逻辑 心理治疗 近现代史 纪实文学 政治经济学 香港文学 连环画 拓扑 生存 短篇集 分析哲学 奥地利 股票 研究方法 已入 新经济 自助游 现代都市 香港 导演 中文 技巧 西方哲学史 奇书 人际 香港漫画 语言文字 文论 GTD 经营管理 图书馆 建筑师 罗马史 新媒体 易学 水彩 神话 科研 戏曲 法语 考古学 中国当代文学 当代艺术 德国哲学 互联网 童心 伦理学 景观设计 经典与解释 风险管理 COMIC 移动互联网 信息检索 资料 漫画绘本 职场 音韵学 词典 欧美漫画 不可能犯罪 历史学 油画 概率 处世 职业生涯 医学 日本推理 湛庐文化 历史语言学 手册 文集 法哲学 编辑 少女心 机器学习 昆曲 随笔 童话绘本 城市规划 自我成长 项目管理 人际关系 科学史 德国 教育 计算机图形学 宗教 架构 言情 儿童绘本 计算机技术 技术分析 启蒙 数据结构 广西师范大学出版社 比利时 金融数学 艺术理论 日语学习 侦探推理 产品设计 当代文学 短篇小说 汉语 金融经济 服装 开发 玄幻小说 传奇 传记 图文 研究生 飞船 .Net 操作系统 经济金融 计算机科学 中国科幻 盗墓 思想史 2009 软件开发 科学家 笔记 西游记 儿童读物 哈利波特 内核 后宫 日语 LonelyPlanet 小学 民国史 农村 专业书 清史 侦探 出版 人生哲学 管理咨询 绘声绘色 专栏 散文随笔 画画 方法 人性 古代文学 信息 效率 园林 隋唐 服务器 欧洲史 photoshop 计算机系统 西班牙文学 红楼 荷兰 党史 未来 信仰 音乐学 书虫 当代 matlab 社会语言学 市场营销 期货 健身 58 | 59 | 15 金融数学 哈利波特 词汇学 伦理学 亲子 宋朝 素描 丹麦 服装 语言 明史 汉语研究 农村 财务自由 雅思 论文 飞船 思考 神学 函数式编程 奥地利 证券投资 侦探推理 文革 中国当代文学 日本漫画 导演 广西师范大学出版社 德语 后宫 神话 自动化 油画 内核 奇书 职场 纪实文学 复旦 资料 手册 神经科学 访谈 法哲学 编剧 个人成长 古籍 逻辑 世界名著 历史学 减肥 历史哲学 艺术理论 传统文化 同志 .Net 医学 剧本 2010 photoshop 消遣 写真 书虫 当代文学 罗马 技术分析 2009 GTD 人文地理 自助游 短篇集 魔戒 禅修 德语学习 金融 服务器 模式 旅游 言情 历史语言学 欧洲史 方法 音乐学 操作系统 现当代 二战 加拿大 百科 语言文字 人性 儿童文学 意大利文学 社会语言学 清史 文化史 童心 词典 经济 财富 文献学 架构 连环画 金融经济 儿童绘本 唐朝 策略 先秦 开发 日语学习 现代都市 计算机科学 犯罪 方法论 通识 前端 处世 传记 计算机技术 人际关系 近现代史 理财 期货 经济学 科学史 当代 冒险 生命科学 战略管理 昆曲 计算语言学 人生哲学 景观设计 COMIC 产品设计 css 认知语言学 信息 西方奇幻 经典与解释 中国经济 思想史 生存 史 当代艺术 市场营销 教育 侦探 项目管理 自我成长 西班牙文学 盗墓 隋唐 园林 投资理财 LonelyPlanet 宗教 摇滚 新闻传播 古文 信仰 职业生涯 论文写作 德国 网络文学 金融学 科学家 论文集 城市规划 C语言 法语 罗马史 认知 大学 宋史 日本推理 日本研究 散文随笔 考古学 波兰 系统 影像 计算机图形学 互联网 经济史 近代 留学 清代 口才 健身 西游记 算法 财务 中国政治 外交 诗歌 当代小说 明清史 时尚 绘声绘色 启蒙 推理小说 修身 专栏 随笔 汉语 考研 财经 已入 数据分析 价值投资 传奇 政治经济学 java 轻小说 香港 神话学 欧美漫画 西哲 中国科幻 matlab 隋唐史 漫画绘本 游记 民俗学 党史 新媒体 计算机系统 戏曲 文集 荷兰 同性恋 西方哲学史 未来 有趣 古代汉语 研究方法 水彩 生物学 电子版 软件开发 民国史 数据结构 日语 人际 出版 生态 中国 安全 英语写作 教学 史料 小学 生命 福尔摩斯 媒体 画画 新经济 专业书 图书馆 历史 荒诞 移动互联网 效率 红楼 自然科学 改革 手工 科学人文 文艺 拓扑 谋略 心理治疗 程序员 宏观经济学 风险管理 古代文学 思维 考古 画册 欧美文学 玄幻小说 民族志 民间文学 学习 研究生 伦理 创意 跨文化 香港漫画 现代性 股票 短篇小说 记忆 琴谱 纪实 经营管理 概率 比利时 中信出版社 易学 笔记 知识 汉字 古代史 零售 中文 幻想 2012 画集 乐谱 生活方式 文论 计算机网络 管理咨询 新儒家 目录学 文化 收藏 修行 英语 分析哲学 服饰 linux 传播学 经济金融 交互 术数 技巧 建筑师 晚清 女性主义 海外中国研究 德国哲学 管理学 社会史 信息检索 少女心 机器学习 音韵学 两性 中日 编辑 七龙珠 香港文学 湛庐文化 不可能犯罪 电影 新闻传播学 图文 词 儿童读物 童话绘本 海贼王 摄影 道教 人物传记 晋江 古典名著 中国古典 科研 自传 谈判 童话 美术 哲学史 复杂系统 新本格 杂书 嵌入式 古文字 哲学 奇幻 古代 选集 思维方法 流行 基础 史学 组织 图书 游戏开发 认知科学 当代中国 生活 艺术史 通俗读物 西方哲学 职场小说 诗 中国当代 运动 代数 电子书 社会网络 外国名著 未来学 西域 苏联 生物 奥地利学派 暴力 经济管理 三国演义 实用 程序设计 MBA 黑色幽默 心理语言学 藏 音乐 传播 云计算 Matlab 中国古代文学 开卷八分钟 港台 辞典 海外汉学 德国文学 画 英语学习 占星学 家庭教育 美食 建筑 参考书 比较文学 思想 诸子 讽刺 理论 占星 世界 政治学 法学 绘本 灵异 心理 数据挖掘 汉译世界学术名著丛书 科普 悬疑小说 工具书 社会心理学 设计 -------------------------------------------------------------------------------- /engine/log/domain.tags1.txt: -------------------------------------------------------------------------------- 1 | 29 政治 欧洲 技术 国学 心理治疗 人物传记 文献学 书话 2 | 3 | 28 政治 欧洲 书话 技术 国学 文献学 心理治疗 人物传记 商业 4 | 5 | 27 心理治疗 欧洲 国学 文献学 人物传记 商业 政治 书话 技术 心理学 6 | 7 | 26 国学 欧洲 书话 政治 技术 商业 文献学 心理学 心理治疗 人物传记 拉美 8 | 9 | 25 心理学 拉美 国学 商业 文献学 人物传记 技术 心理治疗 书话 政治 欧洲 数据处理 10 | 11 | 24 心理治疗 书话 心理学 拉美 技术 人物传记 商业 欧洲 文献学 政治 国学 数据处理 西哲 12 | 13 | 23 欧洲 心理治疗 数据处理 技术 西哲 商业 拉美 书话 政治 国学 文献学 人物传记 心理学 财经 14 | 15 | 22 西哲 技术 商业 政治 数据处理 人物传记 欧洲 书话 心理学 文献学 国学 心理治疗 财经 拉美 藏传佛教 16 | 17 | 21 文献学 心理学 数据处理 技术 人物传记 欧洲 藏传佛教 商业 书话 政治 财经 国学 西哲 拉美 心理治疗 编程 古典音乐 18 | 19 | 20 拉美 技术 商业 书话 政治 数据处理 心理治疗 欧洲 心理学 藏传佛教 国学 财经 编程 古典音乐 文献学 人物传记 西哲 中国现代文学 数学分析 20 | 21 | 19 书话 数学分析 西哲 编程 藏传佛教 数据处理 人物传记 国学 政治 中国现代文学 财经 心理学 心理治疗 古典音乐 商业 文献学 拉美 欧洲 技术 架构 日本 22 | 23 | 18 文献学 技术 编程 商业 架构 心理学 古典音乐 藏传佛教 国学 数据处理 数学分析 欧洲 西哲 心理治疗 财经 政治 书话 拉美 日本 中国现代文学 人物传记 机器学习 法学 游戏开发 24 | 25 | 17 心理学 技术 财经 拉美 商业 欧洲 编程 文献学 数据处理 西哲 法学 心理治疗 架构 古典音乐 国学 游戏开发 政治 藏传佛教 中国现代文学 数学分析 书话 人物传记 机器学习 日本 绘画 饮食文化 诗词 26 | 27 | 16 藏传佛教 饮食文化 商业 国学 游戏开发 架构 古典音乐 日本 西哲 绘画 编程 书话 文献学 中国现代文学 财经 心理治疗 数据处理 人物传记 拉美 法学 欧洲 政治 心理学 机器学习 诗词 数学分析 技术 文论 语音研究 苏联 28 | 29 | 15 财经 游戏开发 饮食文化 中国现代文学 心理学 语音研究 商业 架构 藏传佛教 数据处理 绘画 日本 人物传记 技术 书话 心理治疗 古典音乐 欧洲 拉美 政治 数学分析 诗词 编程 法学 西哲 文献学 机器学习 文论 国学 苏联 基础 组织 学术 销售 30 | 31 | 14 基础 饮食文化 心理学 组织 藏传佛教 数据处理 人物传记 书话 西哲 心理治疗 技术 财经 绘画 日本 语音研究 拉美 学术 古典音乐 机器学习 文献学 文论 商业 国学 政治 苏联 法学 编程 中国现代文学 架构 数学分析 欧洲 游戏开发 诗词 销售 笔记 嵌入式 投资理财 测试 性 32 | 33 | 13 游戏开发 书话 组织 心理学 基础 西哲 饮食文化 欧洲 笔记 日本 销售 性 诗词 财经 藏传佛教 苏联 学术 古典音乐 绘画 测试 编程 数学分析 文论 数据处理 法学 文献学 技术 嵌入式 机器学习 架构 政治 语音研究 投资理财 国学 商业 中国现代文学 人物传记 拉美 心理治疗 家庭教育 外国文学 新闻传播 外国小说 地图 启蒙 宋史 34 | 35 | 12 数学分析 心理治疗 学术 财经 技术 日本 藏传佛教 外国小说 人物传记 外国文学 组织 商业 启蒙 法学 心理学 文献学 基础 地图 笔记 新闻传播 语音研究 西哲 架构 销售 家庭教育 绘画 嵌入式 游戏开发 机器学习 投资理财 苏联 诗词 测试 性 政治 书话 欧洲 饮食文化 古典音乐 中国现代文学 宋史 国学 编程 拉美 数据处理 文论 文学 安全 历史地理 成功学 化学 欧美 文字学 玄幻 36 | 37 | 11 化学 启蒙 语音研究 文学 家庭教育 地图 文献学 测试 宋史 日本 中国现代文学 商业 数学分析 财经 架构 学术 安全 古典音乐 欧洲 投资理财 外国文学 性 编程 机器学习 文字学 成功学 心理学 新闻传播 国学 嵌入式 法学 诗词 游戏开发 外国小说 心理治疗 笔记 基础 销售 数据处理 苏联 西哲 绘画 历史地理 文论 技术 欧美 玄幻 拉美 书话 藏传佛教 组织 政治 人物传记 饮食文化 现代汉语 领导力 自我完善 论文 中国近代史 清史 日本文化 通史 经济史 电影书 38 | 39 | 10 现代汉语 自我完善 架构 基础 机器学习 论文 拉美 启蒙 成功学 新闻传播 日本 法学 化学 通史 领导力 语音研究 藏传佛教 欧洲 学术 宋史 性 组织 文学 外国小说 家庭教育 欧美 销售 投资理财 心理治疗 编程 安全 文献学 商业 政治 笔记 经济史 嵌入式 文字学 数据处理 技术 历史地理 文论 西哲 心理学 测试 中国近代史 书话 中国现代文学 绘画 国学 数学分析 外国文学 古典音乐 财经 日本文化 诗词 电影书 饮食文化 苏联 玄幻 地图 人物传记 清史 游戏开发 思维方式 产品设计 小说 评论 学习方法 媒体 经典 个人管理 儿童 心理咨询 神话 科技 40 | 41 | 9 家庭教育 评论 日本文化 西哲 绘画 文学 机器学习 编程 媒体 个人管理 性 法学 政治 欧洲 数据处理 产品设计 销售 苏联 中国近代史 学习方法 架构 现代汉语 心理治疗 商业 化学 神话 笔记 技术 投资理财 地图 成功学 文献学 财经 外国文学 经济史 历史地理 文字学 基础 通史 日本 领导力 学术 清史 国学 新闻传播 心理学 电影书 科技 欧美 藏传佛教 人物传记 饮食文化 中国现代文学 诗词 心理咨询 语音研究 论文 启蒙 安全 文论 外国小说 数学分析 古典音乐 宋史 书话 游戏开发 自我完善 玄幻 小说 组织 嵌入式 经典 测试 思维方式 儿童 拉美 演讲 美食 古典诗词 战略 程序设计 古希腊 方法论 政治经济学 文化研究 传媒 摇滚 推理 佛教 期货 历史学 反乌托邦 42 | 43 | 8 经济史 化学 经典 演讲 心理学 拉美 外国小说 学习方法 法学 数学分析 欧美 历史学 文学 组织 程序设计 现代汉语 心理咨询 中国现代文学 文字学 测试 性 评论 苏联 语音研究 古典诗词 技术 通史 思维方式 推理 古希腊 战略 架构 文论 文献学 书话 商业 文化研究 佛教 电影书 投资理财 期货 神话 安全 宋史 方法论 绘画 科技 论文 笔记 国学 反乌托邦 启蒙 清史 日本 饮食文化 传媒 摇滚 玄幻 财经 欧洲 心理治疗 媒体 基础 游戏开发 编程 西哲 学术 机器学习 家庭教育 政治 自我完善 销售 新闻传播 成功学 数据处理 政治经济学 儿童 个人管理 美食 地图 日本文化 外国文学 历史地理 领导力 嵌入式 藏传佛教 中国近代史 人物传记 产品设计 古典音乐 小说 诗词 古文字 藏书 工业设计 建筑史 西方 青春文学 中国文化 自我管理 英语学习 钢琴 禅 明史 外语 教育 数据库 言情 侦探小说 纪实 案例 电影 闲书 44 | 45 | 7 评论 苏联 中国现代文学 文字学 科技 中国近代史 中国文化 媒体 现代汉语 销售 人物传记 经典 清史 玄幻 推理 欧洲 英语学习 西方 日本文化 国学 儿童 历史学 书话 战略 程序设计 古典诗词 安全 家庭教育 数据库 性 文献学 基础 神话 禅 小说 电影书 青春文学 投资理财 古文字 日本 技术 商业 电影 心理治疗 明史 政治 游戏开发 教育 文学 钢琴 佛教 化学 外国小说 古典音乐 政治经济学 法学 纪实 语音研究 闲书 笔记 诗词 测试 组织 文论 饮食文化 新闻传播 侦探小说 思维方式 外语 藏传佛教 古希腊 个人管理 摇滚 宋史 财经 自我管理 启蒙 拉美 心理咨询 反乌托邦 历史地理 方法论 产品设计 期货 藏书 领导力 案例 言情 学术 架构 文化研究 编程 欧美 数据处理 西哲 成功学 嵌入式 美食 自我完善 通史 数学分析 工业设计 外国文学 机器学习 心理学 建筑史 经济史 学习方法 绘画 演讲 地图 传媒 论文 女性文学 产品经理 古代汉语 研究 中国文学 设计理论 新媒体 文集 画册 影评 励志 养生 前端 文艺理论 武术 技术分析 音乐 建筑 童书 史料 红楼梦 教材 晚清 童年回忆 广告 古言 沟通 两性 杂书 46 | 47 | 6 养生 投资理财 外国小说 教育 自我管理 饮食文化 拉美 日本文化 学习方法 杂书 建筑史 欧洲 架构 机器学习 纪实 佛教 技术 文化研究 小说 成功学 文集 法学 政治 西方 宋史 文艺理论 新媒体 论文 日本 书话 晚清 演讲 文论 地图 数据库 摇滚 史料 苏联 闲书 欧美 推理 历史地理 古言 前端 化学 英语学习 青春文学 建筑 外语 案例 清史 明史 电影 禅 语音研究 工业设计 童年回忆 绘画 美食 广告 藏传佛教 技术分析 沟通 通史 嵌入式 文献学 画册 女性文学 励志 现代汉语 诗词 经典 财经 童书 媒体 影评 古希腊 性 中国文学 数学分析 启蒙 电影书 古典诗词 商业 程序设计 期货 测试 研究 古代汉语 外国文学 藏书 心理治疗 玄幻 组织 游戏开发 销售 古文字 家庭教育 神话 笔记 心理学 中国近代史 历史学 产品经理 传媒 思维方式 国学 数据处理 科技 学术 钢琴 安全 经济史 儿童 评论 文学 中国文化 设计理论 战略 产品设计 中国现代文学 反乌托邦 编程 音乐 个人管理 红楼梦 教材 新闻传播 政治经济学 侦探小说 言情 自我完善 基础 西哲 领导力 方法论 武术 两性 人物传记 文字学 心理咨询 古典音乐 敏捷开发 语文 文史 散文随笔 古代 戏剧 大陆 民俗 创新 道家 台湾文学 红学 产品 现象学 国际政治 职场小说 设计模式 社会理论 治愈系 禅宗 开发 英文 古罗马 马克思主义 管理 算法 实用 知识分子 杂文 思想史 数学 写真 女性主义 中国研究 语法研究 书画 人际关系 知识 西方哲学 48 | 49 | 5 中国现代文学 投资理财 演讲 测试 语文 家庭教育 杂书 藏书 建筑 诗词 现代汉语 藏传佛教 养生 神话 领导力 钢琴 两性 童年回忆 新媒体 女性主义 产品 设计理论 游戏开发 侦探小说 笔记 古典诗词 管理 数据库 论文 外语 基础 文化研究 媒体 安全 前端 性 禅 书话 文学 外国文学 台湾文学 散文随笔 人物传记 地图 英语学习 中国研究 技术 商业 知识 教材 小说 评论 销售 思想史 知识分子 数学 产品设计 佛教 工业设计 启蒙 饮食文化 闲书 中国文学 文论 民俗 成功学 美食 红楼梦 言情 古代 现象学 技术分析 历史学 国学 敏捷开发 电影 欧美 学术 心理咨询 明史 经典 大陆 画册 自我完善 数学分析 新闻传播 儿童 算法 西方哲学 自我管理 文献学 设计模式 古言 青春文学 文字学 传媒 武术 文史 编程 拉美 古希腊 中国文化 书画 政治 日本 社会理论 实用 研究 文艺理论 沟通 学习方法 期货 机器学习 程序设计 心理学 产品经理 中国近代史 古典音乐 心理治疗 清史 开发 马克思主义 西方 写真 建筑史 摇滚 案例 语法研究 音乐 宋史 玄幻 方法论 政治经济学 职场小说 影评 西哲 古罗马 外国小说 法学 经济史 电影书 数据处理 推理 红学 创新 反乌托邦 化学 欧洲 语音研究 晚清 人际关系 苏联 通史 古代汉语 广告 史料 道家 文集 日本文化 财经 思维方式 戏剧 禅宗 架构 治愈系 女性文学 杂文 古文字 国际政治 英文 组织 纪实 童书 历史地理 科技 教育 个人管理 励志 绘画 嵌入式 战略 个人成长 当代 艺术史 德国文学 德国 存在主义 天文 平面设计 手工 创意 旅游 耽美漫画 艺术理论 学术史 认知语言学 中国小说 NLP 儿童文学 脑科学 工具书 项目管理 图书馆 经学 军事 史学理论 智慧 文学研究 入门 经济管理 城市 财务 计量经济学 民主 医学 青年漫画 web开发 金融学 人类学 手绘 代数 逻辑 台版 求职 魔幻 搜索引擎 理论 名著 市场营销 植物 汉语 分析 关于书的书 50 | 51 | 4 心理咨询 诗词 儿童文学 文学 儿童 技术分析 投资理财 饮食文化 前端 红楼梦 手绘 古罗马 散文随笔 日本文化 媒体 评论 女性主义 文学研究 知识 产品 现象学 大陆 外语 台湾文学 手工 政治 设计理论 政治经济学 古文字 美食 国际政治 女性文学 演讲 现代汉语 创意 分析 项目管理 数学分析 明史 方法论 求职 台版 数学 养生 西方 金融学 德国文学 算法 佛教 武术 医学 研究 计量经济学 反乌托邦 经济管理 存在主义 古典音乐 家庭教育 沟通 历史地理 广告 电影 童年回忆 关于书的书 学术史 图书馆 创新 社会理论 外国文学 绘画 治愈系 财经 古希腊 小说 经学 文字学 艺术史 心理学 艺术理论 启蒙 城市 机器学习 代数 财务 敏捷开发 古典诗词 文集 旅游 数据处理 编程 民主 宋史 搜索引擎 认知语言学 国学 钢琴 文化研究 青春文学 建筑 论文 拉美 励志 电影书 汉语 西方哲学 植物 自我管理 产品经理 安全 民俗 领导力 红学 清史 法学 音乐 基础 纪实 通史 笔记 语法研究 中国研究 技术 人际关系 工具书 摇滚 设计模式 组织 数据库 玄幻 逻辑 杂文 成功学 学习方法 古言 中国文学 道家 职场小说 经典 文献学 文史 销售 建筑史 闲书 学术 心理治疗 个人成长 英语学习 青年漫画 禅宗 苏联 魔幻 开发 当代 嵌入式 人物传记 期货 日本 藏传佛教 西哲 历史学 画册 英文 理论 古代汉语 程序设计 战略 马克思主义 军事 中国现代文学 教育 智慧 思想史 人类学 影评 戏剧 中国文化 产品设计 市场营销 架构 性 禅 童书 天文 实用 经济史 侦探小说 传媒 欧洲 自我完善 化学 德国 游戏开发 推理 古代 web开发 入门 管理 史学理论 测试 史料 平面设计 语文 耽美漫画 中国近代史 晚清 文艺理论 科技 写真 新闻传播 欧美 外国小说 NLP 案例 工业设计 书话 个人管理 名著 杂书 商业 语音研究 教材 地图 思维方式 文论 中国小说 言情 神话 新媒体 两性 知识分子 藏书 脑科学 书画 电子书 概率论 中国历史 文学理论 宗教 传播学 历史小说 思考 计算机技术 纪实文学 图画书 线性代数 魏晋南北朝 艺术设计 英国 日版漫画 社会心理学 传记 管理咨询 后现代 现代文学 中国古典文学 专业相关 社会史 法国 进化论 考古 科学史 言情小说 决策 电子版 海外中国研究 恐怖漫画 百科 金融 认知科学 法律 时尚 投资 教育学 当代艺术 三联书店 英语 研究方法 现当代文学 革命 微积分 中国哲学 官场小说 房地产 文学批评 专业 城市规划 民族 课本 性学 企业 中医 用户体验 神学 修身 系统 网络营销 香港文学 建筑理论 52 | 53 | 3 广告 电子书 传记 国学 外国文学 编程 三联书店 女性主义 思想史 敏捷开发 台版 传媒 科学史 革命 言情 英语 海外中国研究 大陆 神话 传播学 史学理论 架构 中国近代史 思考 苏联 嵌入式 儿童 日本 汉语 化学 企业 论文 中国历史 机器学习 工具书 绘画 战略 领导力 金融学 认知语言学 建筑理论 法学 管理 家庭教育 经典 植物 语音研究 金融 红楼梦 政治经济学 房地产 书画 web开发 法国 历史地理 英国 概率论 古代 图书馆 沟通 商业 学术史 文艺理论 文化研究 产品 电子版 藏传佛教 外国小说 经济史 励志 艺术设计 名著 城市规划 思维方式 散文随笔 文学批评 城市 搜索引擎 存在主义 养生 投资理财 中国哲学 纪实 课本 钢琴 书话 当代艺术 经学 台湾文学 产品经理 设计理论 游戏开发 古典诗词 文史 政治 古代汉语 成功学 开发 NLP 文学理论 认知科学 官场小说 考古 测试 民族 民主 数学分析 关于书的书 艺术理论 女性文学 系统 脑科学 性 入门 历史小说 古希腊 马克思主义 儿童文学 杂文 线性代数 性学 心理学 禅宗 中国古典文学 数学 语文 计算机技术 医学 现代文学 拉美 启蒙 投资 社会理论 用户体验 技术 方法论 军事 社会史 项目管理 安全 计量经济学 民俗 心理咨询 组织 专业 经济管理 历史学 专业相关 评论 英文 纪实文学 人类学 古文字 演讲 西哲 通史 人物传记 治愈系 日版漫画 音乐 学术 微积分 职场小说 建筑史 中国研究 决策 戏剧 财务 文字学 知识分子 地图 美食 香港文学 教育 现代汉语 明史 基础 外语 自我管理 童书 英语学习 百科 德国 摇滚 古言 知识 画册 自我完善 销售 设计模式 手工 法律 笔记 修身 宋史 市场营销 道家 旅游 武术 研究 神学 中国文学 数据库 文献学 侦探小说 童年回忆 程序设计 新媒体 两性 新闻传播 逻辑 期货 言情小说 案例 欧洲 技术分析 天文 求职 教材 推理 日本文化 管理咨询 心理治疗 数据处理 人际关系 诗词 中国现代文学 影评 欧美 网络营销 青年漫画 晚清 平面设计 智慧 现当代文学 西方哲学 代数 闲书 当代 个人管理 中国小说 饮食文化 反乌托邦 藏书 研究方法 史料 古典音乐 创意 个人成长 小说 理论 电影书 图画书 写真 电影 恐怖漫画 中国文化 禅 青春文学 财经 时尚 社会心理学 实用 西方 现象学 学习方法 宗教 清史 文学 红学 前端 文学研究 国际政治 中医 耽美漫画 产品设计 建筑 玄幻 媒体 魏晋南北朝 进化论 后现代 算法 佛教 教育学 创新 工业设计 古罗马 手绘 语法研究 科技 文集 魔幻 分析 杂书 艺术史 文论 德国文学 科幻 中世纪 推理小说 人生哲学 德语文学 计算机科学 食谱 linux 当代文学 民俗学 逻辑学 俄罗斯文学 漫画 文学史 趣味 词汇 咨询 电影研究 午夜文库 佛学 会计 软件开发 视觉 自然科学 通俗 上海 中国古典 证券 方法 人文 瑞典 大学教材 科幻小说 日语学习 语法 心灵成长 读书 汉学 交易 科学人文 实验语音学 儿童教育 计算机 政治学 历史 散文 哲学 文化 信息安全 访谈 情感 分析哲学 统计学 摄影 教程 数据挖掘 历史语言学 古代文学 神秘学 网页设计 科普 语言学习 地理 专业书 认知 社会学 大师 考研 圣经 Web开发 创业 策划 基督教 营销 美国文学 情色 中国漫画 思维方法 语言 美容 海外汉学 博弈论 小人书 互联网 网络文学 经济 新闻学 俄罗斯 阅读 近代 思想 物理 投机 育儿 黑色幽默 美术史 语音 世界史 架空历史 科学哲学 概率 信仰 哲学史 社会科学 音系学 哲理 意大利 德语 54 | 55 | 2 知识 经济史 心理咨询 西哲 考研 哲学 古希腊 专业书 证券 读书 德语 中国漫画 产品设计 武术 新闻学 创新 历史学 传记 青春文学 情色 社会学 女性主义 古罗马 女性文学 方法论 管理咨询 晚清 数据库 学术史 官场小说 交易 黑色幽默 大学教材 化学 玄幻 经典 自我完善 语文 产品经理 创意 修身 哲理 汉学 思想史 美术史 金融学 敏捷开发 圣经 语法 营销 俄罗斯 个人成长 植物 杂书 房地产 媒体 言情 书话 文学理论 教育 外国小说 国际政治 求职 治愈系 言情小说 研究 考古 国学 工业设计 中国历史 大师 佛教 上海 线性代数 建筑理论 语言 中国小说 沟通 统计学 食谱 前端 技术 科幻小说 设计理论 访谈 写真 社会科学 现代文学 画册 组织 民族 时尚 育儿 杂文 计算机技术 地理 项目管理 财经 古代文学 财务 NLP 设计模式 论文 经济 台版 现象学 摄影 近代 数学分析 通史 经济管理 文史 诗词 法律 认知语言学 美国文学 政治学 古典诗词 法学 知识分子 西方哲学 恐怖漫画 语法研究 工具书 文学 新媒体 专业 脑科学 管理 进化论 民俗 数据处理 基础 古文字 中国哲学 纪实 逻辑学 投资理财 古代汉语 测试 藏传佛教 嵌入式 历史小说 网络营销 古言 文学史 科幻 科普 专业相关 漫画 历史地理 社会心理学 汉语 用户体验 明史 咨询 纪实文学 世界史 新闻传播 日本 手绘 德国文学 宋史 城市规划 现当代文学 电影 计算机科学 三联书店 系统 实验语音学 认知 中国古典文学 认知科学 建筑史 科学史 架构 技术分析 学习方法 社会理论 文化研究 语音 台湾文学 代数 会计 散文随笔 史学理论 历史语言学 语言学习 情感 推理小说 信仰 中国文化 中世纪 视觉 理论 方法 网页设计 计算机 史料 艺术理论 法国 概率论 中国现代文学 商业 数据挖掘 现代汉语 俄罗斯文学 书画 创业 通俗 意大利 中国研究 编程 人类学 文学批评 销售 旅游 艺术设计 评论 科技 哲学史 日语学习 美容 海外中国研究 外国文学 名著 linux 小说 午夜文库 日本文化 策划 英国 政治经济学 禅宗 德语文学 马克思主义 绘画 微积分 禅 博弈论 软件开发 开发 计量经济学 日版漫画 期货 概率 经学 信息安全 童年回忆 图画书 摇滚 侦探小说 文论 耽美漫画 佛学 投资 家庭教育 心理治疗 图书馆 儿童文学 励志 饮食文化 政治 红学 外语 民俗学 传播学 古典音乐 机器学习 养生 两性 英文 当代 道家 程序设计 实用 网络文学 建筑 语音研究 架空历史 搜索引擎 电影书 小人书 神秘学 游戏开发 藏书 民主 天文 英语学习 科学哲学 成功学 瑞典 阅读 电子版 电子书 教育学 课本 儿童 安全 思想 文字学 戏剧 领导力 Web开发 研究方法 市场营销 思维方法 科学人文 拉美 人文 投机 德国 笔记 童书 英语 儿童教育 心理学 当代艺术 平面设计 音系学 手工 西方 分析哲学 性 钢琴 文集 学术 人际关系 心灵成长 关于书的书 医学 影评 金融 大陆 宗教 散文 神话 电影研究 文化 词汇 自然科学 web开发 启蒙 革命 美食 音乐 战略 中国文学 文学研究 物理 历史 产品 社会史 算法 地图 互联网 城市 演讲 青年漫画 分析 百科 基督教 欧洲 反乌托邦 文献学 中国古典 教程 人生哲学 趣味 自我管理 入门 中国近代史 神学 海外汉学 中医 个人管理 职场小说 决策 案例 欧美 苏联 广告 逻辑 红楼梦 思维方式 人物传记 魔幻 香港文学 智慧 军事 闲书 传媒 教材 数学 当代文学 推理 古代 存在主义 思考 艺术史 后现代 企业 魏晋南北朝 文艺理论 性学 清史 动漫 数学史 资料 诗歌 中文 全球化 法语 景观 短篇小说 自由主义 心理 女性 书 书法 语言与社会 人工智能 新经济 网络 游记 中国现当代文学 生物学 英文原著 电子 习得 通识 西方历史 程序员 社交 经管 工具 文艺 电影理论 交互设计 史学 现代性 外语学习 美术 处世 玄幻小说 编程语言 精神分析 复杂系统 随笔 戏曲 古典文学 仙侠 书信 英国文学 韩国 绘本 印度 BL漫画 设计 拉美文学 网络小说 俄国 符号学 世界历史 语言文字 翻译 经营管理 考古学 建筑设计 法国文学 比较政治 奇幻小说 杂志 色彩 音韵学 词典 图鉴 日语 写作 软件 数据分析 文学评论 原版 社会语言学 自我成长 恐怖小说 人力资源 企业管理 伦理学 收藏 日漫 传播 现代 连环画 通信 大数据 政治哲学 软件测试 电影评论 时间管理 艺术 体育 操作系统 灵修 饮食 数据结构 统计 语音学 理财 外国 近代史 软件工程 中国当代文学 科学 青春小说 管理学 文字 行走 围棋 工作 电子商务 俄国文学 传统文化 自然 少女漫画 漫画绘本 少年漫画 教科书 外国名著 物理学 运动 古籍 中国 服装 思维 新闻 价值投资 经济学 意识流 悬疑小说 前端开发 论文集 周易 日本文学 中华书局 美学 职业规划 文化史 学习 语言学 职业 中国史 汉译世界学术名著丛书 品牌 56 | 57 | 1 现象学 史学理论 建筑理论 艺术理论 个人管理 海外汉学 科学人文 儿童教育 经管 语言与社会 大学教材 文论 神秘学 民俗学 设计理论 实验语音学 电影研究 脑科学 建筑史 饮食文化 德语文学 新闻传播 比较政治 历史语言学 电影理论 国际政治 文学理论 认知科学 传播学 国学 工业设计 数学史 个人成长 俄国文学 中国古典文学 古代文学 中国现当代文学 俄罗斯文学 文艺理论 法学 社会史 符号学 思维方法 历史地理 科学史 汉学 社会理论 散文随笔 文献学 美国文学 新闻学 文学批评 艺术设计 研究 中国研究 领导力 家庭教育 中国哲学 语言文字 中国当代文学 考古学 西方哲学 经营管理 经学 语音研究 研究方法 美学 古典文学 女性文学 心灵成长 文字学 科学哲学 天文 经济史 文化史 外语学习 学术史 拉美文学 语言学习 台湾文学 专业书 电影评论 现代 城市规划 复杂系统 现当代文学 中世纪 艺术 藏传佛教 性学 认知语言学 新媒体 红学 中国现代文学 投资理财 科学 人类学 美术史 西方历史 专业相关 政治经济学 逻辑学 分析哲学 电影书 古文字 艺术史 青年漫画 音系学 古典诗词 建筑设计 语言学 中国近代史 哲学 史学 学术 书话 拉美 产品设计 文学 语音学 管理学 平面设计 机器学习 语法研究 方法论 女性主义 翻译 思想史 企业管理 中国史 戏曲 教育 政治哲学 心理学 中国古典 理论 法国文学 软件测试 哲学史 当代文学 传统文化 计算机技术 人工智能 市场营销 统计学 名著 西方 中国文学 经典 自我管理 博弈论 自我成长 英国文学 电子书 人生哲学 网络营销 马克思主义 当代艺术 社会语言学 日漫 连环画 伦理学 世界历史 交互设计 职业规划 地理 魏晋南北朝 通史 戏剧 文化研究 当代 西哲 日语学习 英文原著 项目管理 经济学 医学 佛学 中国 中国文化 建筑 计量经济学 玄幻小说 后现代 清史 政治学 古典音乐 社会心理学 德国文学 神学 音韵学 海外中国研究 现代文学 香港文学 外语 纪实文学 文学史 语文 职场小说 论文集 灵修 信息安全 教育学 文学研究 宋史 漫画绘本 化学 世界史 敏捷开发 教科书 诗歌 文化 音乐 中国漫画 中医 书法 科普 数据处理 科幻小说 传播 学习方法 文史 自然科学 古籍 成功学 前端 创新 古代汉语 文学评论 宗教 外国名著 欧洲 价值投资 金融学 禅宗 青春文学 经济管理 童年回忆 生物学 历史 思想 青春小说 技术 佛教 官场小说 近代史 电子商务 商业 心理治疗 民俗 社会科学 原版 道家 反乌托邦 科技 前端开发 人力资源 设计 动漫 人物传记 课本 武术 网页设计 欧美 法律 影评 工具书 进化论 知识 管理 软件工程 数据分析 古言 中国历史 启蒙 社会学 近代 外国文学 古代 美术 专业 明史 数学 游戏开发 会计 通识 物理学 治愈系 汉语 精神分析 晚清 散文 绘画 存在主义 中国小说 入门 写作 藏书 计算机科学 概率论 修身 思维方式 现代性 营销 科幻 景观 新经济 画册 逻辑 计算机 金融 基督教 设计模式 网络文学 摄影 英语学习 军事 诗词 数据挖掘 日本文学 历史学 编程语言 广告 方法 心理咨询 人文 传媒 传记 评论 用户体验 视觉 儿童文学 习得 基础 软件开发 手工 政治 励志 情色 外国 web开发 围棋 互联网 外国小说 午夜文库 学习 网络小说 思维 演讲 考古 古希腊 管理咨询 时间管理 技术分析 案例 民主 实用 趣味 开发 创业 旅游 教材 中文 系统 意识流 通信 经济 钢琴 纪实 战略 线性代数 英语 财经 古罗马 美食 育儿 网络 日本文化 体育 电子版 教程 两性 分析 统计 物理 品牌 创意 书画 儿童 代数 周易 财务 游记 自由主义 神话 奇幻小说 恐怖小说 现代汉语 英文 饮食 恐怖漫画 知识分子 食谱 言情 程序设计 企业 法语 大数据 随笔 悬疑小说 咨询 产品 认知 策划 软件 德国 俄罗斯 通俗 产品经理 圣经 职业 史料 百科 大师 性 印度 销售 手绘 杂书 房地产 求职 言情小说 推理小说 理财 工具 词典 操作系统 Web开发 语法 小说 搜索引擎 沟通 中华书局 服装 微积分 电影 历史小说 图画书 时尚 新闻 决策 媒体 linux 绘本 养生 收藏 植物 民族 编程 图鉴 写真 数据库 证券 魔幻 玄幻 全球化 美容 智慧 日版漫画 电子 语言 童书 信仰 组织 处世 汉译世界学术名著丛书 投资 运动 人际关系 文艺 日语 架构 日本 数学分析 仙侠 工作 女性 自然 程序员 俄国 侦探小说 数据结构 论文 语音 测试 期货 算法 禅 访谈 考研 韩国 小人书 哲理 架空历史 杂文 情感 三联书店 词汇 NLP 心理 文集 漫画 关于书的书 红楼梦 闲书 德语 城市 读书 大陆 短篇小说 文字 思考 社交 黑色幽默 书 资料 阅读 法国 革命 耽美漫画 上海 台版 BL漫画 地图 笔记 推理 少年漫画 行走 少女漫画 杂志 交易 自我完善 书信 摇滚 安全 图书馆 意大利 英国 嵌入式 概率 苏联 色彩 投机 瑞典 香港 修行 悬疑 官场 校园 少女向 惊悚 生物 奥地利 社科 探险 史诗 武侠 健康 猎奇 罗马 日本漫画 三国 奇幻 出版 黑客 自传 幻想 西班牙 幽默 日本小说 人物 二战 心灵 剧本 耽美小说 职场 轻小说 人性 民国 成功 游戏 荷兰 爱尔兰 自由 茅盾文学奖 回忆录 雅思 诗 侦探推理 西藏 现实 武侠小说 旅行 华尔街 考试 大学 好书 生活 婚姻 犯罪 捷克 人生 插画 九州 财富 现代都市 加拿大 成长 明朝 故事 80后 复杂 童话 湛庐文化 有趣 家庭 股票 讽刺 进化 短篇 英文版 清朝 战争 诗集 架空 灌篮高手 福尔摩斯 回忆 记忆 2012 C++ 灵异 动物 童年记忆 盗墓 2009 巴黎 棒球 亲子 文革 晋江 生命 2008 留学 Java 火影忍者 爱情 青春 2007 三联 2014 比利时 画 侦探 暴力 杂 茶 耽美 冒险 java 宇宙 IT 诺贝尔文学奖 2013 CS 日本推理 2011 2010 123 恋爱 小学 PHP C# 画集 SQL python 日记 JavaScript 童年 梦想 短篇集 .NET 女人 月刊 死亡 恐怖 IELTS Android 穿越 Web 佛 GRE 吸血鬼 温暖 高中 BL C UI 1 Linux 猫 iOS COMIC R 感动 少女 腐 神秘 Psychology 热血 治愈 爱 AI javascript E Comic GTD History Math Design 吃 Economics Programming LonelyPlanet Architecture Deutsch Statistics Art Python 小时候 Philosophy 写真集 A Physics ebook Linguistics textbook Finance web statistics economics art psychology English programming fiction finance architecture design Photography bl linguistics history math comic philosophy business Manga photography english Textbook 少年向 -------------------------------------------------------------------------------- /engine/log/interest_vector.txt: -------------------------------------------------------------------------------- 1 | 2 | 学习 理工 统计学 统计 学术 大学教材 3 | 计算机 计算机技术 计算机科学 设计模式 前端开发 4 | 经管 经学 经济学 经济管理 5 | 文学 诗歌 红学 午夜文库 古代文学 传记 德语文学 职场小说 俄国文学 散文 儿童文学 6 | 艺术 美学 绘画 艺术 文艺理论 7 | 历史 清史 历史学 8 | 金融 金融学 9 | 文化 语文 中国文化 文化研究 饮食文化 10 | 法学 11 | 专业书 12 | 技术分析 13 | 生物学 进化论 14 | 专业 15 | 西方 16 | 军事 17 | 连环画 18 | 日漫 新媒体 欧美 创业 实用 教程 文论 科学哲学 外语 19 | 20 | 21 | [u'', u'文学', u'经济', u'历史', u'艺术', u'', u'', u'', u'', u''] 22 | 23 | 自创用户专业领域树: 24 | 25 | { 26 | u'技术' : [u'统计学 u'设计模式', u'技术分析', u'生物学', u'计算机科学', u'计算机技术'], 27 | u'经济' : [u'经济学', u'经济管理'], 28 | u'文学' : [u'诗歌', u'红学', u'职场小说', u'古代文学', u'俄国文学', u'午夜文库', u'散文', u'德语文学'], 29 | u'艺术' : [u'绘画', u'艺术', u'美学'] , 30 | u'历史' : [u'清史', u'传记'], 31 | u'文化' : [u'语文', u'西方', u'中国文化', u'经学', u'新媒体', u'欧美', u'文化研究' ], 32 | u'金融' : [u'金融学'], 33 | u'漫画' : [], 34 | u'法学' : [u'法学'], 35 | u'学习' : [u'专业书', u'学习', u'专业'] , 36 | } 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /engine/log/mark.rank.txt: -------------------------------------------------------------------------------- 1 | nemlophics, 0.545455 2 | text, 0.539326 3 | mining, 0.533333 4 | 语用和修辞, 0.448878 5 | 计算机语言, 0.425155 6 | 普通语言学, 0.417288 7 | Modeling, 0.400000 8 | sas, 0.390935 9 | visual, 0.369863 10 | 百舌, 0.368421 11 | Chinese, 0.342857 12 | logic, 0.337621 13 | datamining, 0.332587 14 | 传记&回忆&书信&日记&年谱&评传, 0.332458 15 | 科学出版社, 0.322581 16 | 机械工业出版社, 0.315789 17 | CPU, 0.315619 18 | pdf, 0.304348 19 | 文言文, 0.303797 20 | internet, 0.273224 21 | PoliticalEconomy, 0.268638 22 | 计算复杂性, 0.267374 23 | 应用数学, 0.256410 24 | 辅导书, 0.255164 25 | 语义网, 0.250326 26 | 英语阅读, 0.248619 27 | 模电, 0.248471 28 | the, 0.242647 29 | typography, 0.241893 30 | 语义, 0.234637 31 | 上海话, 0.233350 32 | 课本&研研研, 0.230769 33 | 工程技术, 0.228571 34 | 本体论, 0.219970 35 | to, 0.217054 36 | 李刚, 0.215757 37 | 回归分析, 0.215652 38 | 理念, 0.213613 39 | PDE, 0.210773 40 | Kernel, 0.205355 41 | 计量语言学, 0.204499 42 | algebra, 0.202070 43 | pattern, 0.202056 44 | 研一, 0.200000 45 | 语义和词汇, 0.199336 46 | Bioinformatics, 0.195281 47 | 商业智能, 0.194075 48 | 网络传播, 0.192427 49 | 计算机基础, 0.192120 50 | quantitative, 0.188442 51 | groovy, 0.187354 52 | 实例, 0.185567 53 | 哲学逻辑, 0.183908 54 | [pdf], 0.181818 55 | 数学科普, 0.177251 56 | 语法化, 0.176471 57 | 各国各家,math.。, 0.173913 58 | probability, 0.168337 59 | script, 0.161156 60 | 大二, 0.156863 61 | servlet, 0.156215 62 | in, 0.153649 63 | algorithm, 0.153026 64 | 语料库语言学, 0.151899 65 | 仿真, 0.149378 66 | 算法与数据结构, 0.149236 67 | 新托福, 0.149183 68 | cs, 0.147937 69 | 首图, 0.146789 70 | javaee, 0.144280 71 | 数学哲学, 0.143344 72 | WPF, 0.140598 73 | 信息架构, 0.140427 74 | 很好, 0.140351 75 | 非线性, 0.139535 76 | 物理學, 0.138728 77 | 小學類, 0.138462 78 | iPhone开发, 0.138365 79 | Quant, 0.138304 80 | 语法理论, 0.138082 81 | 艺, 0.137931 82 | ai, 0.137038 83 | 话语分析, 0.136253 84 | 复旦, 0.134991 85 | 英语工具书, 0.134412 86 | 语用学, 0.133562 87 | 电子电路, 0.133304 88 | 德语教材, 0.132706 89 | 托福, 0.131107 90 | DataMining, 0.129275 91 | 语义学, 0.128501 92 | 语法史, 0.128114 93 | 经典著作, 0.127827 94 | data, 0.127652 95 | asp.net, 0.126659 96 | HTTP, 0.123014 97 | 数学书, 0.122899 98 | 货币战争, 0.122398 99 | 控制, 0.121076 100 | 普通物理, 0.119760 101 | mathematics, 0.118781 102 | MIT, 0.118749 103 | 句法, 0.118577 104 | c, 0.118407 105 | UE, 0.113887 106 | Textbook, 0.113406 107 | 协议, 0.112914 108 | Arduino, 0.110218 109 | Pattern, 0.109475 110 | 应用语言学, 0.107623 111 | ComputerScience, 0.107557 112 | 数据结构, 0.107103 113 | 实变函数, 0.106724 114 | jsp, 0.106099 115 | debug, 0.105469 116 | 近期, 0.105263 117 | 脚本, 0.105035 118 | 汇编语言, 0.104859 119 | 考试用书, 0.104059 120 | 复分析, 0.103276 121 | 数据结构与算法, 0.102467 122 | 逆向工程, 0.101788 123 | MATLAB, 0.101330 124 | 游戏编程, 0.100631 125 | 调试, 0.099811 126 | 常微分方程, 0.098668 127 | office, 0.098233 128 | UCD, 0.098015 129 | VBA, 0.097628 130 | 复变函数, 0.096970 131 | 系统, 0.096963 132 | 微分几何, 0.096101 133 | 汉语语法, 0.095590 134 | 教辅, 0.094969 135 | 生成语言学, 0.093567 136 | 程序设计语言, 0.093322 137 | 偏微分方程, 0.092843 138 | SOA, 0.091441 139 | 程序开发, 0.091291 140 | 句法学, 0.090909 141 | 理论物理, 0.090763 142 | 并发, 0.090202 143 | 神经网络, 0.090107 144 | EXCEL, 0.089608 145 | Testing, 0.089597 146 | web2.0, 0.089446 147 | 语料库, 0.089109 148 | compiler, 0.089093 149 | 高数, 0.087952 150 | Data-Mining, 0.087594 151 | lucene, 0.086904 152 | PM, 0.086761 153 | ACM, 0.085606 154 | 索绪尔, 0.084980 155 | matlab, 0.084293 156 | 硬件, 0.083183 157 | 语言学/习, 0.082645 158 | 控制论, 0.081479 159 | 语言史, 0.081180 160 | OpenCV, 0.081023 161 | 计算理论, 0.080520 162 | language, 0.080294 163 | computer, 0.079622 164 | 信息设计, 0.078535 165 | 经济管理, 0.078324 166 | 图书, 0.077784 167 | interview, 0.077776 168 | 設計, 0.077674 169 | 语法研究, 0.077364 170 | c语言, 0.077333 171 | 英语词汇, 0.077130 172 | 并行, 0.076656 173 | Haskell, 0.076344 174 | 软件设计, 0.075787 175 | 传统, 0.075743 176 | 设计心理学, 0.075730 177 | visualization, 0.074986 178 | Investment, 0.074572 179 | Web, 0.074358 180 | 数学物理, 0.072443 181 | 智能, 0.072230 182 | TeX, 0.071964 183 | 正则表达式, 0.071926 184 | 文字, 0.071914 185 | 经济金融, 0.071872 186 | 单片机, 0.071735 187 | 數學, 0.071429 188 | 口语, 0.071234 189 | FP, 0.071116 190 | Analysis, 0.070828 191 | 多线程, 0.070801 192 | 结构主义, 0.070453 193 | iphone, 0.068893 194 | Psycholinguistics, 0.068702 195 | 通俗数学名著译丛, 0.067574 196 | 马克思, 0.066802 197 | 概率论7, 0.066667 198 | Theory, 0.066315 199 | 专业书籍, 0.065985 200 | 电子, 0.065951 201 | Algorithm, 0.065436 202 | 趣味数学, 0.065393 203 | physics, 0.065067 204 | MongoDB, 0.064757 205 | Lisp, 0.064444 206 | 测试, 0.064411 207 | .Net, 0.064067 208 | The, 0.062902 209 | UI, 0.062461 210 | 数理逻辑, 0.062355 211 | 可用性, 0.062072 212 | 金融数学, 0.061414 213 | 算法, 0.061105 214 | management, 0.060994 215 | Matlab, 0.060785 216 | 古文字, 0.060490 217 | 单词, 0.060343 218 | 服务器, 0.060048 219 | Springer, 0.060043 220 | 风险管理, 0.059953 221 | Mobile, 0.059801 222 | C, 0.059769 223 | 数据仓库, 0.059539 224 | finance, 0.059294 225 | 交互, 0.059168 226 | 数学建模, 0.058755 227 | complexity, 0.057663 228 | 概率, 0.057568 229 | 香格里拉, 0.057223 230 | 指南, 0.056595 231 | 城市设计, 0.056510 232 | 词汇学, 0.056290 233 | Algorithms, 0.056107 234 | 泛函分析, 0.056074 235 | 软件工程, 0.055439 236 | 3D, 0.055363 237 | Clojure, 0.055307 238 | java, 0.055155 239 | web开发, 0.054916 240 | HTML, 0.054274 241 | 操盘, 0.054218 242 | framework, 0.054131 243 | Hadoop, 0.054057 244 | 编程艺术, 0.053718 245 | 音韵, 0.053296 246 | 经济学原理, 0.053108 247 | 小布的数理学, 0.053097 248 | 资本主义, 0.052955 249 | GIS, 0.052834 250 | Server, 0.052701 251 | 并行计算, 0.052665 252 | 语用, 0.052632 253 | linguistics, 0.052216 254 | 曼昆, 0.051904 255 | 启功, 0.051854 256 | 建模, 0.051504 257 | 函数式编程, 0.050978 258 | 政治经济学, 0.050900 259 | 设计模式, 0.050432 260 | 概率论, 0.050179 261 | 大学教材, 0.049799 262 | 语言文字, 0.049715 263 | iBT, 0.049611 264 | C语言, 0.049373 265 | 分析, 0.048997 266 | 语言哲学, 0.048894 267 | 组合数学, 0.048730 268 | textbook, 0.048425 269 | 抽象代数, 0.048008 270 | TOEFL, 0.047511 271 | 软件开发, 0.047489 272 | Programming, 0.047384 273 | 几何, 0.047131 274 | programming, 0.046828 275 | 图形学, 0.046803 276 | html5, 0.046441 277 | HTML5, 0.046054 278 | AI, 0.045989 279 | 程序员的思维修炼, 0.045764 280 | 复杂网络, 0.045714 281 | 科学家, 0.045675 282 | 汉字, 0.045622 283 | 大学课本, 0.045580 284 | j2ee, 0.045285 285 | 数据挖掘, 0.044724 286 | excel, 0.044552 287 | Statistics, 0.044499 288 | Mathematics, 0.044304 289 | 汉语, 0.044071 290 | c++, 0.043946 291 | dictionary, 0.043438 292 | 本科教材, 0.043066 293 | 计算机图形学, 0.042837 294 | ebook, 0.042735 295 | 代数, 0.042697 296 | 编程, 0.042158 297 | 陈鬼之书, 0.042130 298 | R, 0.042056 299 | design, 0.041627 300 | 计算机, 0.041522 301 | 演化, 0.041309 302 | Math, 0.041249 303 | 分布式, 0.040818 304 | 编程语言, 0.040509 305 | 考试, 0.040076 306 | 新东方, 0.039737 307 | R语言, 0.039419 308 | SAS, 0.039377 309 | 股市, 0.039282 310 | 计算机科学, 0.039199 311 | 体系结构, 0.038739 312 | 软件, 0.038359 313 | 2010, 0.038225 314 | shell, 0.038166 315 | 优化, 0.038114 316 | 计算机技术, 0.038046 317 | 英语专业, 0.037887 318 | 语, 0.037736 319 | 音韻學, 0.037354 320 | 字体, 0.036584 321 | math, 0.036269 322 | 用户体验, 0.036124 323 | TCP/IP, 0.035979 324 | 线性代数, 0.035562 325 | 基础理论, 0.035494 326 | 程序设计, 0.035460 327 | 现代汉语, 0.035276 328 | Windows, 0.035148 329 | Linguistics, 0.034944 330 | 网页, 0.034816 331 | web, 0.034536 332 | statistics, 0.034265 333 | 金融工程, 0.034087 334 | 专业, 0.034068 335 | 视觉, 0.033976 336 | 开发, 0.033919 337 | Google, 0.033696 338 | 数据, 0.033628 339 | NLP, 0.033545 340 | 物理学, 0.033317 341 | 专业课, 0.033218 342 | 网络, 0.033031 343 | 人工智能, 0.032392 344 | C/C++, 0.032097 345 | 美國, 0.031906 346 | 概率统计, 0.031817 347 | ajax, 0.031817 348 | 經濟學, 0.031529 349 | Java, 0.031344 350 | Ruby, 0.031323 351 | 英语原版, 0.030960 352 | 云计算, 0.030723 353 | Evolution, 0.030612 354 | 语法, 0.030584 355 | 心灵哲学, 0.030575 356 | 微软, 0.030324 357 | 德语学习, 0.030214 358 | quant, 0.030134 359 | 技术, 0.030009 360 | UML, 0.029463 361 | 社会语言学, 0.029340 362 | 趣味, 0.029224 363 | 小学, 0.029211 364 | 计算语言学和语料库, 0.029197 365 | 逻辑, 0.029053 366 | 编译原理, 0.028957 367 | 趋势, 0.028847 368 | ruby, 0.028538 369 | 教科书, 0.028316 370 | 外语学习, 0.028252 371 | 计算机视觉, 0.027969 372 | 字体设计, 0.027807 373 | 我有的书, 0.027586 374 | 图像处理, 0.027455 375 | 宏观经济学, 0.027343 376 | 语言学, 0.027309 377 | 混沌, 0.027199 378 | 理工, 0.026810 379 | 敏捷, 0.026474 380 | 德语, 0.026465 381 | 古代汉语, 0.026241 382 | 分析哲学, 0.026048 383 | 知识管理, 0.025995 384 | 音系学, 0.025532 385 | 大数据, 0.025397 386 | 统计, 0.025273 387 | 类型学, 0.025267 388 | Perl, 0.025261 389 | 词汇, 0.025232 390 | 教育技术, 0.025228 391 | C++, 0.024622 392 | agile, 0.024420 393 | 资料, 0.024296 394 | 日语学习, 0.024265 395 | 文字学, 0.024063 396 | 财务自由, 0.024015 397 | 藝術, 0.023787 398 | 软件测试, 0.023682 399 | 高中, 0.023617 400 | 经典教材, 0.023478 401 | 技术分析, 0.023260 402 | 语音研究, 0.023156 403 | C#, 0.022804 404 | 前端开发, 0.022596 405 | 计算机系统, 0.022578 406 | 交互设计, 0.022553 407 | 插画, 0.022470 408 | 计算机类, 0.022422 409 | 逻辑学, 0.022356 410 | 近世代数, 0.022263 411 | 微积分, 0.022147 412 | 敏捷开发, 0.022130 413 | GRE, 0.022074 414 | 图鉴, 0.022005 415 | javascript, 0.021953 416 | 策划, 0.021758 417 | 信息检索, 0.021496 418 | 教材, 0.021464 419 | 网页设计, 0.021446 420 | 投资学, 0.021410 421 | 服装, 0.021325 422 | 方言, 0.020942 423 | 音韵学, 0.020919 424 | 想读, 0.020776 425 | 计算语言学, 0.020733 426 | 语音学, 0.020721 427 | 数学, 0.020628 428 | 认知科学, 0.020530 429 | architecture, 0.020463 430 | 数据分析, 0.020358 431 | 符号学, 0.020227 432 | 价值投资, 0.020099 433 | 财经(经济+金融+商业), 0.019719 434 | 英文版, 0.019602 435 | 实验语音学, 0.019595 436 | 语言, 0.019387 437 | 模式, 0.019155 438 | 历史语言学, 0.018885 439 | 项目管理, 0.018876 440 | English, 0.018857 441 | 经典名著, 0.018746 442 | 考研, 0.018549 443 | 内核, 0.018450 444 | 数学史, 0.018401 445 | 搜索引擎, 0.018034 446 | 建筑设计, 0.017797 447 | 马克思主义, 0.017418 448 | 语言与社会, 0.017204 449 | 财务, 0.017190 450 | 西方, 0.016941 451 | .NET, 0.016925 452 | 学习, 0.016685 453 | IT, 0.016671 454 | 平面设计, 0.016611 455 | O'Reilly, 0.016521 456 | 房地产, 0.016515 457 | economics, 0.016398 458 | 程序, 0.016379 459 | 通信, 0.016192 460 | 研究, 0.016121 461 | CS, 0.016085 462 | 工具书, 0.016045 463 | 词典, 0.015871 464 | Python, 0.015844 465 | 投资理财, 0.015660 466 | 博弈论, 0.015414 467 | JavaScript, 0.015231 468 | Oracle, 0.015142 469 | linux, 0.015083 470 | 游戏开发, 0.014575 471 | 学术, 0.014566 472 | iOS, 0.014533 473 | 英语, 0.014416 474 | 2014, 0.014374 475 | 电路, 0.013980 476 | 阅读, 0.013872 477 | 传播, 0.013721 478 | 设计理论, 0.013451 479 | kernel, 0.013363 480 | 科技, 0.013342 481 | 学术史, 0.013136 482 | Design, 0.013102 483 | 拓扑学, 0.012974 484 | OpenGL, 0.012972 485 | 汇编, 0.012606 486 | 系统科学, 0.012458 487 | UX, 0.012155 488 | 统计学, 0.011631 489 | 高等数学, 0.011490 490 | 设计, 0.011427 491 | 入门, 0.011405 492 | 中国研究, 0.011284 493 | 数据处理, 0.011184 494 | 复杂性, 0.011073 495 | 日语, 0.010909 496 | python, 0.010896 497 | hadoop, 0.010770 498 | 互联网, 0.010676 499 | 科学人文, 0.010648 500 | 机器学习, 0.010598 501 | 已购, 0.010570 502 | 计算机体系结构, 0.010557 503 | 科学哲学, 0.010368 504 | 古代, 0.010333 505 | 歷史, 0.010272 506 | UNIX, 0.010148 507 | Probability, 0.009610 508 | 交易, 0.009538 509 | 神经科学, 0.009492 510 | 物理, 0.009352 511 | 嵌入式, 0.009138 512 | philosophy, 0.009026 513 | 面试, 0.008969 514 | 模式识别, 0.008928 515 | 投机, 0.008908 516 | Android, 0.008863 517 | 理财, 0.008340 518 | Linux, 0.008339 519 | 股票, 0.008176 520 | 金融学, 0.008160 521 | 架构, 0.008041 522 | 书法, 0.007923 523 | 金融, 0.007916 524 | 语音, 0.007909 525 | 教程, 0.007816 526 | 课本, 0.007791 527 | 经典, 0.007785 528 | 科普, 0.007687 529 | 新概念, 0.007680 530 | 英语学习, 0.007669 531 | 投资, 0.007645 532 | 科学, 0.007558 533 | 信息, 0.007430 534 | 建筑理论, 0.006814 535 | 操作系统, 0.006697 536 | 医学, 0.006583 537 | 人文, 0.006189 538 | 笔记, 0.006175 539 | 经济, 0.006135 540 | 科研, 0.005760 541 | 论文集, 0.005594 542 | 自然科学, 0.005530 543 | 数据库, 0.005422 544 | 经济学, 0.005394 545 | 游戏, 0.004997 546 | 方法论, 0.004924 547 | 百科, 0.004916 548 | 工业设计, 0.004896 549 | 建筑, 0.004865 550 | 管理学, 0.004823 551 | 罗兰·巴特, 0.004642 552 | 现象学, 0.004623 553 | 思维, 0.004074 554 | 理论, 0.003934 555 | 文集, 0.003886 556 | 脑科学, 0.003783 557 | 英文, 0.003674 558 | 語言學, 0.003375 559 | 电子书, 0.003183 560 | 程序员, 0.003181 561 | 商业, 0.003091 562 | Economics, 0.002951 563 | 美学, 0.002947 564 | 翻译, 0.002862 565 | 城市, 0.002857 566 | 经济史, 0.002833 567 | 营销, 0.002553 568 | 哲学, 0.002396 569 | 产品设计, 0.002325 570 | 艺术, 0.002289 571 | 管理, 0.002247 572 | 证券, 0.002193 573 | 数学分析, 0.002037 574 | 英文原版, 0.002006 575 | 文化, 0.001901 576 | 时间管理, 0.001814 577 | 教育, 0.001745 578 | 心理学, 0.001297 579 | 画册, 0.001215 580 | 国学, 0.001166 581 | 思想, 0.001056 582 | 德国, 0.000986 583 | 童话, 0.000789 584 | 传记, 0.000684 585 | 旅行, 0.000676 586 | 文化研究, 0.000651 587 | 历史, 0.000496 588 | 美国, 0.000418 589 | 社会学, 0.000371 590 | 社会, 0.000278 591 | 中国, 0.000261 592 | 日本, 0.000139 593 | 漫画, 0.000119 594 | -------------------------------------------------------------------------------- /engine/log/tag.domain-classify.txt: -------------------------------------------------------------------------------- 1 | 计算机 1.000000 2 | 计算机网络 0.704870 3 | 技术 0.692213 4 | 软件 0.678064 5 | 通信 0.674961 6 | 计算机类 0.670678 7 | 专业 0.663678 8 | 自动化 0.656563 9 | 概率统计 0.655371 10 | 计算机技术 0.653507 11 | 软件工程 0.649255 12 | 图像处理 0.648032 13 | 人工智能 0.646044 14 | 工程 0.641029 15 | 计算 0.630038 16 | 信息安全 0.626455 17 | 大数据 0.625259 18 | 模式识别 0.623427 19 | 人机交互 0.621137 20 | 计算机基础 0.619600 21 | 计算机图形学 0.617151 22 | 数据挖掘 0.614727 23 | 数据处理 0.613618 24 | 数据分析 0.611278 25 | 计算机视觉 0.610550 26 | 统计学 0.609966 27 | 物联网 0.607553 28 | 程序设计 0.602944 29 | 信号处理 0.599185 30 | 嵌入式系统 0.597613 31 | 自然语言处理 0.596118 32 | 电子 0.594575 33 | 程序开发 0.594532 34 | 生物信息学 0.592140 35 | 数学建模 0.591546 36 | 计算机体系结构 0.589958 37 | 科学计算 0.587061 38 | 电子商务 0.586157 39 | Web设计 0.583103 40 | 信息技术 0.581976 41 | ERP 0.581432 42 | 软件测试 0.581288 43 | Web开发 0.580727 44 | 系统 0.579756 45 | 数据库 0.578564 46 | 云计算 0.578321 47 | 复杂网络 0.577588 48 | 机器学习 0.576585 49 | 网络 0.576400 50 | 编译原理 0.574591 51 | 计算机科学 0.571875 52 | 信息检索 0.571237 53 | 网络编程 0.570756 54 | 信息架构 0.570678 55 | R语言 0.570257 56 | 计算语言学 0.569457 57 | 数字信号处理 0.566031 58 | 软件开发 0.564956 59 | 信息 0.564207 60 | 计算机科学技术 0.564046 61 | 仿真 0.563441 62 | C语言 0.562337 63 | 电子技术 0.561932 64 | 系统工程 0.561449 65 | 软件设计 0.559313 66 | 运筹学 0.559063 67 | 计算机系统 0.558804 68 | 计算机科学与技术 0.558657 69 | 编程 0.558081 70 | 生物信息 0.557969 71 | 金融工程 0.556270 72 | 电子信息 0.554866 73 | 图形学 0.553609 74 | 编程技术 0.552360 75 | 分布式系统 0.551561 76 | 前端开发 0.550718 77 | 网络技术 0.548905 78 | 数值分析 0.547974 79 | 开发 0.547894 80 | 设计 0.547629 81 | 交互设计 0.546851 82 | 用户研究 0.546826 83 | 数据结构与算法 0.546559 84 | 统计 0.545631 85 | 数字图像处理 0.545361 86 | 开发技术 0.544109 87 | 系统分析 0.543470 88 | 工程技术 0.542252 89 | 信息设计 0.541995 90 | Web标准 0.541736 91 | Windows编程 0.541379 92 | 自动控制 0.537747 93 | 信息管理 0.537737 94 | Web前端 0.535302 95 | 数学和计算机 0.534047 96 | 商业智能 0.532727 97 | 数据可视化 0.532591 98 | 并行计算 0.530327 99 | 科技 0.529532 100 | 硬件 0.529471 101 | 计算机理论 0.528293 102 | 信号与系统 0.527690 103 | 组成原理 0.525383 104 | 实验 0.523716 105 | 优化 0.523374 106 | 数据仓库 0.523224 107 | 建模 0.522453 108 | 程序员 0.522270 109 | 数理统计 0.521842 110 | 复杂系统 0.521631 111 | 数据结构 0.520090 112 | 机器视觉 0.519300 113 | 计算机安全 0.518556 114 | 汇编语言 0.518371 115 | 自动化测试 0.517828 116 | 测试 0.517395 117 | 项目管理 0.512489 118 | 网络安全 0.511985 119 | 互联网 0.511313 120 | 可视化 0.511087 121 | 算法 0.511044 122 | iPhone开发 0.510794 123 | 神经网络 0.510764 124 | 体系结构 0.510479 125 | 计算机组成原理 0.510425 126 | 电子学 0.510185 127 | 计算数学 0.509808 128 | 电气工程 0.508310 129 | 移动互联网 0.508295 130 | 多元统计 0.507774 131 | 操作系统 0.507547 132 | 系统分析师 0.507183 133 | 统计分析 0.505722 134 | 电脑 0.504750 135 | 性能优化 0.504565 136 | 系统架构 0.504399 137 | 单片机 0.503486 138 | 信息论 0.503466 139 | 程序 0.503435 140 | 系统科学 0.502524 141 | 系统设计 0.501918 142 | 架构设计 0.501373 143 | 用户体验 0.500698 144 | Web前端开发 0.499520 145 | 系统思维 0.498764 146 | 数据 0.496296 147 | 软件架构 0.495909 148 | 编程开发 0.495835 149 | 密码学 0.493812 150 | 运维 0.493185 151 | 多媒体 0.492141 152 | 游戏编程 0.490507 153 | 社会网络分析 0.490012 154 | 嵌入式 0.489969 155 | 数字化 0.489967 156 | 无线通信 0.489426 157 | 系统管理 0.488949 158 | 控制工程 0.488280 159 | 并行程序设计 0.488170 160 | 时间序列分析 0.487913 161 | 语音识别 0.487239 162 | 面向对象 0.485351 163 | 编程思想 0.484870 164 | 交互 0.483841 165 | 产品经理 0.483651 166 | 敏捷开发 0.483638 167 | 计算机与信息 0.482872 168 | 供应链管理 0.482606 169 | 功能语言学 0.481900 170 | 网站优化 0.481296 171 | 微电子 0.481271 172 | 无线电 0.481243 173 | 实验语音学 0.479285 174 | 电子工程 0.477543 175 | 控制论 0.477186 176 | 生物技术 0.475406 177 | 软件开发方法 0.473891 178 | 语料库 0.472740 179 | 计算机语言 0.472199 180 | 计算理论 0.471569 181 | 话语分析 0.467624 182 | 设计模式 0.466827 183 | 程序设计语言 0.465982 184 | 产品开发 0.465789 185 | 空间分析 0.465661 186 | 搜索 0.465311 187 | 信息学 0.464229 188 | 语料库语言学 0.464183 189 | 算法与数据结构 0.462241 190 | 网页设计 0.460878 191 | 移动开发 0.458000 192 | 脚本编程 0.457174 193 | 调试 0.456826 194 | 界面设计 0.455416 195 | 性能 0.455211 196 | 网页制作 0.454253 197 | 系统思考 0.454136 198 | 框架 0.449334 199 | 编程语言 0.447400 200 | 架构 0.445328 201 | 手机开发 0.445121 202 | 搜索引擎 0.445071 203 | 遥感技术 0.443299 204 | 产品设计 0.442948 205 | 线性代数 0.441200 206 | 图形 0.437732 207 | 移动 0.436533 208 | 存储 0.435769 209 | 数学分析 0.434178 210 | 分布式计算 0.432894 211 | 金融技术 0.430212 212 | 搜索引擎优化 0.429997 213 | 网站设计 0.428632 214 | 互联网思维 0.427143 215 | 遥感 0.425545 216 | 虚拟化 0.423087 217 | 虚拟现实 0.421572 218 | 版式设计 0.420399 219 | 数字电路 0.417692 220 | 网站建设 0.417514 221 | 遗传算法 0.417078 222 | 图论 0.416966 223 | 小波分析 0.416682 224 | 多线程 0.416486 225 | 代码 0.416431 226 | 硬件设计 0.415633 227 | 服务器 0.414625 228 | 电子电路 0.413593 229 | 信息化 0.412480 230 | 复杂性科学 0.411104 231 | 系统论 0.410405 232 | 计算复杂性 0.410280 233 | 需求分析 0.409231 234 | 网站分析 0.408436 235 | 生成语言学 0.408045 236 | 数学模型 0.407875 237 | 逻辑学 0.407756 238 | IT管理 0.407006 239 | 系统结构 0.406646 240 | 概率论 0.406402 241 | 推荐系统 0.405756 242 | 网络协议 0.405565 243 | 逻辑 0.403525 244 | 供应链 0.402703 245 | 工作流 0.401495 246 | 软件需求 0.400797 247 | 最优化 0.399676 248 | 数值计算 0.397067 249 | 用户界面 0.393886 250 | 半导体 0.393335 251 | 机器人 0.392250 252 | 虚拟机 0.391663 253 | 网页 0.391520 254 | 训练 0.390526 255 | 正则表达式 0.390507 256 | 加密解密 0.389025 257 | 语义网 0.387520 258 | 网站 0.385386 259 | 游戏开发 0.385128 260 | 并发 0.384526 261 | 设计书籍 0.382987 262 | 逆向工程 0.382654 263 | 程序语言 0.382281 264 | 编译器 0.378871 265 | 驱动 0.378010 266 | 网站运营 0.377444 267 | 并行 0.377006 268 | web开发 0.375707 269 | 电路分析 0.375443 270 | 设计基础 0.375075 271 | 微软 0.373320 272 | 电信 0.369536 273 | 密码 0.366712 274 | 图像 0.366432 275 | 自然语言 0.364431 276 | 社会化网络 0.363102 277 | 数理逻辑 0.363072 278 | 集体智慧 0.361838 279 | 信号 0.361531 280 | 编码 0.360821 281 | 内核 0.359717 282 | 时间序列 0.356755 283 | 开源 0.356459 284 | 重构 0.354478 285 | 电磁学 0.350907 286 | 生成语法 0.345362 287 | 界面 0.345290 288 | 拓扑学 0.344131 289 | 黑客 0.343011 290 | 分形 0.340007 291 | web技术 0.338819 292 | 回归分析 0.337133 293 | 硅谷 0.333793 294 | 智能 0.332785 295 | 技术分析 0.332708 296 | 硬件编程 0.332531 297 | 动态语言 0.332180 298 | 版本控制 0.331631 299 | 编辑器 0.328171 300 | 电路 0.327641 301 | 非线性 0.325939 302 | 计算机文化 0.324682 303 | 开源软件 0.319327 304 | 思科 0.319017 305 | 电商 0.318763 306 | c语言 0.318256 307 | 函数式编程 0.311589 308 | 协议 0.308180 309 | 华为 0.305911 310 | 前端技术 0.301379 311 | -------------------------------------------------------------------------------- /engine/log/tags.author.txt: -------------------------------------------------------------------------------- 1 | 天树征丸 安達充 唐家三少 王尔德 沈从文 漫友 北条司 海德格尔 高屋奈月 狗狗 萨特 集英社 田中芳树 西尾維新 李泽厚 梁实秋 桂正和 京极夏彦 青山刚昌 老舍 蒋勋 卡耐基 北京 史铁生 那多 莫泊桑 吉住涉 SAS 严歌苓 木原音瀬 米兰·昆德拉 米兰・昆德拉 弗洛伊德 吉原由起 托尔斯泰 富坚义博 H 苏童 李碧華 仲村佳樹 巴金 猫腻 矢泽爱 九把刀 海岩 荣格 高阳 莎士比亚 江南 古风 亦舒 胡适 臼井仪人 房龙 仲村佳树 张立宪 高桥留美子 罗素 希腊 黑塞 尼采 渡边淳一 马克·吐温 由貴香織里 机器猫 神尾葉子 杨红樱 商务印书馆 阿加莎·克里斯蒂 衛斯理 clamp 相原实贵 狄更斯 山田ユギ 村上春樹 巴尔扎克 朱光潜 刘墉 茨威格 鹿乃しうこ 合誌 赫尔曼·黑塞 绫辻行人 林语堂 神尾叶子 劳伦斯·布洛克 钱锺书 泰戈尔 金庸 尾田栄一郎 玛格丽特·杜拉斯 岸本齊史 手塚治虫 荒木飞吕彦 矢沢あい 韩寒 明清 蔡骏 高橋留美子 井上雄彥 三島由紀夫 井上雄彦 乙一 阿根廷 福本伸行 傅雷 韦伯 叔本华 丁丁 梁启超 よしながふみ 柏杨 加缪 鸟山明 乔治·奥威尔 林徽因 季羡林 卡尔维诺 南派三叔 东野圭吾 玛格丽特・杜拉斯 鳥山明 费孝通 古灵 倪匡 杨绛 岸本齐史 藤子・F・不二雄 唐诗 几米 方言 李碧华 埃勒里·奎因 冨樫義博 張愛玲 马克思 横沟正史 菲茨杰拉德 大仲马 村上春树 王安忆 陈寅恪 周国平 福柯 藤沢亨 三毛 克里希那穆提 郎咸平 钱钟书 張小嫻 卢梭 陈某 古谷实 张爱玲 董桥 卫斯理 西尾维新 毛姆 陀思妥耶夫斯基 易中天 鲁迅 蔡智恒 矢澤愛 安妮宝贝 董橋 社会 森村诚一 雨果 许斐刚 安徒生 王朔 饶雪漫 野村美月 汪曾祺 陈丹燕 古龙 秦文君 丰子恺 贾平凹 李敖 沧月 埃及 三岛由纪夫 渡濑悠宇 卡夫卡 中村春菊 伊藤润二 歌德 東野圭吾 臼井儀人 虹影 德鲁克 英文原版 张小娴 浦泽直树 温瑞安 CLAMP 简·奥斯丁 山本小鉄子 梁羽生 老子 阿西莫夫 上海古籍出版社 齐藤千穗 浦沢直樹 南怀瑾 人民文学出版社 古谷實 王力 儒勒·凡尔纳 杜拉斯 手冢治虫 周作人 爱因斯坦 蒋介石 寄秋 柯南道尔 余华 斯蒂芬·金 川端康成 吉永史 幾米 郭敬明 新条真由 莫言 大場つぐみ 伊藤潤二 钱穆 Mathematics 毛泽东 席绢 夏目漱石 读库 大前研一 渡瀬悠宇 武内直子 江户川乱步 安达充 王小波 台湾 约翰·狄克森·卡尔 尾田荣一郎 空知英秋 京極夏彥 曹雪芹 徐志摩 蔡澜 曾国藩 琼瑶 北大 海明威 木原音濑 岛田庄司 J.K.罗琳 康德 柏拉图 小畑健 美国 古典 荒川弘 由贵香织里 百家讲坛 庄子 凡尔纳 王阳明 维特根斯坦 岸本斉史 郑渊洁 蔡志忠 余秋雨 风弄 CFA 百合 毕淑敏 末次由紀 埃尔热 黑格尔 O'Reilly 敦煌 图 -------------------------------------------------------------------------------- /engine/log/tags.start-jieba.txt: -------------------------------------------------------------------------------- 1 | BL小说 1 2 | 修行 1 3 | 诗 1 4 | 励志 1 5 | 美术 1 6 | 古典诗词 1 7 | 进化论 1 8 | 民国 1 9 | 探险 1 10 | 程序员 1 11 | 情感 1 12 | 咨询 1 13 | 通俗 1 14 | 茅盾文学奖 1 15 | 灵异 1 16 | 美國 1 17 | 三国 1 18 | AgathaChristie 1 19 | 符号学 1 20 | 财经 1 21 | 电影 1 22 | 通信 1 23 | 史学 1 24 | 数据处理 1 25 | 耽美向 1 26 | 历史小说 1 27 | 漫画(少女) 1 28 | 英国文学 1 29 | 前端 1 30 | 品牌 1 31 | 儿童文学 1 32 | 青春小说 1 33 | 盗墓 1 34 | 历史语言学 1 35 | 生物学 1 36 | 社会派 1 37 | 城市规划 1 38 | 文字学 1 39 | 电子商务 1 40 | 时间管理 1 41 | 书话 1 42 | 西藏 1 43 | 艺术史 1 44 | 意大利 1 45 | math 1 46 | 藏传佛教 1 47 | 青年漫画 1 48 | 輕小說 1 49 | 治愈 1 50 | 近代史 1 51 | 政治哲学 1 52 | 史诗 1 53 | 革命 1 54 | 晚清 1 55 | 德语 1 56 | 职场小说 1 57 | 处世 1 58 | design 1 59 | 火影忍者 1 60 | 代数 1 61 | 音韵学 1 62 | 日积月累--我的藏书 1 63 | 成功学 1 64 | 寫真 1 65 | 家庭教育 1 66 | 技术 1 67 | 少女漫畫 1 68 | 童话 1 69 | 俄国 1 70 | 中国 1 71 | 设计理论 1 72 | 金融 1 73 | 现代性 1 74 | 美术史 1 75 | 摄影 1 76 | 教程 1 77 | 国际政治 1 78 | 我看你洗澡 1 79 | 民主 1 80 | 德国文学 1 81 | 清朝 1 82 | GRE 1 83 | 记忆 1 84 | 文学研究 1 85 | English 1 86 | 当代 1 87 | 腐漫 1 88 | 回忆 1 89 | 法语 1 90 | 纪实 1 91 | 新闻学 1 92 | web开发 1 93 | 新闻 1 94 | economics 1 95 | 捷克 1 96 | 个人成长 1 97 | 中国漫画 1 98 | 灵修 1 99 | 印度 1 100 | 中医 1 101 | 产品 1 102 | 百科 1 103 | 史学理论 1 104 | Photography 1 105 | 心灵 1 106 | 中国古典文学 1 107 | 分析 1 108 | 诗集 1 109 | 搞笑 1 110 | 人力资源 1 111 | 佛教 1 112 | 决策 1 113 | 经管 1 114 | 月刊 1 115 | 數學 1 116 | 脑科学 1 117 | 欧洲 1 118 | 文学批评 1 119 | 创新 1 120 | 犯罪 1 121 | 民俗 1 122 | 工具书 1 123 | 计量经济学 1 124 | 师太 1 125 | 穿越 1 126 | 政治学 1 127 | 神尾葉子(神尾叶子) 1 128 | PHOTOBOOK 1 129 | 神秘 1 130 | 人生哲学 1 131 | 短篇 1 132 | 音系学 1 133 | 日语学习 1 134 | 其他 1 135 | 投机 1 136 | 两性 1 137 | 科幻 1 138 | 西哲 1 139 | 宇宙 1 140 | 腐 1 141 | 修身 1 142 | 电影评论 1 143 | 读书 1 144 | 愛情 1 145 | 科普 1 146 | 逻辑 1 147 | 日本少女漫畫 1 148 | 交互设计 1 149 | 会计 1 150 | 推理小说 1 151 | 言情小说 1 152 | 软件工程 1 153 | 通史 1 154 | 语音 1 155 | 访谈 1 156 | 软件 1 157 | 清史 1 158 | 晋江 1 159 | history 1 160 | 日语 1 161 | 个人管理 1 162 | 侦探推理 1 163 | JavaScript 1 164 | 在路上 1 165 | 青年向 1 166 | 藤泽亨 1 167 | 现代汉语 1 168 | 中世纪 1 169 | 德国 1 170 | 新东方 1 171 | 财务 1 172 | 论文集 1 173 | 美国文学 1 174 | 计算机 1 175 | 绘本 1 176 | 少女漫 1 177 | 职业规划 1 178 | 温暖 1 179 | 1 1 180 | 人际关系 1 181 | 理财 1 182 | ❤少女漫乙女心❤ 1 183 | 现代文学 1 184 | 散文随笔 1 185 | photography 1 186 | A 1 187 | 传播学 1 188 | 进化 1 189 | BLコミック 1 190 | 经学 1 191 | 比利时 1 192 | philosophy 1 193 | 校园 1 194 | 嵌入式 1 195 | 大学 1 196 | 生活·读书·新知三联书店 1 197 | 心灵成长 1 198 | 人类学 1 199 | 世界史 1 200 | 日记 1 201 | 语言文字 1 202 | 大数据 1 203 | 文化研究 1 204 | 乙女心 1 205 | 社科 1 206 | 城市 1 207 | 散文 1 208 | 福尔摩斯 1 209 | 天闻角川 1 210 | 现代 1 211 | 123 1 212 | 评论 1 213 | 测试 1 214 | Linux 1 215 | 机器学习 1 216 | 日本小说 1 217 | 英文原著 1 218 | 产品经理 1 219 | 传统文化 1 220 | 产品设计 1 221 | 入门 1 222 | 恐怖小说 1 223 | 汉译世界学术名著丛书 1 224 | 小学 1 225 | 自然 1 226 | 社会理论 1 227 | 文集 1 228 | <合誌> 1 229 | 自我完善 1 230 | 数据挖掘 1 231 | 方言与民族语 1 232 | 留学 1 233 | 灌篮高手 1 234 | 服装 1 235 | 女人 1 236 | 架构 1 237 | 科技 1 238 | 文学史 1 239 | 人文 1 240 | 销售 1 241 | 外语 1 242 | 前端开发 1 243 | 茶 1 244 | 2014 1 245 | 2011 1 246 | 2010 1 247 | 日系推理 1 248 | 技术分析 1 249 | 旅行 1 250 | finance 1 251 | 基漫 1 252 | python 1 253 | 管理学 1 254 | 语法 1 255 | 艺术设计 1 256 | 歷史 1 257 | 法学 1 258 | 架空历史 1 259 | 宗教 1 260 | 词汇 1 261 | 香港文学 1 262 | 攝影 1 263 | 媒体 1 264 | bl小说 1 265 | 人物传记 1 266 | 实用 1 267 | 艺术理论 1 268 | 汉语 1 269 | 奥地利 1 270 | 教育 1 271 | 香港文學 1 272 | Statistics 1 273 | 魔幻 1 274 | 创业 1 275 | 儿童教育 1 276 | 小时候 1 277 | 道家 1 278 | 策划 1 279 | 海外中国研究 1 280 | 设计模式 1 281 | 耽美小说 1 282 | comic 1 283 | 80后 1 284 | NLP 1 285 | psychology 1 286 | 香港 1 287 | 漫畫 1 288 | 育儿 1 289 | 社会心理学 1 290 | 历史地理 1 291 | 人生 1 292 | 科幻小说 1 293 | 欧美推理 1 294 | 官场小说 1 295 | 二战 1 296 | 编程 1 297 | 亲子 1 298 | 计算机科学 1 299 | 当代艺术 1 300 | 摇滚 1 301 | 马克思主义 1 302 | 学习 1 303 | 动漫 1 304 | 侦探 1 305 | 国学 1 306 | Architecture 1 307 | 已购 1 308 | 传播 1 309 | 中国研究 1 310 | 短篇小说 1 311 | 日系寫真 1 312 | 台湾言情 1 313 | 思维 1 314 | PHP 1 315 | 编程语言 1 316 | 出版 1 317 | programming 1 318 | 线性代数 1 319 | 生物 1 320 | 漫画 1 321 | 自然科学 1 322 | Comic 1 323 | 随笔 1 324 | 汉学 1 325 | Linguistics 1 326 | 语文 1 327 | 耽美漫 1 328 | 台湾文学 1 329 | 软件开发 1 330 | 〓非全0偏成人向少女漫类〓 1 331 | 吃 1 332 | 中国现代文学 1 333 | 武侠 1 334 | 社会语言学 1 335 | 工具 1 336 | 运动 1 337 | 悬疑小说 1 338 | 神秘学 1 339 | 黑色幽默 1 340 | 安全 1 341 | 信息安全 1 342 | 哲學 1 343 | 营销 1 344 | 后现代 1 345 | fiction 1 346 | 哲学 1 347 | 画集 1 348 | 欧美 1 349 | 建筑 1 350 | 民族 1 351 | GTD 1 352 | 神话 1 353 | C/C++ 1 354 | 网页设计 1 355 | 平面设计 1 356 | 建筑史 1 357 | 音乐 1 358 | 青春 1 359 | R 1 360 | 证券 1 361 | 明史 1 362 | 耽漫 1 363 | History 1 364 | BL漫画 1 365 | Deutsch 1 366 | 爱情 1 367 | 语言学习 1 368 | 中国哲学 1 369 | 婚姻 1 370 | 概率论 1 371 | 思维方式 1 372 | 英语 1 373 | 德语文学 1 374 | 方法论 1 375 | 电子书 1 376 | 少女向 1 377 | 演讲 1 378 | 信仰 1 379 | 写真 1 380 | 价值投资 1 381 | Android 1 382 | 学术 1 383 | Philosophy 1 384 | 反乌托邦 1 385 | 复杂系统 1 386 | 古代文学 1 387 | 猫 1 388 | 爱 1 389 | 绘画 1 390 | 管理咨询 1 391 | 日本文化 1 392 | 伦理学 1 393 | 企业管理 1 394 | 色彩 1 395 | 文革 1 396 | LonelyPlanet 1 397 | 中文 1 398 | 小說 1 399 | 自我管理 1 400 | 思维方法 1 401 | 日本文学 1 402 | ebook 1 403 | C++ 1 404 | 讽刺 1 405 | 图书馆 1 406 | 算法 1 407 | 数学 1 408 | 写作 1 409 | 日本文學 1 410 | 经典 1 411 | 企业 1 412 | 饮食文化 1 413 | 想读 1 414 | 心理治疗 1 415 | 腐向 1 416 | 关于书的书 1 417 | —原画集と公式书と资料设定集— 1 418 | 精神分析 1 419 | 高中 1 420 | 中国近代史 1 421 | 收藏 1 422 | 魏晋南北朝 1 423 | 世界历史 1 424 | 现象学 1 425 | 中国文化 1 426 | IELTS 1 427 | 耽美 1 428 | 神学 1 429 | Web 1 430 | 专业相关 1 431 | 沟通 1 432 | 项目管理 1 433 | 心理学 1 434 | 诗词 1 435 | 资料 1 436 | 外国文学 1 437 | 电子 1 438 | 小基漫 1 439 | 新经济 1 440 | 统计学 1 441 | 外国名著 1 442 | 日本語 1 443 | 古言 1 444 | 思考 1 445 | 饮食 1 446 | コミック 1 447 | 设计 1 448 | 自传 1 449 | Math 1 450 | 外语学习 1 451 | 政治经济学 1 452 | 文学评论 1 453 | 现代都市 1 454 | 中国现当代文学 1 455 | 求职 1 456 | 旅游 1 457 | 阅读 1 458 | 加拿大 1 459 | 方法 1 460 | 分析哲学 1 461 | 软件测试 1 462 | 杂 1 463 | 政治 1 464 | 畫集 1 465 | 商业 1 466 | 古代 1 467 | 美学 1 468 | 书信 1 469 | 哲理 1 470 | 好书 1 471 | 新媒体 1 472 | 科学 1 473 | 青春文学 1 474 | 日本漫画 1 475 | 健康 1 476 | 思想史 1 477 | 考研 1 478 | 专业 1 479 | 全球化 1 480 | 宋史 1 481 | 微积分 1 482 | 连环画 1 483 | 网络 1 484 | 古代汉语 1 485 | 【一般コミック】 1 486 | architecture 1 487 | 市场营销 1 488 | 2.绘本 1 489 | 时尚 1 490 | 数据结构 1 491 | 计算机技术 1 492 | 画册 1 493 | art 1 494 | 语言 1 495 | 新闻传播 1 496 | 诗歌 1 497 | 现实 1 498 | 心理 1 499 | 中国历史 1 500 | 建筑理论 1 501 | 美容 1 502 | 医学 1 503 | 行走 1 504 | 电影理论 1 505 | 存在主义 1 506 | 化学 1 507 | 管理 1 508 | 古希腊 1 509 | 西班牙 1 510 | 博弈论 1 511 | 英语学习 1 512 | 中华书局 1 513 | 恐怖漫画 1 514 | 习得 1 515 | 比较政治 1 516 | COMIC 1 517 | 女性 1 518 | 大师 1 519 | C 1 520 | 杂文 1 521 | 科学哲学 1 522 | 手工 1 523 | linguistics 1 524 | 股票 1 525 | javascript 1 526 | Programming 1 527 | 侦探小说 1 528 | 教育学 1 529 | 性学 1 530 | 海外汉学 1 531 | 数学史 1 532 | 程序设计 1 533 | 中国文学 1 534 | 小说 1 535 | 古罗马 1 536 | ——摄影&写真—— 1 537 | 生命 1 538 | 文学理论 1 539 | 恐怖 1 540 | 思想 1 541 | 上海 1 542 | 系统 1 543 | 食谱 1 544 | 大陆 1 545 | 用户体验 1 546 | Design 1 547 | 广告 1 548 | 语法研究 1 549 | 情色 1 550 | 推理 1 551 | 交易 1 552 | 敏捷开发 1 553 | 房地产 1 554 | 短篇集 1 555 | 故事 1 556 | 戏剧 1 557 | 自我成长 1 558 | 童书 1 559 | 经济学 1 560 | 诺贝尔文学奖 1 561 | 古文字 1 562 | 英文 1 563 | linux 1 564 | 童年 1 565 | 俄国文学 1 566 | 小人书 1 567 | 中国古典 1 568 | java 1 569 | 外国小说 1 570 | C# 1 571 | 周易 1 572 | 论文 1 573 | 基础 1 574 | 战略 1 575 | 工作 1 576 | .NET 1 577 | 日本 1 578 | 智慧 1 579 | 日漫 1 580 | 少年向 1 581 | 研究 1 582 | 景观 1 583 | 自由主义 1 584 | 治愈系 1 585 | マンガ 1 586 | textbook 1 587 | 启蒙 1 588 | 语音学 1 589 | CS 1 590 | 剧本 1 591 | 心理咨询 1 592 | 奇幻 1 593 | 搜索引擎 1 594 | 动物 1 595 | 2013 1 596 | H!P 1 597 | 2012 1 598 | 网络文学 1 599 | 统计 1 600 | 奇幻小说 1 601 | 傳記 1 602 | ♂耽美向♂ 1 603 | 韩国 1 604 | 暴力 1 605 | 吸血鬼 1 606 | 组织 1 607 | 漫画绘本 1 608 | 专业书 1 609 | 繪本 1 610 | 地理 1 611 | 拉美 1 612 | 经济史 1 613 | 教材 1 614 | 台版 1 615 | 猎奇 1 616 | 创意 1 617 | 文艺理论 1 618 | 日本推理 1 619 | 生活 1 620 | Python 1 621 | 教科书 1 622 | 闲书 1 623 | 腐向け 1 624 | 午夜文库 1 625 | 都市 1 626 | 画 1 627 | 武术 1 628 | 俄罗斯 1 629 | 語言學 1 630 | 艺术 1 631 | 人物 1 632 | 藏书 1 633 | IT 1 634 | 通识 1 635 | 中国当代文学 1 636 | 台言 1 637 | 古典文学 1 638 | Physics 1 639 | Manga 1 640 | 国际关系 1 641 | 日版漫画 1 642 | 西方历史 1 643 | 仙侠 1 644 | 复杂 1 645 | 幽默 1 646 | 童年回忆 1 647 | 少女漫画 1 648 | english 1 649 | 文化史 1 650 | 世界科幻大师丛书 1 651 | 语音研究 1 652 | 红学 1 653 | 投资理财 1 654 | 禅 1 655 | 社会学 1 656 | BL 1 657 | 拉美文学 1 658 | 认知 1 659 | 自由 1 660 | 巴黎 1 661 | 死亡 1 662 | 陈鬼之书 1 663 | 西方哲学 1 664 | 视觉 1 665 | 儿童 1 666 | 文學 1 667 | 湛庐文化 1 668 | 认知语言学 1 669 | web 1 670 | 投资 1 671 | 文学 1 672 | 历史学 1 673 | 语言学 1 674 | 感动 1 675 | 古典音乐 1 676 | 写真集 1 677 | 基督教 1 678 | 影评 1 679 | 哲学史 1 680 | 图鉴 1 681 | iOS 1 682 | 轻小说 1 683 | 成功 1 684 | 纪实文学 1 685 | 趣味 1 686 | 冒险 1 687 | 待购 1 688 | 法国文学 1 689 | Art 1 690 | 红楼梦 1 691 | 英国 1 692 | 恋爱 1 693 | Finance 1 694 | 电影书 1 695 | 网络小说 1 696 | 英文版 1 697 | 有趣 1 698 | 认知科学 1 699 | 2010读 1 700 | 意识流 1 701 | Java 1 702 | 现当代文学 1 703 | 翻译 1 704 | 游戏开发 1 705 | 书画 1 706 | 植物 1 707 | 三联 1 708 | 女性主义 1 709 | 社会史 1 710 | 语言与社会 1 711 | 杂志 1 712 | 女性文学 1 713 | 悬疑 1 714 | 军事 1 715 | 实验语音学 1 716 | 社交 1 717 | 少年漫画 1 718 | 游戏 1 719 | 建筑设计 1 720 | 文艺 1 721 | 华尔街 1 722 | 法律 1 723 | 当代文学 1 724 | 荷兰 1 725 | 回忆录 1 726 | 战争 1 727 | business 1 728 | 言情 1 729 | bl 1 730 | Economics 1 731 | 史料 1 732 | 传记 1 733 | 开发 1 734 | Q202 1 735 | 日本コミック 1 736 | 禅宗 1 737 | 职场 1 738 | 金融学 1 739 | 瑞典 1 740 | 童年记忆 1 741 | 历史 1 742 | 古籍 1 743 | 爱尔兰 1 744 | 网络营销 1 745 | 近代 1 746 | 财富 1 747 | UI 1 748 | 藝術 1 749 | 学习方法 1 750 | 苏联 1 751 | !! 1 752 | Psychology 1 753 | 民俗学 1 754 | 九州 1 755 | 家庭 1 756 | 雅思 1 757 | 梦想 1 758 | 围棋 1 759 | 游记 1 760 | 佛 1 761 | 数据分析 1 762 | 考古学 1 763 | statistics 1 764 | 文史 1 765 | 理论 1 766 | 罗马 1 767 | 一般コミック 1 768 | 社会科学 1 769 | 物理学 1 770 | 佛学 1 771 | 体育 1 772 | 戏曲 1 773 | 操作系统 1 774 | 外国 1 775 | 電影 1 776 | 逻辑学 1 777 | 科学人文 1 778 | 成长 1 779 | 設計 1 780 | 钢琴 1 781 | 经营管理 1 782 | 杂书 1 783 | 课本 1 784 | 玄幻小说 1 785 | 原版 1 786 | 经济管理 1 787 | 词典 1 788 | 中国史 1 789 | 圣经 1 790 | 书法 1 791 | 图画书 1 792 | 书 1 793 | 菊家 1 794 | 地图 1 795 | 文论 1 796 | 三联书店 1 797 | 大学教材 1 798 | 耽美漫画 1 799 | 文字 1 800 | 幻想 1 801 | 少女 1 802 | 概率 1 803 | 人性 1 804 | 笔记 1 805 | 黑客 1 806 | 俄罗斯文学 1 807 | 考试 1 808 | 官场 1 809 | 武侠小说 1 810 | 研究方法 1 811 | 惊悚 1 812 | 电子版 1 813 | 数据库 1 814 | 知识 1 815 | 养生 1 816 | 考古 1 817 | 台灣 1 818 | 名著 1 819 | 明朝 1 820 | 期货 1 821 | 西方 1 822 | 天文 1 823 | 2007 1 824 | 法国 1 825 | 文化 1 826 | 电影研究 1 827 | E 1 828 | 热血 1 829 | Web开发 1 830 | AI 1 831 | 棒球 1 832 | 科学史 1 833 | 插画 1 834 | 数学分析 1 835 | 领导力 1 836 | 中国小说 1 837 | 文献学 1 838 | 中國 1 839 | 架空 1 840 | 经济 1 841 | 手绘 1 842 | 知识分子 1 843 | 性 1 844 | 学术史 1 845 | 案例 1 846 | SQL 1 847 | Textbook 1 848 | 传媒 1 849 | 人工智能 1 850 | 互联网 1 851 | 玄幻 1 852 | 美食 1 853 | 工业设计 1 854 | ボーイズラブ 1 855 | 2008 1 856 | 2009 1 857 | 职业 1 858 | 物理 1 859 | -------------------------------------------------------------------------------- /engine/log/tags.start.txt: -------------------------------------------------------------------------------- 1 | BL小说 2 | 修行 3 | 诗 4 | 励志 5 | 美术 6 | 古典诗词 7 | 进化论 8 | 民国 9 | 探险 10 | 程序员 11 | 情感 12 | 咨询 13 | 通俗 14 | 茅盾文学奖 15 | 灵异 16 | 美國 17 | 三国 18 | AgathaChristie 19 | 符号学 20 | 财经 21 | 电影 22 | 通信 23 | 史学 24 | 数据处理 25 | 耽美向 26 | 历史小说 27 | 漫画(少女) 28 | 英国文学 29 | 前端 30 | 品牌 31 | 儿童文学 32 | 青春小说 33 | 盗墓 34 | 历史语言学 35 | 生物学 36 | 社会派 37 | 城市规划 38 | 文字学 39 | 电子商务 40 | 时间管理 41 | 书话 42 | 西藏 43 | 艺术史 44 | 意大利 45 | math 46 | 藏传佛教 47 | 青年漫画 48 | 輕小說 49 | 治愈 50 | 近代史 51 | 政治哲学 52 | 史诗 53 | 革命 54 | 晚清 55 | 德语 56 | 职场小说 57 | 处世 58 | design 59 | 火影忍者 60 | 代数 61 | 音韵学 62 | 日积月累--我的藏书 63 | 成功学 64 | 寫真 65 | 家庭教育 66 | 技术 67 | 少女漫畫 68 | 童话 69 | 俄国 70 | 中国 71 | 设计理论 72 | 金融 73 | 现代性 74 | 美术史 75 | 摄影 76 | 教程 77 | 国际政治 78 | 我看你洗澡 79 | 民主 80 | 德国文学 81 | 清朝 82 | GRE 83 | 记忆 84 | 文学研究 85 | English 86 | 当代 87 | 腐漫 88 | 回忆 89 | 法语 90 | 纪实 91 | 新闻学 92 | web开发 93 | 新闻 94 | economics 95 | 捷克 96 | 个人成长 97 | 中国漫画 98 | 灵修 99 | 印度 100 | 中医 101 | 产品 102 | 百科 103 | 史学理论 104 | Photography 105 | 心灵 106 | 中国古典文学 107 | 分析 108 | 诗集 109 | 搞笑 110 | 人力资源 111 | 佛教 112 | 决策 113 | 经管 114 | 月刊 115 | 數學 116 | 脑科学 117 | 欧洲 118 | 文学批评 119 | 创新 120 | 犯罪 121 | 民俗 122 | 工具书 123 | 计量经济学 124 | 师太 125 | 穿越 126 | 政治学 127 | 神尾葉子(神尾叶子) 128 | PHOTOBOOK 129 | 神秘 130 | 人生哲学 131 | 短篇 132 | 音系学 133 | 日语学习 134 | 其他 135 | 投机 136 | 两性 137 | 科幻 138 | 西哲 139 | 宇宙 140 | 腐 141 | 修身 142 | 电影评论 143 | 读书 144 | 愛情 145 | 科普 146 | 逻辑 147 | 日本少女漫畫 148 | 交互设计 149 | 会计 150 | 推理小说 151 | 言情小说 152 | 软件工程 153 | 通史 154 | 语音 155 | 访谈 156 | 软件 157 | 清史 158 | 晋江 159 | history 160 | 日语 161 | 个人管理 162 | 侦探推理 163 | JavaScript 164 | 在路上 165 | 青年向 166 | 藤泽亨 167 | 现代汉语 168 | 中世纪 169 | 德国 170 | 新东方 171 | 财务 172 | 论文集 173 | 美国文学 174 | 计算机 175 | 绘本 176 | 少女漫 177 | 职业规划 178 | 温暖 179 | 人际关系 180 | 理财 181 | 现代文学 182 | 散文随笔 183 | photography 184 | 传播学 185 | 进化 186 | BLコミック 187 | 经学 188 | 比利时 189 | philosophy 190 | 校园 191 | 嵌入式 192 | 大学 193 | 生活·读书·新知三联书店 194 | 心灵成长 195 | 人类学 196 | 世界史 197 | 日记 198 | 语言文字 199 | 大数据 200 | 文化研究 201 | 乙女心 202 | 社科 203 | 城市 204 | 散文 205 | 福尔摩斯 206 | 天闻角川 207 | 现代 208 | 评论 209 | 测试 210 | Linux 211 | 机器学习 212 | 日本小说 213 | 英文原著 214 | 产品经理 215 | 传统文化 216 | 产品设计 217 | 入门 218 | 恐怖小说 219 | 汉译世界学术名著丛书 220 | 小学 221 | 自然 222 | 社会理论 223 | 文集 224 | 自我完善 225 | 数据挖掘 226 | 方言与民族语 227 | 留学 228 | 灌篮高手 229 | 服装 230 | 女人 231 | 架构 232 | 科技 233 | 文学史 234 | 人文 235 | 销售 236 | 外语 237 | 前端开发 238 | 茶 239 | 日系推理 240 | 技术分析 241 | 旅行 242 | finance 243 | 基漫 244 | python 245 | 管理学 246 | 语法 247 | 艺术设计 248 | 歷史 249 | 法学 250 | 架空历史 251 | 宗教 252 | 词汇 253 | 香港文学 254 | 攝影 255 | 媒体 256 | bl小说 257 | 人物传记 258 | 实用 259 | 艺术理论 260 | 汉语 261 | 奥地利 262 | 教育 263 | 香港文學 264 | Statistics 265 | 魔幻 266 | 创业 267 | 儿童教育 268 | 小时候 269 | 道家 270 | 策划 271 | 海外中国研究 272 | 设计模式 273 | 耽美小说 274 | comic 275 | 80后 276 | NLP 277 | psychology 278 | 香港 279 | 漫畫 280 | 育儿 281 | 社会心理学 282 | 历史地理 283 | 人生 284 | 科幻小说 285 | 欧美推理 286 | 官场小说 287 | 二战 288 | 编程 289 | 亲子 290 | 计算机科学 291 | 当代艺术 292 | 摇滚 293 | 马克思主义 294 | 学习 295 | 动漫 296 | 侦探 297 | 国学 298 | Architecture 299 | 已购 300 | 传播 301 | 中国研究 302 | 短篇小说 303 | 日系寫真 304 | 台湾言情 305 | 思维 306 | PHP 307 | 编程语言 308 | 出版 309 | programming 310 | 线性代数 311 | 生物 312 | 漫画 313 | 自然科学 314 | Comic 315 | 随笔 316 | 汉学 317 | Linguistics 318 | 语文 319 | 耽美漫 320 | 台湾文学 321 | 软件开发 322 | 吃 323 | 中国现代文学 324 | 武侠 325 | 社会语言学 326 | 工具 327 | 运动 328 | 悬疑小说 329 | 神秘学 330 | 黑色幽默 331 | 安全 332 | 信息安全 333 | 哲學 334 | 营销 335 | 后现代 336 | fiction 337 | 哲学 338 | 画集 339 | 欧美 340 | 建筑 341 | 民族 342 | GTD 343 | 神话 344 | C/C++ 345 | 网页设计 346 | 平面设计 347 | 建筑史 348 | 音乐 349 | 青春 350 | R 351 | 证券 352 | 明史 353 | 耽漫 354 | History 355 | BL漫画 356 | Deutsch 357 | 爱情 358 | 语言学习 359 | 中国哲学 360 | 婚姻 361 | 概率论 362 | 思维方式 363 | 英语 364 | 德语文学 365 | 方法论 366 | 电子书 367 | 少女向 368 | 演讲 369 | 信仰 370 | 写真 371 | 价值投资 372 | Android 373 | 学术 374 | Philosophy 375 | 反乌托邦 376 | 复杂系统 377 | 古代文学 378 | 猫 379 | 爱 380 | 绘画 381 | 管理咨询 382 | 日本文化 383 | 伦理学 384 | 企业管理 385 | 色彩 386 | 文革 387 | LonelyPlanet 388 | 中文 389 | 小說 390 | 自我管理 391 | 思维方法 392 | 日本文学 393 | ebook 394 | C++ 395 | 讽刺 396 | 图书馆 397 | 算法 398 | 数学 399 | 写作 400 | 日本文學 401 | 经典 402 | 企业 403 | 饮食文化 404 | 想读 405 | 心理治疗 406 | 腐向 407 | 关于书的书 408 | 精神分析 409 | 高中 410 | 中国近代史 411 | 收藏 412 | 魏晋南北朝 413 | 世界历史 414 | 现象学 415 | 中国文化 416 | IELTS 417 | 耽美 418 | 神学 419 | Web 420 | 专业相关 421 | 沟通 422 | 项目管理 423 | 心理学 424 | 诗词 425 | 资料 426 | 外国文学 427 | 电子 428 | 小基漫 429 | 新经济 430 | 统计学 431 | 外国名著 432 | 日本語 433 | 古言 434 | 思考 435 | 饮食 436 | コミック 437 | 设计 438 | 自传 439 | Math 440 | 外语学习 441 | 政治经济学 442 | 文学评论 443 | 现代都市 444 | 中国现当代文学 445 | 求职 446 | 旅游 447 | 阅读 448 | 加拿大 449 | 方法 450 | 分析哲学 451 | 软件测试 452 | 杂 453 | 政治 454 | 畫集 455 | 商业 456 | 古代 457 | 美学 458 | 书信 459 | 哲理 460 | 好书 461 | 新媒体 462 | 科学 463 | 青春文学 464 | 日本漫画 465 | 健康 466 | 思想史 467 | 考研 468 | 专业 469 | 全球化 470 | 宋史 471 | 微积分 472 | 连环画 473 | 网络 474 | 古代汉语 475 | architecture 476 | 市场营销 477 | 时尚 478 | 数据结构 479 | 计算机技术 480 | 画册 481 | art 482 | 语言 483 | 新闻传播 484 | 诗歌 485 | 现实 486 | 心理 487 | 中国历史 488 | 建筑理论 489 | 美容 490 | 医学 491 | 行走 492 | 电影理论 493 | 存在主义 494 | 化学 495 | 管理 496 | 古希腊 497 | 西班牙 498 | 博弈论 499 | 英语学习 500 | 中华书局 501 | 恐怖漫画 502 | 习得 503 | 比较政治 504 | COMIC 505 | 女性 506 | 大师 507 | C 508 | 杂文 509 | 科学哲学 510 | 手工 511 | linguistics 512 | 股票 513 | javascript 514 | Programming 515 | 侦探小说 516 | 教育学 517 | 性学 518 | 海外汉学 519 | 数学史 520 | 程序设计 521 | 中国文学 522 | 小说 523 | 古罗马 524 | 生命 525 | 文学理论 526 | 恐怖 527 | 思想 528 | 上海 529 | 系统 530 | 食谱 531 | 大陆 532 | 用户体验 533 | Design 534 | 广告 535 | 语法研究 536 | 情色 537 | 推理 538 | 交易 539 | 敏捷开发 540 | 房地产 541 | 短篇集 542 | 故事 543 | 戏剧 544 | 自我成长 545 | 童书 546 | 经济学 547 | 诺贝尔文学奖 548 | 古文字 549 | 英文 550 | linux 551 | 童年 552 | 俄国文学 553 | 小人书 554 | 中国古典 555 | java 556 | 外国小说 557 | C# 558 | 周易 559 | 论文 560 | 基础 561 | 战略 562 | 工作 563 | 日本 564 | 智慧 565 | 日漫 566 | 少年向 567 | 研究 568 | 景观 569 | 自由主义 570 | 治愈系 571 | マンガ 572 | textbook 573 | 启蒙 574 | 语音学 575 | CS 576 | 剧本 577 | 心理咨询 578 | 奇幻 579 | 搜索引擎 580 | 动物 581 | 网络文学 582 | 统计 583 | 奇幻小说 584 | 傳記 585 | 韩国 586 | 暴力 587 | 吸血鬼 588 | 组织 589 | 漫画绘本 590 | 专业书 591 | 繪本 592 | 地理 593 | 拉美 594 | 经济史 595 | 教材 596 | 台版 597 | 猎奇 598 | 创意 599 | 文艺理论 600 | 日本推理 601 | 生活 602 | Python 603 | 教科书 604 | 闲书 605 | 腐向け 606 | 午夜文库 607 | 都市 608 | 画 609 | 武术 610 | 俄罗斯 611 | 語言學 612 | 艺术 613 | 人物 614 | 藏书 615 | IT 616 | 通识 617 | 中国当代文学 618 | 台言 619 | 古典文学 620 | Physics 621 | Manga 622 | 国际关系 623 | 日版漫画 624 | 西方历史 625 | 仙侠 626 | 复杂 627 | 幽默 628 | 童年回忆 629 | 少女漫画 630 | english 631 | 文化史 632 | 世界科幻大师丛书 633 | 语音研究 634 | 红学 635 | 投资理财 636 | 禅 637 | 社会学 638 | BL 639 | 拉美文学 640 | 认知 641 | 自由 642 | 巴黎 643 | 死亡 644 | 陈鬼之书 645 | 西方哲学 646 | 视觉 647 | 儿童 648 | 文學 649 | 湛庐文化 650 | 认知语言学 651 | web 652 | 投资 653 | 文学 654 | 历史学 655 | 语言学 656 | 感动 657 | 古典音乐 658 | 写真集 659 | 基督教 660 | 影评 661 | 哲学史 662 | 图鉴 663 | iOS 664 | 轻小说 665 | 成功 666 | 纪实文学 667 | 趣味 668 | 冒险 669 | 待购 670 | 法国文学 671 | Art 672 | 红楼梦 673 | 英国 674 | 恋爱 675 | Finance 676 | 电影书 677 | 网络小说 678 | 英文版 679 | 有趣 680 | 认知科学 681 | 2010读 682 | 意识流 683 | Java 684 | 现当代文学 685 | 翻译 686 | 游戏开发 687 | 书画 688 | 植物 689 | 三联 690 | 女性主义 691 | 社会史 692 | 语言与社会 693 | 杂志 694 | 女性文学 695 | 悬疑 696 | 军事 697 | 实验语音学 698 | 社交 699 | 少年漫画 700 | 游戏 701 | 建筑设计 702 | 文艺 703 | 华尔街 704 | 法律 705 | 当代文学 706 | 荷兰 707 | 回忆录 708 | 战争 709 | business 710 | 言情 711 | bl 712 | Economics 713 | 史料 714 | 传记 715 | 开发 716 | Q202 717 | 日本コミック 718 | 禅宗 719 | 职场 720 | 金融学 721 | 瑞典 722 | 童年记忆 723 | 历史 724 | 古籍 725 | 爱尔兰 726 | 网络营销 727 | 近代 728 | 财富 729 | UI 730 | 藝術 731 | 学习方法 732 | 苏联 733 | Psychology 734 | 民俗学 735 | 九州 736 | 家庭 737 | 雅思 738 | 梦想 739 | 围棋 740 | 游记 741 | 佛 742 | 数据分析 743 | 考古学 744 | statistics 745 | 文史 746 | 理论 747 | 罗马 748 | 一般コミック 749 | 社会科学 750 | 物理学 751 | 佛学 752 | 体育 753 | 戏曲 754 | 操作系统 755 | 外国 756 | 電影 757 | 逻辑学 758 | 科学人文 759 | 成长 760 | 設計 761 | 钢琴 762 | 经营管理 763 | 杂书 764 | 课本 765 | 玄幻小说 766 | 原版 767 | 经济管理 768 | 词典 769 | 中国史 770 | 圣经 771 | 书法 772 | 图画书 773 | 书 774 | 菊家 775 | 地图 776 | 文论 777 | 三联书店 778 | 大学教材 779 | 耽美漫画 780 | 文字 781 | 幻想 782 | 少女 783 | 概率 784 | 人性 785 | 笔记 786 | 黑客 787 | 俄罗斯文学 788 | 考试 789 | 官场 790 | 武侠小说 791 | 研究方法 792 | 惊悚 793 | 电子版 794 | 数据库 795 | 知识 796 | 养生 797 | 考古 798 | 台灣 799 | 名著 800 | 明朝 801 | 期货 802 | 西方 803 | 天文 804 | 2007 805 | 法国 806 | 文化 807 | 电影研究 808 | E 809 | 热血 810 | Web开发 811 | AI 812 | 棒球 813 | 科学史 814 | 插画 815 | 数学分析 816 | 领导力 817 | 中国小说 818 | 文献学 819 | 中國 820 | 架空 821 | 经济 822 | 手绘 823 | 知识分子 824 | 性 825 | 学术史 826 | 案例 827 | SQL 828 | Textbook 829 | 传媒 830 | 人工智能 831 | 互联网 832 | 玄幻 833 | 美食 834 | 工业设计 835 | ボーイズラブ 836 | 职业 837 | 物理 838 | -------------------------------------------------------------------------------- /engine/merge_msr_word.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | 4 | 5 | def main(inp1, inp2): 6 | msrreader = csv.reader(open(inp1)) 7 | words = set() 8 | for row in msrreader: 9 | words.add(row[0].strip().decode('utf-8')) 10 | for tag in open(inp2): 11 | words.add(tag.strip().decode('utf-8')) 12 | writer = csv.writer(open(inp1, 'w')) 13 | for w in words: 14 | writer.writerow([w.encode('utf-8'),0,0,0,0,0,0]) 15 | 16 | 17 | 18 | if __name__ == '__main__': 19 | logging.info("running %s" % ' '.join(sys.argv)) 20 | 21 | # check and process input arguments 22 | if len(sys.argv) < 3: 23 | print 'usage: python merge_msr_word.py ' 24 | sys.exit(1) 25 | inp1, inp2 = sys.argv[1:] 26 | main(inp1, inp2) -------------------------------------------------------------------------------- /engine/stdtag.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | import gensim 4 | 5 | class StandardTags(object): 6 | 7 | def __init__(self): 8 | self.rawtags = {} 9 | self.model = None 10 | self.start = None 11 | self.domain = None 12 | pass 13 | 14 | def _loadModel(self): 15 | if not self.model: 16 | self.model = gensim.models.Word2Vec.load("corpus/misc.model") 17 | 18 | def _loadRawtags(self): 19 | if not self.rawtags: 20 | total = db.tags.count() 21 | for i,t in enumerate(db.tags.find()): 22 | self.rawtags[t['name']] = t 23 | prog_d('getting tags from mongo', i, total) 24 | 25 | self.root = 0 26 | self._loadStart() 27 | for i in self.start: 28 | if i not in self.rawtags: 29 | logging.warn('%s not in db.tags' % i) 30 | continue 31 | self.root += len(self.rawtags[i]['book_ref']) 32 | 33 | def _loadStart(self): 34 | if not self.start: 35 | self.start = [i.strip().decode('utf-8') for i in open('log/tags.start.txt')] 36 | 37 | def _loadDomain(self): 38 | if not self.domain: 39 | self.domain = [i.split(' ')[0].decode('utf-8') for i in open('log/tag.domain-classify.txt')] 40 | 41 | def transform_multi(self, input_tags, thres=0.01): 42 | self._loadRawtags() 43 | 44 | if isinstance(input_tags, list): 45 | normal = list(set(input_tags) - set(self.start)) 46 | elif isinstance(input_tags, unicode): 47 | normal = [input_tags] 48 | if not normal: 49 | return input_tags 50 | # logging.debug('start appending db.tags.') 51 | # # tag = [] 52 | # rawtags = {} 53 | # for t in db.tags.find(): 54 | # rawtags[t['name']] = t 55 | # tag.append(t) 56 | # rawtags = dict([(i['name'], i) for i in tag]) 57 | mtrx = self._solveMImatrix(start, normal) 58 | # pickle.dump(mtrx, open('dump/MImtrx.dmp', 'w')) 59 | # mtrx = pickle.load(open('dump/MImtrx.dmp')) 60 | 61 | ret = {} 62 | maximum = self._getMtrxMaxVec(mtrx) 63 | for val in maximum: 64 | if val[2] < thres: 65 | break 66 | ret.append(self.start[val[0]]) 67 | if normal[val[1]] not in ret: 68 | ret[normal[val[1]]] = self.start[val[0]] 69 | return ret 70 | 71 | ### 计算单个标签的最相似标准标签, 直接计算 72 | def transform(self, inp_tag, thres=0.01): 73 | self._loadRawtags() 74 | self._loadStart() 75 | if inp_tag not in self.rawtags: 76 | return 77 | ret_list = {} 78 | for tag in self.start: 79 | a_set = set([x[0] for x in self.rawtags[tag]['book_ref']]) 80 | b_set = set([x[0] for x in self.rawtags[inp_tag]['book_ref']]) 81 | ret_list[tag] = self._calMIvalue(a_set, b_set) 82 | ret_list_item = ret_list.items() 83 | ret_list_item.sort(cmp=lambda a,b:cmp(a[1],b[1]), reverse=True) 84 | return [(x[0],x[1]) for x in ret_list_item if x[1] > thres] 85 | 86 | ### 计算单个标签的最相似标准标签, 从数据库获取, 默认thres = 0.01 87 | #@return list, 如果输入标签不是启动标签 88 | #@return unicode, 输入标签原样返回 89 | #@return None, 无效标签 90 | def transform_from_db(self, inp_tag): 91 | self._loadStart() 92 | if inp_tag in self.start: 93 | return inp_tag 94 | else: 95 | ret = rsdb.findOneTag(inp_tag)#}, {'standard':1}) 96 | # print ret 97 | if ret and 'standard' in ret and ret['standard']: 98 | return ret['standard'] 99 | 100 | # 永远只返回None或者最相似标签 101 | def simple_transform(self, inp_tag): 102 | ret = self.transform_from_db(inp_tag) 103 | if isinstance(ret, unicode): 104 | return ret 105 | elif isinstance(ret, list): 106 | return ret[0][0] 107 | 108 | # 把矩阵所有数字按照大小排列, 获取一个(x,y,value)的列表,标记坐标和值 109 | def _getMtrxMaxVec(self, mtrx): 110 | ret = [] 111 | used_col = set() 112 | PROG = len(mtrx[0]) 113 | for i in range( len(mtrx[0]) ): 114 | j = i % len(mtrx) 115 | rowmax = max(mtrx[j]) 116 | if rowmax == -1: 117 | continue 118 | rowmax_idx = mtrx[j].index(rowmax) 119 | ret.append( (j, rowmax_idx, rowmax) ) 120 | mtrx[j][rowmax_idx] = -1 121 | prog_d('_getMtrxMaxVec %f' % rowmax, i, PROG) 122 | ret.sort( cmp=lambda a,b: cmp(a[2], b[2]), reverse=True) 123 | return ret 124 | 125 | def _solveMImatrix(self, normal): 126 | 127 | MImatrix = [] 128 | root = 0 129 | for i in (self.start+normal): 130 | if i not in self.rawtags: 131 | logging.warn('%s not in db.tags' % i) 132 | continue 133 | root += len(self.rawtags[i]['book_ref']) 134 | 135 | # c = 0 136 | # total = len(self.start)*len(normal) 137 | 138 | for i, st in enumerate(self.start): 139 | MImatrix.append([]) 140 | for j, t in enumerate(normal): 141 | st_set = set([x[0] for x in self.rawtags[st]['book_ref']]) 142 | if t in self.rawtags: 143 | t_set = set([x[0] for x in self.rawtags[t]['book_ref']]) 144 | MImatrix[i].append(self._calMIvalue(st_set, t_set, root)) 145 | else: 146 | MImatrix[i].append(0.0) 147 | # prog_d('solve Matrix row', c, total) 148 | # c += 1 149 | 150 | return MImatrix 151 | 152 | def _calMIvalue(self, a_set, b_set): 153 | pab = math.fabs(float(len(a_set&b_set)) / self.root) 154 | pa = math.fabs(float(len(a_set)) / self.root) 155 | pb = math.fabs(float(len(b_set)) / self.root) 156 | Iab = pab * math.log((pab+1) / (pa*pb)) 157 | Ha = -pa * math.log(pa) 158 | Hb = -pb * math.log(pb) 159 | return float(Iab) / (float(Ha + Hb) / 2) 160 | 161 | def test_get_standard_tags(uid='dearcloud'): 162 | 163 | # tags = getTagsFromUser(uid) 164 | stdtag = StandardTags() 165 | for t in [u'穆斯林',u'刘慈欣', u'土耳其']: 166 | tgcl = stdtag.transform(t, 0.001) 167 | if tgcl: 168 | for tc in tgcl: 169 | print tc[0], tc[1] 170 | print '\r\n' 171 | 172 | 173 | def test_transform_from_db(): 174 | stdtag = StandardTags() 175 | for t in [u'当代小说', u'好爸爸', u'围棋']: 176 | ret = stdtag.simple_transform(t) 177 | print ret 178 | 179 | if __name__ == '__main__': 180 | # update_standard_tags() 181 | test_transform_from_db() 182 | -------------------------------------------------------------------------------- /engine/test_user_model.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | 4 | 5 | def getProEval(vec): 6 | ret = 0.0 7 | for i in vec.values(): 8 | ret += i 9 | return ret 10 | 11 | 12 | def main(): 13 | pass 14 | umodels = {} 15 | for u in db.umodel.find(timeout=False): 16 | umodels[u['user_id']] = u 17 | 18 | umodel_show = umodels.items() 19 | umodel_show.sort(cmp=lambda a,b:cmp(getProEval(a['pro_eval']), getProEval(b['pro_eval'])), reverse=True) 20 | for um in umodel_show: 21 | print um['user_id'], getProEval(um['pro_eval']), ' '.join([ unicode(x[0])+unicode(x[1])+u' ' for x in um['pro_eval'] ]) 22 | 23 | 24 | 25 | if __name__ == '__main__': 26 | main() -------------------------------------------------------------------------------- /engine/train_word2vec_model.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import logging 5 | import os.path 6 | import sys 7 | import multiprocessing 8 | 9 | from gensim.corpora import WikiCorpus 10 | from gensim.models import Word2Vec 11 | from gensim.models.word2vec import LineSentence 12 | 13 | if __name__ == '__main__': 14 | program = os.path.basename(sys.argv[0]) 15 | logger = logging.getLogger(program) 16 | 17 | logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s') 18 | logging.root.setLevel(level=logging.INFO) 19 | logger.info("running %s" % ' '.join(sys.argv)) 20 | 21 | # check and process input arguments 22 | if len(sys.argv) < 4: 23 | print globals()['__doc__'] % locals() 24 | sys.exit(1) 25 | inp, outp1, outp2 = sys.argv[1:4] 26 | 27 | model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, 28 | workers=multiprocessing.cpu_count()) 29 | 30 | # trim unneeded model memory = use(much) less RAM 31 | #model.init_sims(replace=True) 32 | model.save(outp1) 33 | model.save_word2vec_format(outp2, binary=False) 34 | -------------------------------------------------------------------------------- /engine/update_book_domain.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | from wac import getWacWeight, loadLevel, print_wac #getWordWeight 4 | import gensim 5 | 6 | 7 | model = gensim.models.Word2Vec.load("corpus/misc.model") 8 | # stdtag = StandardTags() 9 | # level = loadLevel() 10 | 11 | THRES = 4.0 12 | 13 | def similar(a, b): 14 | try: 15 | return model.similarity(a, b) 16 | except: 17 | return 0.0 18 | 19 | def getBookDomain(book, domainlst): 20 | weight = dict([(x,0.0) for x in domainlst]) 21 | 22 | for i,tag in enumerate(book['tags']): 23 | tag = stdtag.simple_transform(tag['name']) 24 | if not tag: 25 | continue 26 | for d in domainlst: 27 | sim = similar(tag, d) 28 | weight[d] += sim 29 | # weight[d] += similar(book['title'], d) 30 | #logging.debug('book %s tag %s sim %f domain %s' % (book['title'], tag, sim, d)) 31 | # prog_d('tag %s' % tag, i, 8) 32 | #logging.debug('tag %s' % tag) 33 | weightI = weight.items() 34 | weightI.sort(cmp=lambda a,b:cmp(a[1],b[1]), reverse=True) 35 | return weightI[:2] 36 | 37 | def build_book_domain(domain): 38 | 39 | for i,book in enumerate( db.books.find(timeout=False) ): # {"$where":"this.domain == null"}, 40 | if 'title' not in book:# or int(book['id']) not in [3609132, 3412260, 1082154, 1012032, 1012379]: 41 | continue 42 | w = getBookDomain(book, domain) 43 | if w and float(w[0][1]) > float(THRES): 44 | book['general_domain'] = w 45 | logging.debug('%d building book %s in domain %s - %f, %s - %f' % (i, book['title'], w[0][0], w[0][1], w[1][0], w[1][1]) ) 46 | else: 47 | book['general_domain'] = [] 48 | logging.debug('book %s has no general_domain' % book['title']) 49 | ret = db.books.update({"_id":book['_id']}, book) 50 | if not ret['ok']: 51 | logging.warn('update book %s error.' % book['title']) 52 | 53 | def main(): 54 | build_book_domain(BOOK_DOMAIN) 55 | 56 | if __name__ == '__main__': 57 | main() -------------------------------------------------------------------------------- /engine/update_popular.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | 4 | def getSimBooks(book): 5 | return [{'sim_book_id':book['id'], 'sim_book':book, 'similarity':1}] 6 | 7 | def updPopBooks(): 8 | new_hash = getUmodelHash() 9 | print new_hash 10 | record = db.popbooks.find_one() 11 | if record: 12 | if new_hash == record['update_hash']: 13 | logging.info('popbooks is up to date.') 14 | return 15 | record['update_hash'] = new_hash 16 | db.popbooks.update({"_id", record['_id']}, record, upsert=True) 17 | else: 18 | record = {} 19 | record['update_hash'] = new_hash 20 | db.popbooks.insert(record) 21 | # return 22 | bid = set() 23 | books = [] 24 | for u in db.umodel.find(): 25 | user = rsdb.findOneUser(u['user_id']) 26 | for h in user['history']: 27 | book = rsdb.findOneBook(h['book_id']) 28 | if not book: 29 | continue 30 | if 'tags' in book and book['tags']: 31 | if book['id'] not in bid: 32 | del book['_id'] 33 | books.append(book) 34 | bid.add(book['id']) 35 | 36 | books.sort(cmp=lambda a,b:cmp(a['tags'][0]['count'], b['tags'][0]['count']), reverse=True) 37 | # db.popbooks.update(books) 38 | 39 | domain_popbooks = dict([ (x, []) for x in BOOK_DOMAIN ]) 40 | for b in books: 41 | db.popbooks.update({"book_id":b['id']}, b, upsert=True) 42 | if b['general_domain']: 43 | dom = b['general_domain'][0][0] 44 | if len(domain_popbooks[dom]) < 20: 45 | domain_popbooks[dom].append(b) 46 | 47 | db.dombooks.insert(domain_popbooks) 48 | 49 | 50 | def getUmodelHash(): 51 | hashstr = '' 52 | hashlst = [] 53 | for u in db.umodel.find(): 54 | hashlst.append(str(u['uptime'])) 55 | return hash( str(hashlst.sort()) ) 56 | 57 | def main(): 58 | updPopBooks() 59 | 60 | if __name__ == '__main__': 61 | main() 62 | # getUmodelHash() -------------------------------------------------------------------------------- /engine/update_standardtags.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | from stdtag import StandardTags 4 | 5 | ### 更新tags表,每个标签都对应有一个相似标签列表,但是如果本身是启动标签或者没有相似标签的话便是[] 6 | def update_standard_tags(): 7 | stdtag = StandardTags() 8 | total = db.tags.find().count() 9 | logging.debug('remaining %d tags without standard.' % total) 10 | for i,t in enumerate( db.tags.find(timeout=False) ): # {"$where":"this.standard == null"}, timeout=False 11 | taglst = stdtag.transform(t['name']) 12 | if not taglst or taglst[0][0] == t['name']: 13 | logging.debug('skip tag: %s', t['name']) 14 | t['standard'] = [] 15 | else: 16 | t['standard'] = taglst 17 | logging.debug( '%d, tag update standard %s --> %s' % (i, t['name'], taglst[0][0]) ) 18 | ret = db.tags.update({"_id":t['_id']}, t) 19 | if not ret['ok']: 20 | logging.warn('tag update failed. tag: %s' % t['name']) 21 | prog_d('tag update', i, total) 22 | 23 | 24 | if __name__ == '__main__': 25 | update_standard_tags() -------------------------------------------------------------------------------- /engine/update_tags_db.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | 4 | 5 | def update_tags_db(): 6 | global PROG 7 | 8 | tags_summary = {} 9 | book_total_f = {} 10 | tags_totalcount = 0 11 | 12 | ### 提取用户表中的每本书的标签数量和总数量 13 | for i, user in enumerate(db.users.find()): 14 | if 'history' not in user or len(user['history']) < 15: 15 | continue 16 | for h in user['history']: 17 | if h['book_id'] not in book_total_f: 18 | book_total_f[h['book_id']] = 0.0 19 | if 'tags' in h: 20 | book_total_f[h['book_id']] += len(h['tags']) 21 | tags_totalcount += len(h['tags']) 22 | prog_d('extract tags in users ') 23 | 24 | ### 所有书籍的所有标签 25 | for book in db.books.find(): 26 | if 'tags' not in book or not book['tags']: 27 | continue 28 | for t in book['tags']: 29 | tags_totalcount += t['count'] 30 | prog_d('extract tags in books') 31 | 32 | 33 | ### 汇总标签数据结构 34 | # PROG = db.books.count() 35 | for i, book in enumerate(db.books.find()): 36 | if 'tags' not in book or not book['tags']: 37 | continue 38 | book_tags = book['tags'] 39 | 40 | # 计算书籍的所有标签的标注次数之和,包括用户标注的标签 41 | total_tcount = 0 42 | for tag in book_tags: 43 | total_tcount += tag['count'] 44 | if book['id'] in book_total_f: 45 | total_tcount += book_total_f[book['id']] 46 | 47 | for j, tag in enumerate(book_tags): 48 | # score = float(tag['count'] + 1) / float(prime_tag_count + 1) 49 | if tag['name'] not in tags_summary: 50 | tags_summary[tag['name']] = {'count': 0, 'book_ref':list()} 51 | 52 | tf = float(tag['count']) / float(total_tcount) 53 | tags_summary[tag['name']]['book_ref'].append( (book['id'], j, float(tag['count']), tf) ) 54 | tags_summary[tag['name']]['count'] += tag['count'] 55 | 56 | ### 计算每个标签的idf 57 | for i, key in enumerate(tags_summary.keys()): 58 | tags_summary[key]['idf'] = math.log( float(tags_totalcount) / float(tags_summary[key]['count'] + 1) ) 59 | prog_d('prepare data structure') 60 | 61 | ### 汇集用户引用 62 | for i, u in enumerate(db.users.find()): 63 | if 'history' not in u or len(u['history']) < 15: 64 | continue 65 | for h in u['history']: 66 | if 'tags' not in h: 67 | continue 68 | for t in h['tags']: 69 | if t in tags_summary: 70 | if 'user_ref' not in tags_summary[t]: 71 | tags_summary[t]['user_ref'] = set() 72 | tags_summary[t]['user_ref'].add(u['user_id']) 73 | 74 | for i, tag in enumerate(tags_summary.items()): 75 | if 'user_ref' in tag[1]: 76 | tags_summary[tag[0]]['user_ref'] = list(tag[1]['user_ref']) 77 | 78 | prog_d('add user ref to tags.') 79 | 80 | # 把整理后的tags_summary存进数据库里 81 | PROG = len(tags_summary) 82 | for i, t in enumerate(tags_summary.items()): 83 | document = db.tags.find_one({"name":t[0]}) 84 | if not document: 85 | document = {"name":t[0]} 86 | document.update(t[1]) 87 | db.tags.update({"name":t[0]}, document, upsert=True) 88 | prog_d('update or insert mongo', i, PROG) 89 | prog_d('updateRawtags') 90 | 91 | if __name__ == '__main__': 92 | update_tags_db() -------------------------------------------------------------------------------- /engine/update_user_model.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | from GetWacWeight import getWacWeight, loadLevel, print_wac #getWordWeight 4 | from stdtag import StandardTags 5 | # from GetBookModel import getBookModel 6 | 7 | 8 | # stdtag = StandardTags() 9 | # rsdb = RecsysDatabase() 10 | stdtag._loadStart() 11 | 12 | ## 用户标注标签对兴趣模型的权重 13 | USER_TAG_W = 2 14 | 15 | ##书籍原有标签对兴趣模型的权重 16 | BOOK_TAG_W = 1 17 | 18 | ## 用户相似度阀值 19 | USER_SIM_THRES = 1500.0 20 | 21 | ## 书籍推荐评分数量限制 22 | BOOK_REC_NUM = 10 23 | 24 | ## 用户专业度阀值,低于这个阀值的用户将不归类到这个专业里 25 | PRO_THRES = 0 26 | 27 | ## 专业书籍推荐数量 28 | PRO_RECOMM_NUM = 60 29 | 30 | ## 根据专业度选择近邻的上限和下限 31 | PRO_SIM_RECORD_CEILING = 50 32 | PRO_SIM_RECORD_FLOOR = 5 33 | 34 | def getModelUsersHistory(): 35 | users = {} 36 | for u in db.umodel.find(): 37 | users[u['user_id']] = db.users.find_one({"user_id":u['user_id']})['history'] 38 | return users 39 | 40 | umodels = loadUModels() 41 | PRO_VEC = pickle.load(open('dump/provec.dmp')) 42 | 43 | ### 用户模型表umodel 44 | # 通过阅读历史计算的模型增量 45 | # 用户模型更新时间updatetime: 46 | def updateUserModel(user, nowtime, utype): 47 | count = 0 48 | 49 | # user表中的记录表和umodel表中的长度不同则优先计算user表中剩下的history 50 | # 否则如果更新时间有差异更新所有umodel中的条目 51 | umodel = db.umodel.find_one({"user_id":user['user_id']}) 52 | if umodel: 53 | if len(umodel['history_vec']) != len(user['history']): 54 | count = len(umodel['history_vec']) 55 | elif (nowtime - umodel['uptime']).days == 0: 56 | logging.info('user %s model is up to date.' % umodel['user_id']) # 通过user表来更新umodel表 57 | return 58 | logging.info('update user %s model - umodel len: %d, history len: %d' 59 | % (user['user_id'], len(umodel['history_vec']), len(user['history'])) ) 60 | u_id = umodel['_id'] 61 | else: 62 | umodel = {'history_vec':[], 'uptime':nowtime, 'user_id':user['user_id'], 'type':utype} 63 | u_id = db.umodel.insert(umodel) 64 | logging.info('create user %s model _id %s' % (user['user_id'], u_id) ) 65 | 66 | umodel['interest_eval'] = {} 67 | umodel['pro_eval'] = dict( [(x, 0.0) for x in DOMAIN_TAG] ) 68 | 69 | # 遍历用户阅读历史 70 | for h in user['history'][count:]: 71 | interest_vec, pro_vec = getVecByHistory(h) 72 | history_vec = {"date" : h['date'], "interest_vec" : interest_vec, "pro_vec" : pro_vec} 73 | umodel['history_vec'].append(history_vec) 74 | 75 | # 累加最终兴趣向量 76 | for t in interest_vec.items(): 77 | if t[0] not in umodel['interest_eval']: 78 | umodel['interest_eval'][t[0]] = 0.0 79 | umodel['interest_eval'][t[0]] += getEbbinghausVal(nowtime, h['date']) * t[1] 80 | 81 | # 累加最终专业向量 82 | for t in pro_vec.items(): 83 | umodel['pro_eval'][t[0]] += math.log( pro_vec[t[0]] + 1 ) 84 | # print umodel['pro_eval'][t[0]] 85 | 86 | db.umodel.update({"_id":u_id}, {"$addToSet":{"history_vec":history_vec}}) 87 | # logging.info('-=-=-=INSERT-=-=-=- history_vec interest %s, pro %s, on date %s' % (' '.join([unicode(x[0])+unicode(x[1]) for x in interest_vec.items()]), ' '.join([unicode(x[0])+unicode(x[1]) for x in pro_vec.items()]), h['date']) ) 88 | 89 | umodel['uptime'] = nowtime 90 | db.umodel.update({'_id':u_id}, umodel, upsert=True) 91 | logging.info('-=-=-=- evaluate -=-=-=- final vector: ||interest|| %s, ||pro|| %s' 92 | % (' '.join([unicode(x[0])+unicode(x[1]) for x in umodel['interest_eval'].items()]), ' '.join( [unicode(x[0])+unicode(x[1]) for x in umodel['pro_eval'].items()] )) ) 93 | 94 | ### 根据每条历史获得兴趣向量, 专业模型 95 | def getVecByHistory(history): 96 | 97 | # 兴趣向量,用用户的标签标示 98 | intVec = {} 99 | 100 | # 专业向量的表示:{所属领域:专业度,阅读量} 101 | proVec = dict( [(x, 0.0) for x in DOMAIN_TAG] ) 102 | 103 | # 根据用户显式标注的标签来累加兴趣向量,但是对专业向量没有影响 104 | if 'tag' in history: 105 | for usertag in history['tags']: 106 | realtag = stdtag.simple_transform(usertag) 107 | if realtag and realtag.find('.') == -1: 108 | 109 | # 获得标签的idf 110 | ret = rsdb.findOneTag(realtag) 111 | if ret: 112 | tag_idf = ret['idf'] 113 | else: 114 | tag_idf = 1 115 | logging.warn('tag %s get idf error.' % realtag) 116 | 117 | if realtag not in intVec: 118 | intVec[realtag] = 0 119 | intVec[realtag] += USER_TAG_W * tag_idf 120 | 121 | # 根据书籍所拥有的8个标签来累加兴趣向量和专业向量 122 | book = rsdb.findOneBook(history['book_id']) 123 | if book: 124 | for booktag in [x['name'] for x in book['tags']]: 125 | realtag = stdtag.simple_transform(booktag) 126 | if realtag and realtag.find('.') == -1: 127 | 128 | # 获得标签的idf 129 | ret = rsdb.findOneTag(realtag) 130 | if ret: 131 | tag_idf = ret['idf'] 132 | else: 133 | tag_idf = 1 134 | logging.warn('tag %s get idf error.' % realtag) 135 | 136 | if realtag not in intVec: 137 | intVec[realtag] = 0 138 | intVec[realtag] += BOOK_TAG_W * tag_idf 139 | 140 | # # 累加专业模型 141 | if realtag not in PRO_VEC: 142 | continue 143 | proVec[PRO_VEC[realtag][0]] += float(PRO_VEC[realtag][1]) 144 | # logging.info('user: [%s] book: [%s] tag:[%s] [%s] provec: %s - %f' 145 | # % (history['user_id'], book['title'], booktag, realtag, PRO_VEC[realtag][0], PRO_VEC[realtag][1]) ) 146 | # 只根据书籍的domain累加 147 | # if 'domain' in book and book['domain']: 148 | # proVec[book['domain'][0][0]] = book['domain'][0][1] 149 | # logging.info('%s %s provec: %s - %f' 150 | # % (history['user_id'], book['title'], book['domain'][0][0], book['domain'][0][1]) ) 151 | 152 | return intVec, proVec 153 | 154 | ### 根据艾宾浩斯遗忘公式,计算两个日子间隔表示的时间系数 155 | def getEbbinghausVal(nowtime, history_date, c=1.25, k=1.84): 156 | timediff = nowtime - datetime.datetime.strptime(history_date, "%Y-%m-%d") 157 | return float(k)/float(math.log(timediff.days)**c+k) 158 | 159 | 160 | def main(): 161 | 162 | query = {'read':{'$gte':15, '$lte':15}} 163 | total = db.users.find(query).count() 164 | for i,u in enumerate( db.users.find(query) ): 165 | print u 166 | updateUserModel(u, datetime.datetime(2015,4,1), 'recsys') 167 | # break 168 | 169 | users_his = getModelUsersHistory() 170 | standard_start = dict([(x,0) for x in stdtag.start]) 171 | # umodels = [] 172 | umodel_books = set() 173 | for u in db.umodel.find(timeout=False): 174 | 175 | # 记录所有umodel的user所阅读的书籍 176 | for h in users_his[u['user_id']]: 177 | umodel_books.add(h['book_id']) 178 | 179 | if 'interest_eval' not in u: 180 | continue 181 | 182 | ## 获得根据用户兴趣向量的推荐书籍, 需要排除已阅读书籍 183 | user_books = [] 184 | for b in loadBookLst(): 185 | weight = 0.0 186 | for t in b['tags']: 187 | if t['name'] in u['interest_eval'].keys(): 188 | weight += u['interest_eval'][t['name']] 189 | if b['id'] not in [ x['book_id'] for x in users_his[u['user_id']] ]: 190 | user_books.append( (b['id'], weight, b['title']) ) 191 | if len(user_books) > BOOK_REC_NUM: 192 | break 193 | 194 | user_books.sort(cmp=lambda a,b:cmp(a[1], b[1]), reverse=True) 195 | u['interest_recbooks'] = user_books 196 | 197 | ## 获得根据用户专业向量的推荐书籍 198 | # 获得用户的专业近邻用户 199 | user_sim_list = [ (u['user_id'], 1.0) ] 200 | for v in db.umodel.find(): 201 | if 'interest_eval' not in v: 202 | continue 203 | similarity = getCosSim(u['pro_eval'], v['pro_eval']) 204 | if similarity > USER_SIM_THRES: 205 | user_sim_list.append( (v['user_id'], similarity) ) 206 | # logging.debug('\nuser_u:[%s] - %r, \nuser_v:[%s] - %r, \n%f, ' 207 | # % (u['user_id'], u['pro_eval'].values(), v['user_id'], v['pro_eval'].values(), similarity) ) 208 | user_sim_list.sort(cmp=lambda a,b: cmp(a[1], b[1]), reverse=True) 209 | u['sim_users'] = user_sim_list 210 | # logging.debug('user_sim_list len: %d' % len(user_sim_list) ) 211 | 212 | ## slope one 算法数据准备, 评分和阅读量,评分差矩阵 213 | # 获得近邻用户和输入用户阅读的本领域书籍 214 | comm_read = set() # book_id 215 | self_read = set() # book_id:rate 216 | # other_read = set() 217 | for um in user_sim_list: # um[0] user_id, um[1] similarity 218 | for x in users_his[um[0]]: 219 | binfo = rsdb.findOneBook(x['book_id']) 220 | if not binfo or 'domain' not in binfo: 221 | continue 222 | if not binfo['domain']: 223 | continue 224 | comm_read.add( x['book_id'] ) 225 | if um[0] == u['user_id']: 226 | self_read.add( x['book_id'] ) 227 | logging.debug('user %s, sim_users len: %d, comm_read len:%d self_read len:%d\r\n\r\n ' % (u['user_id'], len(user_sim_list), len(comm_read), len(self_read)) ) 228 | 229 | # 获得comm_read的近邻用户书籍平均评分和评分人数 230 | avg_rate = {} 231 | for bid in comm_read: 232 | 233 | # 计算平均评分 234 | accrate = 0 235 | readers = 0 236 | for um in user_sim_list: 237 | if bid in [ x['book_id'] for x in users_his[um[0]] ]: # 用户看过 238 | ret = [x['rate'] for x in users_his[um[0]] if x['book_id'] == bid][0] 239 | if int(ret) == 0: 240 | continue 241 | accrate += int(ret) 242 | readers += 1 243 | if readers != 0: 244 | avgrate = float(accrate) / float(readers) 245 | avg_rate[bid] = [avgrate, readers] 246 | else: 247 | avg_rate[bid] = [0,0] 248 | 249 | # 构造评分差矩阵 250 | dev_mtrx = dict([(x,{}) for x in avg_rate.keys()]) 251 | for dev in dev_mtrx.keys(): 252 | # print avg_rate[dev][0] - avg_rate[x[0]][0] 253 | dev_mtrx[dev] = dict([ ( x[0], avg_rate[dev][0] - avg_rate[x[0]][0] ) for x in avg_rate.items() ]) 254 | 255 | # 计算对于输入用户所有本领域的书籍平均分, 256 | book_rate = dict([ (x, 0.0) for x in comm_read if x not in self_read ]) # book_id, rate 257 | for br in book_rate.keys(): 258 | rate = 0.0 259 | if self_read: 260 | for sr in self_read: 261 | rate += dev_mtrx[sr][br] 262 | book_rate[br] = rate / len(self_read) 263 | else: 264 | book_rate[br] = 0 265 | 266 | pro_recomm = book_rate.items() 267 | pro_recomm.sort(cmp=lambda a,b:cmp(a[1], b[1]), reverse=True) 268 | pro_recomm = pro_recomm[:PRO_RECOMM_NUM] 269 | logging.info('pro_recomm len: %d' % len(pro_recomm)) 270 | u['pro_recbooks'] = pro_recomm 271 | for pr in pro_recomm: 272 | book = rsdb.findOneBook(pr[0]) 273 | if book and pr[1] > 0: 274 | print book['title'], pr[1] 275 | 276 | ## 写入用户最终推荐书目 277 | ret = db.umodel.update({"_id":u['_id']}, u) 278 | logging.info('update user recommend books %s' % u['user_id'] ) 279 | 280 | if __name__ == '__main__': 281 | main() 282 | 283 | -------------------------------------------------------------------------------- /engine/wac.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from book_recsys import * 3 | from stdtag import StandardTags 4 | # word2vec = pickle.load(open('dump/Word2VecMtrx.dmp')) 5 | 6 | 7 | stdtag = StandardTags() 8 | stdtag._loadStart() 9 | 10 | def _accWeight(node_dict, level, fno, a=0.0): 11 | up_lev = {} 12 | for nd in node_dict.items(): 13 | p_mat = level[fno][2] 14 | for upnd in p_mat[nd[0]].items(): # 遍历连接着的上层节点 15 | if upnd[1] > 0: 16 | if upnd[0] not in up_lev: 17 | up_lev[upnd[0]] = 0.0 18 | up_lev[upnd[0]] += nd[1]*upnd[1]*(1+a) # 权重叠加 19 | return up_lev 20 | 21 | def findLevel(tag, level): 22 | for i, lev in enumerate(level): 23 | if tag in lev[0]: 24 | return i 25 | 26 | def getWacWeight(tag, level, iter_level=-1): 27 | #print '\r\n\r\n\r\n\r\n', tag 28 | if iter_level == -1: 29 | iter_level = len(level)-1 30 | ret = {} 31 | num = findLevel(tag, level) 32 | 33 | if tag in level[0][2]: 34 | node_dict = {tag:1} 35 | ### 从底层开始遍历 36 | for fno in range(len(level)-1): 37 | node_dict = _accWeight(node_dict, level, fno, 0.3) 38 | if fno > iter_level: 39 | ret = node_dict 40 | break 41 | 42 | for w in ret.items(): 43 | idf = db.tags.find_one({"name":w[0]}, {"idf":1})['idf'] 44 | ret[w[0]] = w[1]*float(idf) 45 | return ret 46 | 47 | ### 按照多到少的节点数排列 48 | def loadLevel(): 49 | level = [] 50 | for num in range(100): 51 | # 第0层为所有节点 52 | f = 'dump/waclevel%d.dmp' % int(num+1) 53 | # print f 54 | if os.path.exists(f): 55 | level.append(pickle.load(open(f))) 56 | prog_d('level append', num, 100) 57 | return level 58 | 59 | def loadAssoStren(): 60 | return pickle.load(open('dump/assostren.dmp')) 61 | 62 | 63 | def print_wac(tag,level,iter): 64 | weight = getWacWeight(tag, level, iter) 65 | print '='*10, tag, '='*10 66 | if not weight: 67 | return 68 | # for w in weight.items(): 69 | # idf = db.tags.find_one({"name":w[0]}, {"idf":1})['idf'] 70 | # weight[w[0]] = w[1]*float(idf) 71 | weight_lst = weight.items() 72 | weight_lst.sort(cmp=lambda a,b:cmp(a[1],b[1]),reverse=True) 73 | for w in weight_lst: 74 | print w[0], w[1], findLevel(w[0], level) 75 | 76 | def test_wac_weight(): 77 | level = loadLevel() 78 | for test_tag in [u'数据处理', u'嵌入式', u'电影']: 79 | print_wac(test_tag,level,3) 80 | 81 | if __name__ == '__main__': 82 | logging.info("running %s" % ' '.join(sys.argv)) 83 | 84 | # test_wac_weight() 85 | # test_recog_rate() 86 | # buildAssoStren() 87 | -------------------------------------------------------------------------------- /spider/README.md: -------------------------------------------------------------------------------- 1 | book-recsys-crawler 2 | =================== 3 | 4 | For crawling douban data. 5 | -------------------------------------------------------------------------------- /spider/doubanbook/bookinfo_starter.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os,sys 3 | import time 4 | import random 5 | import pymongo 6 | from pymongo import MongoClient 7 | 8 | from scrapy.crawler import Crawler 9 | from scrapy import log, signals 10 | from twisted.internet import reactor 11 | from doubanbook.spiders.user_books import UserBooksSpider 12 | from scrapy.utils.project import get_project_settings 13 | 14 | GAP = 20 15 | conn = MongoClient('localhost',27017) 16 | db = conn.group_mems 17 | allusers = [x for x in db.users.find({})] 18 | #random.shuffle(allusers) 19 | slice_n = len(allusers) / GAP 20 | slice_l = len(allusers) % GAP 21 | books_in_db = db.books.find({}, {"id":1}) 22 | 23 | def start_single_crawl(): 24 | for user in db.users.find(timeout=False): 25 | if 'history' in user and user['read'] > 400 and user['read'] - len(user['history']) > 0: 26 | ret = os.system('cd /home/prehawk/windows/proj/book-recsys-crawler/doubanbook && /bin/python /usr/bin/scrapy crawl user_books -a uid=%s' % user['user_id']) 27 | #pstr = 'user_id: %s, read: %d, read_in_db: %d' % (user['user_id'], user['read'], len(user['history'])) 28 | #print pstr 29 | print '====scrapy return value:', ret, '====' 30 | time.sleep(120) 31 | 32 | if __name__ == '__main__': 33 | start_single_crawl() -------------------------------------------------------------------------------- /spider/doubanbook/crawls/user_books-1/requests.queue/p0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/crawls/user_books-1/requests.queue/p0 -------------------------------------------------------------------------------- /spider/doubanbook/crawls/user_books/requests.queue/p1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/crawls/user_books/requests.queue/p1 -------------------------------------------------------------------------------- /spider/doubanbook/crawls/user_books/spider.state: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/crawls/user_books/spider.state -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/__init__.py -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/__init__.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/comm/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/comm/__init__.py -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/comm/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/comm/__init__.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/comm/filter_error_page.py: -------------------------------------------------------------------------------- 1 | # -*-coding:utf-8-*- 2 | 3 | # from scrapy import log 4 | # from scrapy.exceptions import IgnoreRequest 5 | 6 | 7 | # class FilterErrorPage(object): 8 | 9 | # def __init__(self): 10 | # pass 11 | 12 | # def process_request(self, request, spider): 13 | # pass 14 | 15 | # def process_response(self, request, response, spider): 16 | # pass 17 | 18 | # def process_exception(request, exception, spider): 19 | # pass -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/comm/filter_error_page.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/comm/filter_error_page.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/comm/rotate_useragent.py: -------------------------------------------------------------------------------- 1 | # -*-coding:utf-8-*- 2 | """避免被ban策略之一:使用useragent池。 3 | 4 | 使用注意:需在settings.py中进行相应的设置。 5 | """ 6 | 7 | import random 8 | from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware 9 | 10 | class RotateUserAgentMiddleware(UserAgentMiddleware): 11 | 12 | def __init__(self, user_agent=''): 13 | self.user_agent = user_agent 14 | 15 | def process_request(self, request, spider): 16 | ua = random.choice(self.user_agent_list) 17 | #print '===using new ua' 18 | if ua: 19 | request.headers.setdefault('User-Agent', ua) 20 | 21 | #the default user_agent_list composes chrome,IE,firefox,Mozilla,opera,netscape 22 | #for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php 23 | user_agent_list = [\ 24 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 " 25 | "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", 26 | "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 " 27 | "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", 28 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 " 29 | "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", 30 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 " 31 | "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", 32 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 " 33 | "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", 34 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 " 35 | "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", 36 | "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 " 37 | "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", 38 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 " 39 | "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", 40 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 " 41 | "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", 42 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 " 43 | "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", 44 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 " 45 | "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", 46 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 " 47 | "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", 48 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 " 49 | "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", 50 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 " 51 | "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", 52 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 " 53 | "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", 54 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 " 55 | "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", 56 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 " 57 | "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", 58 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 " 59 | "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" 60 | ] -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/comm/rotate_useragent.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/comm/rotate_useragent.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/items.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Define here the models for your scraped items 4 | # 5 | # See documentation in: 6 | # http://doc.scrapy.org/en/latest/topics/items.html 7 | 8 | import scrapy 9 | 10 | class GroupItem(scrapy.Item): 11 | group_id = scrapy.Field() 12 | user_count = scrapy.Field() 13 | users = scrapy.Field() # a list of MemberItem 14 | 15 | class MemberItem(scrapy.Item): 16 | user_id = scrapy.Field() 17 | read = scrapy.Field() # total read number from home page. 18 | crawled = scrapy.Field() # bool, indicated that user has been first crawled 19 | # book_count = scrapy.Field() 20 | # books = scrapy.Field() # a list of bookid 21 | # crawled = scrapy.Field() 22 | 23 | class RateItem(scrapy.Item): 24 | user_id = scrapy.Field() 25 | book_id = scrapy.Field() 26 | rate = scrapy.Field() 27 | date = scrapy.Field() 28 | tags = scrapy.Field() 29 | comment = scrapy.Field() 30 | 31 | class BookItem(scrapy.Item): 32 | info = scrapy.Field() 33 | 34 | 35 | class HistoryItem(scrapy.Item): 36 | user_id = scrapy.Field() 37 | collects = scrapy.Field() 38 | errstr = scrapy.Field() -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/items.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/items.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/pipelines.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Define your item pipelines here 4 | # 5 | # Don't forget to add your pipeline to the ITEM_PIPELINES setting 6 | # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html 7 | 8 | import datetime 9 | import pymongo 10 | from pymongo import MongoClient 11 | from scrapy.exceptions import DropItem 12 | 13 | from doubanbook.spiders import * 14 | from doubanbook.items import * 15 | 16 | 17 | conn = MongoClient('localhost',27017) 18 | db = conn.group_mems 19 | 20 | class DoubanbookPipeline(object): 21 | 22 | def __init__(self): 23 | self.still_start_urls = [] 24 | pass 25 | 26 | def process_item(self, item, spider): 27 | if isinstance(item, MemberItem): 28 | updoc = db.users.find_one({"user_id":item['user_id']}) 29 | if updoc: 30 | updoc['crawled'] = item['crawled'] 31 | updoc['read'] = item['read'] 32 | updoc['uptime'] = datetime.datetime.utcnow() 33 | db.users.update({"user_id":item['user_id']}, updoc, upsert=True) 34 | print 'mongodb: updating %s with %d read' % (item['user_id'], item['read']) 35 | elif isinstance(item, RateItem): 36 | db.users.update({"user_id":item['user_id']}, {"$addToSet":{"history":dict(item)}}) 37 | elif isinstance(item, BookItem): 38 | db.books.update({'id':item['info']['id']}, dict(item['info']), upsert=True) 39 | #print 'mongodb: adding << %s >> ' % item['info']['id'] 40 | elif isinstance(item, HistoryItem): 41 | pass 42 | 43 | def open_spider(self, spider): 44 | users_in_db = db.users.find({}) 45 | if isinstance(spider, group_mems.GroupMemsSpider): 46 | for u in users_in_db: 47 | spider.users.add(u['user_id']) 48 | spider.prime_size = len(spider.users) 49 | elif isinstance(spider, user_books.UserBooksSpider): 50 | for b in db.books.find({}, {"id":1}): 51 | spider.books.add(b['id']) 52 | 53 | for u in users_in_db: 54 | delta = datetime.datetime.utcnow() - u['uptime'] 55 | if u['crawled'] == 1 or ( delta.days > 0 and u['read'] > 15 ): 56 | url = 'http://book.douban.com/people/%s/' % u['user_id'] 57 | if 'history' in u: 58 | spider.read_in_db[u['user_id']] = len(u['history']) 59 | elif u['crawled'] == 0: 60 | spider.read_in_db[u['user_id']] = -1 61 | else: 62 | spider.read_in_db[u['user_id']] = 0 63 | 64 | # if spider.read_in_db[u['user_id']] - u['read'] != 0: 65 | # print '%d, collects %d/%d' % (u['crawled'], spider.read_in_db[u['user_id']], u['read']) 66 | # 剩下的重试很多次还存在的初始链接应该是不存在用户了 67 | #print '=== start_urls: %d ===' % len(spider.start_urls) 68 | 69 | def close_spider(self, spider): 70 | pass -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/pipelines.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/pipelines.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/settings.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Scrapy settings for doubanbook project 4 | # 5 | # For simplicity, this file contains only the most important settings by 6 | # default. All the other settings are documented here: 7 | # 8 | # http://doc.scrapy.org/en/latest/topics/settings.html 9 | # 10 | 11 | BOT_NAME = 'doubanbook' 12 | 13 | SPIDER_MODULES = ['doubanbook.spiders'] 14 | NEWSPIDER_MODULE = 'doubanbook.spiders' 15 | DOWNLOAD_DELAY = 2 16 | COOKIES_ENABLED = True 17 | CONCURRENT_REQUESTS = 1 18 | DOWNLOAD_TIMEOUT = 10 19 | 20 | #AUTOTHROTTLE_ENABLED = True 21 | #AUTOTHROTTLE_DEBUG = True 22 | 23 | 24 | LOG_LEVEL = 'INFO' 25 | DOWNLOADER_MIDDLEWARES = { 26 | 'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None, 27 | 'doubanbook.comm.rotate_useragent.RotateUserAgentMiddleware' :400, 28 | } 29 | 30 | ITEM_PIPELINES = { 31 | 'doubanbook.pipelines.DoubanbookPipeline': 300, 32 | } 33 | # Crawl responsibly by identifying yourself (and your website) on the user-agent 34 | #USER_AGENT = 'doubanbook (+http://www.yourdomain.com)' 35 | -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/settings.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/settings.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/spiders/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/spiders/__init__.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/spiders/book_infos.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import scrapy 3 | import json 4 | 5 | from scrapy.selector import Selector 6 | from scrapy.contrib.spiders import CrawlSpider, Rule 7 | from scrapy.contrib.linkextractors import LinkExtractor 8 | from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 9 | from scrapy.contrib.linkextractors.lxmlhtml import LxmlLinkExtractor 10 | from scrapy.utils.url import urljoin_rfc 11 | from doubanbook.items import * 12 | from scrapy.exceptions import CloseSpider 13 | 14 | import pymongo 15 | from pymongo import MongoClient 16 | 17 | conn = MongoClient('localhost',27017) 18 | db = conn.group_mems 19 | 20 | class BookInfosSpider(scrapy.Spider): 21 | 22 | name = "book_infos" 23 | allowed_domains = ["douban.com"] 24 | start_urls = ['https://api.douban.com/v2/book/%s' % b['id'] for b in db.books.find() if 'title' not in b] 25 | handle_httpstatus_list = [403] 26 | count = 0 27 | 28 | def parse(self, response): 29 | if response.status == 200: 30 | bt = BookItem() 31 | #self.book_count += 1 32 | book_info = json.loads(response.body) 33 | bt['info'] = book_info 34 | self.count += 1 35 | self.log('add info in book << %s >>, totally %d books ' % (book_info['id'], self.count), 36 | level=scrapy.log.INFO) 37 | yield bt 38 | elif response.status == 403: 39 | self.log('api limit exceeded.', level=scrapy.log.INFO) 40 | raise CloseSpider('api limit exceeded.') 41 | return 42 | -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/spiders/book_infos.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/spiders/book_infos.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/spiders/group_mems.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import scrapy 3 | 4 | from scrapy.selector import Selector 5 | from scrapy.contrib.spiders import CrawlSpider, Rule 6 | from scrapy.contrib.linkextractors import LinkExtractor 7 | from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 8 | from scrapy.contrib.linkextractors.lxmlhtml import LxmlLinkExtractor 9 | from scrapy.utils.url import urljoin_rfc 10 | from doubanbook.items import MemberItem, GroupItem 11 | 12 | # 填入需要抓取的小组id 13 | ids = ['ns', 'MLPR', 'MLPR', '27885', 'BigData', 'dm', '503043', '325827', 'User-behavior', 'socialcomputing'] # 299259 14 | 15 | class GroupMemsSpider(CrawlSpider): 16 | 17 | name = "group_mems" 18 | allowed_domains = ["douban.com"] 19 | start_urls = ['http://www.douban.com/group/%s/members' % x for x in ids] 20 | #print start_urls[0] 21 | rules = [ 22 | # 小组翻页规则 23 | Rule(LxmlLinkExtractor(allow = (r'/group/\w+/members\?start=\d+.*', ), unique = False), 24 | callback = 'parse_group_page', follow = True, 25 | process_links = lambda links: [x for x in links if x.text == u'后页>']), 26 | ] 27 | 28 | users = set() # users = set() 29 | prime_size = 1 30 | user_count = 0 31 | crawl_count = 0 32 | 33 | def parse_start_url(self, response): 34 | sel = Selector(response) 35 | # self.group_id = sel.xpath('//*[@id="content"]//div[@class="title"]/a/@href').re(r'http://www.douban.com/group/(\w+)/.*')[0] 36 | #self.user_count = int(sel.xpath('//*[@id="content"]//span[@class="count"]/text()').re('(\d+)')[0]) 37 | self.parse_group_page(response) 38 | 39 | def parse_group_page(self, response): 40 | sel = Selector(response) 41 | for mem in sel.xpath('//div[@class="member-list"]//div[@class="name"]/a/@href'): 42 | self.crawl_count += 1 43 | m = mem.re('http://www.douban.com/group/people/(\w+)') 44 | if m and m[0] not in self.users: 45 | self.users.add(m[0]) 46 | mem = MemberItem() 47 | mem['user_id'] = m[0] 48 | mem['read'] = 0 49 | mem['crawled'] = 0 50 | yield mem 51 | self.log('%d new users got(unique), totally %d members crawled' % (len(self.users) - self.prime_size, self.crawl_count), 52 | level=scrapy.log.INFO) 53 | 54 | 55 | -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/spiders/group_mems.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/spiders/group_mems.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/spiders/user_books.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import re 3 | import time 4 | import scrapy 5 | 6 | import json 7 | from twisted.internet import defer, reactor 8 | from scrapy.selector import Selector 9 | from scrapy.contrib.spiders import CrawlSpider, Rule 10 | from scrapy.contrib.linkextractors import LinkExtractor 11 | from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 12 | from scrapy.contrib.linkextractors.lxmlhtml import LxmlLinkExtractor 13 | from scrapy.utils.url import urljoin_rfc 14 | from scrapy.exceptions import CloseSpider 15 | from doubanbook.items import * 16 | 17 | 18 | class UserBooksSpider(CrawlSpider): 19 | 20 | def __init__(self, myarg=None, *args, **kwargs): 21 | super(UserBooksSpider, self).__init__(*args, **kwargs) 22 | al = myarg.split('#') 23 | uid = al[0] 24 | self.page = al[1] 25 | self.start_urls = ['http://book.douban.com/people/%s/' % uid] 26 | #print pg 27 | 28 | name = "user_books" 29 | allowed_domains = ["douban.com"] 30 | page = 0 31 | rules = [] 32 | handle_httpstatus_list = [403] 33 | books = set() 34 | read_in_db = dict() # record the amount of collects of a user that has been crawled. 35 | 36 | book_count = 0 37 | def parse_start_url(self, response): 38 | if response.status == 403: 39 | raise CloseSpider('meet blocking! parse_start_url') 40 | self.log('meet blocking!', level=scrapy.log.WARNING) 41 | return 42 | sel = Selector(response) 43 | label = sel.xpath('//*[@id="content"]//*[@class="number-accumulated"]//*[@class="number-label"]/text()').extract() 44 | read = sel.xpath('//*[@id="content"]//*[@class="number-accumulated"]//*[@class="number"]/text()').extract() 45 | 46 | if label and label[0] == u'读过': 47 | read = int(read[0]) 48 | #print 'a' 49 | else: 50 | read = 0 51 | #print 'b' 52 | #print label, read 53 | #d = defer.Deferred() 54 | #reactor.callLater(pause, d.callback, (x, pause)) 55 | mem = MemberItem() 56 | user_id = re.search(r'http://book.douban.com/people/(\w+)/', response.url).group(1) 57 | mem['user_id'] = user_id 58 | mem['crawled'] = 1 59 | mem['read'] = read 60 | #time.sleep(2) 61 | if read > self.read_in_db[user_id]: 62 | if self.read_in_db[user_id] == -1: 63 | self.log('Add @ %s with %d collects.' % (user_id, read), 64 | level=scrapy.log.INFO) 65 | else: 66 | self.log('Refresh @ %s with %d collects(%d recorded).' % (user_id, read, self.read_in_db[user_id]), 67 | level=scrapy.log.INFO) 68 | #mem['read'] = read # 更新阅读量 69 | #page_appendix = 'collect?start=%d&sort=time&rating=all&filter=all&mode=grid' % int(self.page) 70 | req = scrapy.Request(url=response.url + 'collect',#page_appendix, 71 | callback=self.parse_user_collect) 72 | req.meta['user_id'] = user_id 73 | yield req 74 | else: 75 | #if self.read_in_db[user_id] > 0: 76 | #mem['read'] = read # 更新阅读量 77 | self.log('Ignore @ %s (saved)' % user_id, 78 | level=scrapy.log.INFO) 79 | yield mem 80 | 81 | 82 | def parse_user_collect(self, response): 83 | if response.status == 403: 84 | raise CloseSpider('meet blocking! parse_user_collect') 85 | self.log('meet blocking!', level=scrapy.log.WARNING) 86 | return 87 | meta = response.meta 88 | sel = Selector(response) 89 | collect = [] 90 | for sub in sel.xpath('//*[@id="content"]//ul[@class="interest-list"]//li[@class="subject-item"]'): 91 | book_id = sub.xpath('*[@class="pic"]/a/@href').re(r'http://book.douban.com/subject/(\w+)/')[0] 92 | book_name = sub.xpath('*[@class="info"]//a/@title').extract()[0] 93 | #self.users[meta['user_id']]['book'].append(book_id) 94 | rt = RateItem() 95 | rt['user_id'] = meta['user_id'] 96 | rt['book_id'] = book_id 97 | if book_id not in self.books: 98 | self.log('Add New book to mongodb: << %s >> (%d books)' % (book_id, len(self.books)), level=scrapy.log.INFO) 99 | self.books.add(book_id) 100 | bt = BookItem() 101 | book_empty = dict() 102 | book_empty['id'] = book_id 103 | bt['info'] = book_empty 104 | yield bt 105 | # req = scrapy.Request(url='https://api.douban.com/v2/book/%s' % book_id, 106 | # callback=self.parse_book_page) 107 | # req.meta['book_id'] = book_id 108 | # yield req 109 | # else: 110 | # self.log('Using Existed book: << %s >>' % book_id, level=scrapy.log.INFO) 111 | 112 | collect.append(book_id) 113 | 114 | rate = sub.xpath('*[@class="info"]/*[@class="short-note"]//span[1]/@class').re(r'\w+?([1-5])-t') 115 | if rate: 116 | rt['rate'] = rate[0] 117 | else: 118 | rt['rate'] = 0 119 | date = sub.xpath('*[@class="info"]/*[@class="short-note"]//*[@class="date"]/text()').re(r'(\d{4}-\d{2}-\d{2})\s+\w+')[0] 120 | if date: 121 | rt['date'] = date 122 | else: 123 | self.log('parse_user_collect date parse error!', 124 | level=scrapy.log.WARNING) 125 | tags = sub.xpath('*[@class="info"]/*[@class="short-note"]//*[@class="tags"]/text()').re(r'.*: (.*)') 126 | if tags: 127 | rt['tags'] = tags[0].split(' ') 128 | 129 | comment = sub.xpath('*[@class="info"]/*[@class="short-note"]/p/text()').extract() 130 | if comment == [u'\n ']: 131 | rt['comment'] = None 132 | else: 133 | rt['comment'] = comment[0] 134 | 135 | yield rt 136 | 137 | 138 | self.log('get %d rate history with @ %s' % (len(collect), meta['user_id']), 139 | level=scrapy.log.INFO) 140 | print response.url 141 | self.read_in_db[meta['user_id']] += len(collect) 142 | 143 | # 翻页 144 | next_page = sel.xpath('//*[@id="content"]//span[@class="next"]/a/@href').extract() 145 | if next_page: 146 | req = scrapy.Request(url=next_page[0], callback=self.parse_user_collect) 147 | req.meta['user_id'] = meta['user_id'] 148 | yield req 149 | else: 150 | # End of the pages. 151 | self.log(' === End @ %s with %d new collects(shown below) ===' % (meta['user_id'], len(collect)), 152 | level=scrapy.log.INFO) 153 | self.log(' '.join(collect), 154 | level=scrapy.log.INFO) 155 | ht = HistoryItem() 156 | ht['user_id'] = meta['user_id'] 157 | ht['errstr'] = '' 158 | ht['collects'] = len(collect) 159 | print repr(ht) 160 | yield ht 161 | 162 | def parse_book_page(self, response): 163 | meta = response.meta 164 | bt = BookItem() 165 | if response.status == 200: 166 | self.book_count += 1 167 | meta = response.meta 168 | book_info = json.loads(response.body) 169 | bt['info'] = book_info 170 | elif response.status == 403: 171 | # self.log('meet blocking! parse_book_page (%d crawled)' % self.book_count, 172 | # level=scrapy.log.INFO) 173 | book_empty = dict() 174 | book_empty['id'] = meta['book_id'] 175 | bt['info'] = book_empty 176 | #raise CloseSpider('meet blocking! parse_book_page (%d crawled)' % self.book_count) 177 | yield bt 178 | 179 | 180 | -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/spiders/user_books.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/spider/doubanbook/doubanbook/spiders/user_books.pyc -------------------------------------------------------------------------------- /spider/doubanbook/doubanbook/store.py: -------------------------------------------------------------------------------- 1 | import pymongo 2 | import random 3 | 4 | HOST = "127.0.0.1" 5 | PORT = 27017 6 | client = pymongo.MongoClient(HOST, PORT) 7 | NewsDB = client.NewsDB -------------------------------------------------------------------------------- /spider/doubanbook/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # http://doc.scrapy.org/en/latest/topics/scrapyd.html 5 | 6 | [settings] 7 | default = doubanbook.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = doubanbook 12 | -------------------------------------------------------------------------------- /spider/doubanbook/userbook_starter.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os,sys 3 | import time 4 | import random 5 | import pymongo 6 | from pymongo import MongoClient 7 | 8 | from scrapy.crawler import Crawler 9 | from scrapy import log, signals 10 | from twisted.internet import reactor 11 | from doubanbook.spiders.user_books import UserBooksSpider 12 | from scrapy.utils.project import get_project_settings 13 | 14 | GAP = 20 15 | conn = MongoClient('localhost',27017) 16 | db = conn.group_mems 17 | allusers = [x for x in db.users.find({})] 18 | #random.shuffle(allusers) 19 | slice_n = len(allusers) / GAP 20 | slice_l = len(allusers) % GAP 21 | books_in_db = db.books.find({}, {"id":1}) 22 | 23 | def start_single_crawl(): 24 | total = 0 25 | count = 0 26 | for user in db.users.find({"read":{"$gte":15}}): 27 | total += 1 28 | if 'history' in user and (user['read'] - len(user['history']) < 2): 29 | count += 1 30 | 31 | for user in db.users.find({"read":{"$gte":15}}): 32 | if 'history' not in user or (user['read'] - len(user['history']) > 5): 33 | ret = os.system('cd /home/prehawk/windows/proj/book-recsys-crawler/doubanbook && /bin/python /usr/bin/scrapy crawl user_books -a myarg=%s#%s' % (user['user_id'], '0') ) 34 | #pstr = 'user_id: %s, read: %d, read_in_db: %d' % (user['user_id'], user['read'], len(user['history'])) 35 | #print pstr 36 | count += 1 37 | print '====crawled:%d/%d====' % (count, total) 38 | time.sleep(1) 39 | 40 | if __name__ == '__main__': 41 | start_single_crawl() 42 | -------------------------------------------------------------------------------- /spider/sublime-save.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": 3 | [ 4 | { 5 | "follow_symlinks": true, 6 | "path": "doubanbook" 7 | } 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /website/README.md: -------------------------------------------------------------------------------- 1 | book-recsys-website 2 | =================== 3 | 4 | UI of the book-recsys 5 | -------------------------------------------------------------------------------- /website/app.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from model import * 3 | import web 4 | from web import form 5 | 6 | urls = ( 7 | '/', 'Index', 8 | '/book/(\d+)', 'Book', 9 | '/user/(\d+)', 'User', 10 | '/tag/(\d+)', 'Tag', 11 | '/login', 'Login', 12 | '/logout', 'Logout', 13 | '/register', 'Register', 14 | ) 15 | 16 | #模板公共变量 17 | t_globals = { 18 | 'datestr': web.datestr, 19 | 'cookie': web.cookies, 20 | } 21 | 22 | app = web.application(urls, locals()) 23 | render = web.template.render('templates/') 24 | session = web.session.Session(app, web.session.DiskStore('sessions')) 25 | web.config.debug = False 26 | 27 | 28 | login = form.Form( 29 | form.Textbox('username'), 30 | form.Password('password'), 31 | form.Button('login') 32 | ) 33 | 34 | register = form.Form( 35 | form.Textbox('username', form.regexp(r".{3,20}$", '用户名长度为3-20位'), description=u'用户名'), 36 | form.Textbox('email', form.regexp(r".*@.*", "must be a valid email address") , description=u'电子邮箱') 37 | form.Password("password", form.regexp(r".{6,20}$", '密码长度为6-20位'), description=u"密码"), 38 | form.Password("password2", description=u"确认密码"), 39 | form.Button("register", type="submit", description="submit"), 40 | form.Textbox('idcode') 41 | validators = [ form.Validator("两次输入的密码不一致", lambda i: i.password == i.password2) ] 42 | ) 43 | 44 | class Index(object): 45 | def GET(self, name='prehawk'): 46 | return render.index(name, popbooks, recbooks) 47 | def POST(self): 48 | pass 49 | 50 | class Login(object): 51 | def POST(self): 52 | f = form 53 | print '%r' % f 54 | 55 | class Book(object): 56 | def GET(self, book_id): 57 | # return '

%s

' % book_id 58 | book_info = rsdb.findOneBook(book_id) 59 | return render.book(book_info) 60 | 61 | class User(object): 62 | pass 63 | 64 | class Tag(object): 65 | pass 66 | 67 | class Logout(object): 68 | pass 69 | 70 | class Register(object): 71 | pass 72 | 73 | if __name__ == '__main__': 74 | app.run() -------------------------------------------------------------------------------- /website/blog/blog.py: -------------------------------------------------------------------------------- 1 | #coding:utf-8 2 | import web 3 | # import model 4 | 5 | #URL映射 6 | urls = ( 7 | '/', 'Index', 8 | '/view/(/d+)', 'View', 9 | '/new', 'New', 10 | '/delete/(/d+)', 'Delete', 11 | '/edit/(/d+)', 'Edit', 12 | '/login', 'Login', 13 | '/logout', 'Logout', 14 | ) 15 | app = web.application(urls, globals()) 16 | 17 | #模板公共变量 18 | t_globals = { 19 | 'datestr': web.datestr, 20 | 'cookie': web.cookies, 21 | } 22 | 23 | #指定模板目录,并设定公共模板 24 | render = web.template.render('templates', base='base', globals=t_globals) 25 | 26 | #创建登录表单 27 | login = web.form.Form( 28 | web.form.Textbox('username'), 29 | web.form.Password('password'), 30 | web.form.Button('login') 31 | ) 32 | 33 | #首页类 34 | class Index: 35 | def GET(self): 36 | login_form = login() 37 | # posts = model.get_posts() 38 | return render.index(login_form) 39 | def POST(self): 40 | login_form = login() 41 | if login_form.validates(): 42 | if login_form.d.username == 'admin' and login_form.d.password == 'admin': 43 | web.setcookie('username', login_form.d.username) 44 | raise web.seeother('/') 45 | 46 | class Login: 47 | def POST(self): 48 | return "test: %r, %s" % (web.form.Form().d, type(web.form.Form().d)) 49 | 50 | #查看文章类 51 | class View: 52 | def GET(self, id): 53 | post = model.get_post(int(id)) 54 | return render.view(post) 55 | 56 | #新建文章类 57 | class New: 58 | form = web.form.Form( 59 | web.form.Textbox('title', 60 | web.form.notnull, 61 | size=30, 62 | description='Post title: '), 63 | web.form.Textarea('content', 64 | web.form.notnull, 65 | rows=30, 66 | cols=80, 67 | description='Post content: '), 68 | web.form.Button('Post entry'), 69 | ) 70 | def GET(self): 71 | form = self.form() 72 | return render.new(form) 73 | def POST(self): 74 | form = self.form() 75 | if not form.validates(): 76 | return render.new(form) 77 | model.new_post(form.d.title, form.d.content) 78 | raise web.seeother('/') 79 | 80 | #删除文章类 81 | class Delete: 82 | def POST(self, id): 83 | model.del_post(int(id)) 84 | raise web.seeother('/') 85 | 86 | #编辑文章类 87 | class Edit: 88 | def GET(self, id): 89 | post = model.get_post(int(id)) 90 | form = New.form() 91 | form.fill(post) 92 | return render.edit(post, form) 93 | def POST(self, id): 94 | form = New.form() 95 | post = model.get_post(int(id)) 96 | if not form.validates(): 97 | return render.edit(post, form) 98 | model.update_post(int(id), form.d.title, form.d.content) 99 | raise web.seeother('/') 100 | 101 | #退出登录 102 | class Logout: 103 | def GET(self): 104 | web.setcookie('username', '', expires=-1) 105 | raise web.seeother('/') 106 | 107 | #定义404错误显示内容 108 | def notfound(): 109 | return web.notfound("Sorry, the page you were looking for was not found.") 110 | 111 | app.notfound = notfound 112 | #运行 113 | if __name__ == '__main__': 114 | app.run() -------------------------------------------------------------------------------- /website/blog/blog.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/website/blog/blog.pyc -------------------------------------------------------------------------------- /website/blog/model.py: -------------------------------------------------------------------------------- 1 | #coding:utf-8 2 | import web 3 | import datetime 4 | #数据库连接 5 | db = web.database(dbn = 'mysql', db = 'test', user = 'root', pw = '123456') 6 | #获取所有文章 7 | def get_posts(): 8 | return db.select('entries', order = 'id DESC') 9 | 10 | #获取文章内容 11 | def get_post(id): 12 | try: 13 | return db.select('entries', where = 'id=$id', vars = locals())[0] 14 | except IndexError: 15 | return None 16 | #新建文章 17 | def new_post(title, text): 18 | db.insert('entries', 19 | title = title, 20 | content = text, 21 | posted_on = datetime.datetime.utcnow()) 22 | #删除文章 23 | def del_post(id): 24 | db.delete('entries', where = 'id = $id', vars = locals()) 25 | 26 | #修改文章 27 | def update_post(id, title, text): 28 | db.update('entries', 29 | where = 'id = $id', 30 | vars = locals(), 31 | title = title, 32 | content = text) -------------------------------------------------------------------------------- /website/blog/model.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prehawk1999/book-recsys/5ef077532ca143d78233d84206b80b75a524f34c/website/blog/model.pyc -------------------------------------------------------------------------------- /website/blog/templates/base.html: -------------------------------------------------------------------------------- 1 | $def with (page) 2 | 3 | 4 | My Blog 5 | 16 | 17 | 18 | 19 | 24 | 25 | $:page 26 | 27 | -------------------------------------------------------------------------------- /website/blog/templates/edit.html: -------------------------------------------------------------------------------- 1 | $def with (post, form) 2 |

Edit $form.d.title

3 |
4 | $:form.render() 5 |
6 |

Delete post

7 |
8 | 9 |
-------------------------------------------------------------------------------- /website/blog/templates/index.html: -------------------------------------------------------------------------------- 1 | $def with (login_form) 2 |

Blog posts

3 | $if not cookie().get('username'): 4 |
5 | $:login_form.render() 6 |
7 | $else: 8 | Welcome $cookie().get('username')!Logout 9 |
10 | 11 | 12 |
13 | -------------------------------------------------------------------------------- /website/blog/templates/new.html: -------------------------------------------------------------------------------- 1 | $def with (form) 2 |

New Blog Post

3 |
4 | $:form.render() 5 |
-------------------------------------------------------------------------------- /website/blog/templates/view.html: -------------------------------------------------------------------------------- 1 | $def with (post) 2 |

$post.title

3 | $post.posted_on
4 | $post.content -------------------------------------------------------------------------------- /website/model.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import pymongo 3 | from pymongo import MongoClient 4 | 5 | # mongo数据库配置 6 | conn = MongoClient('localhost',27017) 7 | db = conn.group_mems 8 | 9 | # 有缓存的数据库类,第一次访问的信息会被保存下来 10 | class RecsysDatabase(object): 11 | 12 | def __init__(self): 13 | self.books_info = {} 14 | self.users_info = {} 15 | # self.umodel_info = {} 16 | self.tags_info = {} 17 | 18 | def findOneBook(self, book_id): 19 | if book_id in self.books_info: 20 | return self.books_info[book_id] 21 | else: 22 | book = db.books.find_one({"id":book_id}) 23 | if book and 'title' in book: 24 | self.books_info[book_id] = book 25 | return book 26 | 27 | def findOneUser(self, user_id): 28 | if user_id in self.users_info: 29 | return self.users_info[user_id] 30 | else: 31 | user = db.users.find_one({"user_id":user_id}) 32 | if user: 33 | self.users_info[user_id] = user 34 | return user 35 | 36 | def findOneTag(self, tag_id): 37 | if tag_id in self.tags_info: 38 | return self.tags_info[tag_id] 39 | else: 40 | tag = db.tags.find_one({"name":tag_id}) 41 | if tag: 42 | self.tags_info[tag_id] = tag 43 | return tag 44 | 45 | def findOneModel(self, mod_id): 46 | if mod_id in self.umodel_info: 47 | return self.umodel_info[mod_id] 48 | else: 49 | mod = db.umodel.find_one({"user_id":mod_id}) 50 | if mod: 51 | self.umodel_info[mod_id] = mod 52 | return mod 53 | 54 | rsdb = RecsysDatabase() -------------------------------------------------------------------------------- /website/sessions/50731696fe57545e4a8c7cfcd64b894a8c9bbb1a: -------------------------------------------------------------------------------- 1 | KGRwMQpTJ2lwJwpwMgpWMTI3LjAuMC4xCnAzCnNTJ3Nlc3Npb25faWQnCnA0ClMnNTA3MzE2OTZm 2 | ZTU3NTQ1ZTRhOGM3Y2ZjZDY0Yjg5NGE4YzliYmIxYScKcDUKcy4= 3 | -------------------------------------------------------------------------------- /website/sessions/e00833b4b3dda6e25eaf17d9f2a8026c23c5a45a: -------------------------------------------------------------------------------- 1 | KGRwMQpTJ2lwJwpwMgpWMTI3LjAuMC4xCnAzCnNTJ3Nlc3Npb25faWQnCnA0ClMnZTAwODMzYjRi 2 | M2RkYTZlMjVlYWYxN2Q5ZjJhODAyNmMyM2M1YTQ1YScKcDUKcy4= 3 | -------------------------------------------------------------------------------- /website/templates/book.html: -------------------------------------------------------------------------------- 1 | $def with (book_info) 2 | 3 | $if book_info: 4 | $book_info 5 | $else: 6 | Hello, world! -------------------------------------------------------------------------------- /website/templates/index.html: -------------------------------------------------------------------------------- 1 | $def with (name, popbooks) 2 | $if not cookie().get('username'): 3 | $if name: 4 | I just wanted to say hello to $name. 5 | $else: 6 | Hello, world! -------------------------------------------------------------------------------- /website/test.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import web 3 | import time 4 | 5 | urls = ( 6 | '/', 'index', 7 | '/xml', 'pushxml', 8 | '/login', 'login', 9 | '/logout', 'logout', 10 | ) 11 | render = web.template.render('templates/') 12 | web.config.debug = False 13 | app = web.application(urls, locals()) 14 | session = web.session.Session(app, web.session.DiskStore('sessions')) 15 | 16 | class index(): 17 | def GET(self): 18 | try: 19 | if session.logged_in == True: 20 | return '

You are logged in

Logout' 21 | except AttributeError: 22 | pass 23 | return '

You are not logged in.

Login now' 24 | 25 | def authorize(func): 26 | def logged(*args,**dic): 27 | if session.logged_in==True: 28 | func(*args,**dic) 29 | else: 30 | raise web.seeother('/login') 31 | return logged 32 | 33 | class pushxml(): 34 | # @authorize 35 | def GET(self): 36 | try: 37 | if session.logged_in == True: 38 | web.header('Content-Type', 'text/xml') 39 | i = web.input(data=None) 40 | return render.response(i.data) 41 | except AttributeError: 42 | pass 43 | 44 | class login(): 45 | def GET(self): 46 | try: 47 | session.logged_in = False 48 | except AttributeError: 49 | pass 50 | return """ 51 |
52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 |
User:
Password:
66 |
67 | """ 68 | 69 | def POST(self): 70 | login_data = web.input() 71 | if login_data.user == 'a' and login_data.passwd == 'a': 72 | session.logged_in = True 73 | print "posted" 74 | print session 75 | raise web.seeother('/') 76 | 77 | class logout(): 78 | def GET(self): 79 | try: 80 | session.logged_in = False 81 | session.kill() 82 | except AttributeError: 83 | pass 84 | raise web.seeother('/') 85 | 86 | if __name__ == '__main__': 87 | app.run() --------------------------------------------------------------------------------