def main(): json_data = open('./items.json') data = json.load(json_data) print 'starting' for i in range(0, len(data)-1): print i s = "" identifier = "" title = "" totalText = "" try: s = data[i]['identifier'] identifier = s[0][18:].replace("%3A", "") summary = data[i]['desc'][0].strip() title = data[i]['title'][0].strip() totalText += summary totalText += " " totalText += title totalText += " " totalText += identifier except: print "error" documentPayload = ({'identifier':identifier, 'title': title, 'summary' : summary}) documents.append({'text' : totalText, 'payload' : documentPayload}) corpus =[{'id': text['payload']['identifier'], 'tokens' : utils.simple_preprocess(text['text']), 'payload' : text['payload']} for num, text in enumerate(documents)] service = SessionServer('./thesite/simdatabase') service.train(corpus, method='lsi') service.index(corpus) service.commit()
def index_nodes(): print "loading server" service = SessionServer('/mnt/hgfs/Shared/my_server/') print "loading model" service.open_session() service.session.drop_index() service.session.model = simserver.SimModel.load("/mnt/hgfs/Shared/wiki") print service.session.model print "loading nodes" nodes = Node.objects.all() print "Building corpus" corpus = [{'id':node.pk,'tokens':re.findall(r"[\w']+",node.question.lower())} for node in nodes] print "indexing corpus" service.index(corpus) print service.stable.keys service.commit()
#let just index the corpus texts=['如果 也 没有 的话 。 这个 确实 没有 办法 了 。 我 个人 建议您 重装 一遍 这个 软件 看看 是否 还是 一样 卸载 程序 里 也 没有 呢', '我能 直接 删掉 这些 文件 吗 ?', '不 建议 呢 。 因为 不 确定 这些 文件 中 是否 有 其他软件 的 文件 呢', '好 的 , 使用 看看 会断 么', '它 只是 有时 自动 掉 , 以后 看看 怎么样', '这个 是 您 无线 驱动 : http : / / driverdl . lenovo . com . cn / lenovo / driverfilesuploadfloder / 32228 / wlan _ win8 . 1 . exe', '要是 问题 还是 出现 您 可以 安装 这个 试试', '10 几个 版本 都 试过 了 么'] corpus=[{'id': 'doc_%i' % num, 'tokens': text.split()} for num, text in enumerate(texts)] server.index(corpus) server.delete(['doc_5']) # try to del one doc server.commit() texts=['如果 也 没有 的话 。 这个 确实 没有 办法 了 。 我 个人 建议您 重装 一遍 这个 软件 看看 是否 还是 一样 卸载 程序 里 也 没有 呢', '我能 直接 删掉 这些 文件 吗 ?', '不 建议 呢 。 因为 不 确定 这些 文件 中 是否 有 其他软件 的 文件 呢', '好 的 , 使用 看看 会断 么'] corpus=[{'id': 'eval_%i' % num, 'tokens': text.split()} for num, text in enumerate(texts)] #and find_similar for each documents, which should return doc_0, doc_1 doc_2. for s in corpus: print server.find_similar(s)
class SimService(object): def __init__(self, path, preprocess, deaccent=True, lowercase=True, stemmer=None, stopwords=None): self.service = SessionServer(path) self.deaccent = deaccent self.lowercase = lowercase self.preprocess = preprocess self.stemmer = stemmer self.stopwords = stopwords def find_similar(self, data, min_score, max_results): if isinstance(data, basestring): doc = data.strip() if ' ' in doc: doc = {'tokens': self.preprocess(data, deacc=self.deaccent, lowercase=self.lowercase, errors='ignore', stemmer=self.stemmer, stopwords=self.stopwords)} try: return {'status': 'OK', 'response': self.service.find_similar(doc, min_score=min_score, max_results=max_results)} except ValueError: return {'status': 'NOTFOUND', 'response':[]} else: result = {} for doc in data: try: result[doc] = (self.service.find_similar( doc, min_score=min_score, max_results=max_results)) except ValueError: pass if result: return {'status': 'OK', 'response': result} else: return {'status': 'NOTFOUND', 'response':[]} def _buffer(self, data): i = 0 for d in data: if 'tokens' in d: self.service.buffer([{'id': d['id'], 'tokens': d['tokens']}]) else: self.service.buffer([{'id': d['id'], 'tokens': list(self.preprocess(d['text'], deacc=self.deaccent, lowercase=self.lowercase, errors='ignore', stemmer=self.stemmer, stopwords=self.stopwords))}]) i+=1 return i def train(self, data): self.service.set_autosession(False) self.service.open_session() i = self._buffer(data) self.service.train(method='lsi') logger.info('training complete commit changes') self.service.commit() self.service.set_autosession(True) return {'status': 'OK', 'response':i} def index(self, data): self.service.set_autosession(False) self.service.open_session() i = self._buffer(data) self.service.index() logger.info('indexing complete commit changes') self.service.commit() self.service.set_autosession(True) return {'status': 'OK', 'response':i} def optimize(self): self.service.set_autosession(False) self.service.open_session() self.service.optimize() self.service.commit() self.service.set_autosession(True) return {'status': 'OK', 'response': 'index optimized'} def delete(self, data): self.service.set_autosession(False) self.service.open_session() self.service.delete(data) self.service.commit() self.service.set_autosession(True) return {'status': 'OK', 'response': 'documents deleted'} def status(self): return {'status': 'OK', 'response': self.service.status()} def indexed_documents(self): return {'status': 'OK', 'response': self.service.keys()} def is_indexed(self, doc): return {'status': 'OK', 'response': doc in self.service.keys()}