文の類似度実現アルゴリズム

3026 ワード

文の類似度–名前の通り、二つの文の間の類似度です.文の類似度はNLPで大きな役割を果たしています.例えば、テキストの分類、情報検索、意味分析などは、検索情報のより速い方法を提供してくれます.そして、得られた情報はより正確です.従来の類似度アルゴリズムに基づいて、次のステップに分けることができます.1、分詞2、休用語3、単語ベクトルの生成4、類似度分析5、類似度分数類似度アルゴリズムの生成が多く、TF-IDFアルゴリズム、コサイン類似度アルゴリズム、gensimアルゴリズム、論理アルゴリズムなど、多くの試みが可能です.また、各アルゴリズムの精度が違っています.以下はgensimアルゴリズムです.jiebaを通じて単語を区切って、実際のプロジェクトに応用しました.
# -*- coding: utf-8 -*-

import jieba
from gensim import corpora, models, similarities
from QASolution.DataList import get_question

def tfidf_similar(question):
    data = get_question()#                 
    #       
    all_cut = []
    for i in data.keys():
        all = []
        all.append(i)
        for j in all:
            j_cut = [word for word in jieba.cut(j)]
        all_cut.append(j_cut)
    #print(all_cut)
    #     
    test_cut = [word for word in jieba.cut(question)]
    # dictionary      (bag-of-words)
    dictionary = corpora.Dictionary(all_cut)
    #              
    dictionary.keys()
    #          
    dictionary.token2id
    #doc2bow     ,        ,            (  、   )
    corpus = [dictionary.doc2bow(doc) for doc in all_cut]
    #          
    test_vec = dictionary.doc2bow(test_cut)
    #tfidf     
    tfidf = models.TfidfModel(corpus)

    index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=len(dictionary.keys()))
    sim = index[tfidf[test_vec]]
    question_list = sorted(enumerate(sim),key=lambda item: -item[1])
    old = question_list[:5]
    new = all_cut
    data = {}
    for each in old:
        p = each[1]#    
        name = "".join(new[each[0]])#             
        data[name] = p
    return data