文の類似度実現アルゴリズム
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