最初: 5 つの記事が必要な[:-5:-1]
場合は、代わりに使用する必要があります[:-6:-1]
。負の値の場合はほとんど変わらないためです。
または使用[::-1][:5]
-[::-1]
すべての値を逆にしてから、通常を使用できます[:5]
取得したら、要素を取得するためにrelated_docs_indices
使用できます.iloc[]
DataFrame
sample_df.iloc[ related_docs_indices ]
同じ類似性を持つ要素がある場合は、それらを逆の順序で提供します。
ところで:
similarities
に追加することもできますDataFrame
sample_df['similarity'] = cosine_similarities
並べ替え(逆順)して5つのアイテムを取得します。
sample_df.sort_values('similarity', ascending=False)[:5]
同じ類似性を持つ要素がある場合、それらは元の順序で提供されます。
いくつかのデータを含む最小限の作業コード - 誰でもコピーしてテストできます。
要素が 5 つしかないDataFrame
ので、2 つの要素を検索します。
from sklearn.metrics.pairwise import linear_kernel
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
sample_df = pd.DataFrame({
'paper_id': [1, 2, 3, 4, 5],
'title': ['Covid19', 'Flu', 'Cancer', 'Covid19 Again', 'New Air Conditioners'],
'abstract': ['covid19', 'flu', 'cancer', 'covid19', 'air conditioner'],
'body_text': ['Hello covid19', 'Hello flu', 'Hello cancer', 'Hello covid19 again', 'Buy new air conditioner'],
})
def get_cleaned_text(df, row):
return row
txt_cleaned = get_cleaned_text(sample_df, sample_df['abstract'])
question = ['Can covid19 transmit through air']
tfidf_vector = TfidfVectorizer()
tfidf = tfidf_vector.fit_transform(txt_cleaned)
tfidf_question = tfidf_vector.transform(question)
cosine_similarities = linear_kernel(tfidf_question,tfidf).flatten()
sample_df['similarity'] = cosine_similarities
number = 2
#related_docs_indices = cosine_similarities.argsort()[:-(number+1):-1]
related_docs_indices = cosine_similarities.argsort()[::-1][:number]
print('index:', related_docs_indices)
print('similarity:', cosine_similarities[related_docs_indices])
print('\n--- related_docs_indices ---\n')
print(sample_df.iloc[related_docs_indices])
print('\n--- sort_values ---\n')
print( sample_df.sort_values('similarity', ascending=False)[:number] )
結果:
index: [3 0]
similarity: [0.62791376 0.62791376]
--- related_docs_indices ---
paper_id title abstract body_text similarity
3 4 Covid19 Again covid19 Hello covid19 again 0.627914
0 1 Covid19 covid19 Hello covid19 0.627914
--- sort_values ---
paper_id title abstract body_text similarity
0 1 Covid19 covid19 Hello covid19 0.627914
3 4 Covid19 Again covid19 Hello covid19 again 0.627914