views.py 文件源码

python
阅读 17 收藏 0 点赞 0 评论 0

项目:texta 作者: texta-tk 项目源码 文件源码
def load_terms(request):    

    lexicon_ids = json.loads(request.POST['lids'])

    try:
        model = model_manager.get_model(request.session['model']).model
    except LookupError as e:
        return HttpResponseRedirect(URL_PREFIX + '/')

    if model.wv.syn0norm is None:
        model.init_sims()

    words = [word for word in Word.objects.filter(lexicon__id__in = lexicon_ids) if word.wrd.encode('utf-8') in model.wv.vocab]
    feature_vectors = [model.wv.syn0norm[model.wv.vocab[word.wrd.encode('utf-8')].index] for word in words]

    output = {'terms':[],'concepts':[]}

    if len(feature_vectors):
        X = np.array(feature_vectors)

        if request.POST['method'] == 'TSNE':
            transformer = TSNE(n_components=2, random_state=0,metric='cosine',learning_rate=50)
        elif request.POST['method'] == 'MDS':
            transformer = MDS(n_components=2, max_iter=600,dissimilarity="precomputed", n_jobs=1)
            X = pairwise_distances(X,metric='cosine',n_jobs=1)
        else:
            transformer = PCA(n_components=2)

        transformed_feature_vectors = transformer.fit_transform(X).tolist()

        terms = []
        concepts = {}

        for i in range(len(words)):
            term = {'id':words[i].id,'term':words[i].wrd,'count':model.wv.vocab[words[i].wrd.encode('utf-8')].count,'x':transformed_feature_vectors[i][0] if len(feature_vectors) > 1 else 0,'y':transformed_feature_vectors[i][1] if len(feature_vectors) > 1 else 0}

            term_concepts = TermConcept.objects.filter(term__term = words[i].wrd).filter(concept__author = request.user)
            if term_concepts:
                concept_id = term_concepts[0].concept.id
                descriptive_term = term_concepts[0].concept.descriptive_term.term
                descriptive_term_id = term_concepts[0].concept.descriptive_term.id
                if concept_id not in concepts:
                    concepts[concept_id] = {'id':concept_id,'terms':[],'descriptive_term':descriptive_term,'descriptive_term_id':Word.objects.filter(wrd=descriptive_term)[0].id}

                concepts[concept_id]['terms'].append(term)

            else:
                terms.append(term)

        output['terms'].extend(terms)
        output['concepts'].extend([concepts[concept_id] for concept_id in concepts])

        logging.getLogger(INFO_LOGGER).info(json.dumps({'process':'CREATE CONCEPTS','event':'terms_loaded','args':{'user_name':request.user.username,'lexicon_ids':lexicon_ids,'dim_red_method':request.POST['method']}}))
    else:
        logging.getLogger(INFO_LOGGER).warning(json.dumps({'process':'CREATE CONCEPTS','event':'term_loading_failed','args':{'user_name':request.user.username,'lexicon_ids':lexicon_ids,'dim_red_method':request.POST['method']},'reason':'No terms to load.'}))


    return HttpResponse(json.dumps(output), content_type='application/json')
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号