Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()
Exemplo n.º 3
0

#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)
    
Exemplo n.º 4
0
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()}