Kaedah yang paling biasa untuk menentukan persamaan antara dua dokumen teks ialah menukarnya menjadi vektor TF-IDF (Term Frequency-Inverse Document Frequency) dan kemudian gunakan persamaan kosinus untuk membandingkannya. Pendekatan ini diliputi dalam buku teks tentang perolehan maklumat dan diperincikan dalam "Pengenalan kepada Pendapatan Maklumat."
Perpustakaan Python seperti Gensim dan scikit-learn menyediakan pelaksanaan penukaran TF-IDF dan pengiraan persamaan kosinus. Dengan scikit-learn, coretan kod berikut melaksanakan pengiraan persamaan kosinus:
<code class="python">from sklearn.feature_extraction.text import TfidfVectorizer # Extract documents from text files documents = [open(f).read() for f in text_files] # Create a TF-IDF vectorizer tfidf = TfidfVectorizer().fit_transform(documents) # Calculate pairwise cosine similarity pairwise_similarity = tfidf * tfidf.T</code>
Sebagai alternatif, untuk dokumen teks biasa:
<code class="python">corpus = ["I'd like an apple", "An apple a day keeps the doctor away", "Never compare an apple to an orange", "I prefer scikit-learn to Orange", "The scikit-learn docs are Orange and Blue"] # Create a TF-IDF vectorizer with minimum frequency and exclusion of stop words vect = TfidfVectorizer(min_df=1, stop_words="english") # Apply TF-IDF transformation tfidf = vect.fit_transform(corpus) # Calculate pairwise cosine similarity pairwise_similarity = tfidf * tfidf.T </code>
persamaan_berpasangan ialah matriks jarang di mana setiap baris dan lajur mewakili dokumen dalam korpus. Menukar matriks jarang kepada tatasusunan NumPy mendedahkan bahawa setiap sel mewakili persamaan antara dua dokumen yang sepadan.
Sebagai contoh, untuk menentukan dokumen yang paling serupa dengan "Dokumen scikit-learn ialah Jingga dan Biru", cari indeksnya dalam korpus dan kemudian gunakan np.nanargmax pada baris yang sepadan selepas menutup pepenjuru (mewakili persamaan diri) dengan np.fill_diagonal():
<code class="python">import numpy as np arr = pairwise_similarity.toarray() np.fill_diagonal(arr, np.nan) input_doc = "The scikit-learn docs are Orange and Blue" input_idx = corpus.index(input_doc) result_idx = np.nanargmax(arr[input_idx]) print(corpus[result_idx])</code>
Perhatikan bahawa untuk set data yang besar, menggunakan matriks jarang memelihara ingatan. Sebagai alternatif, pertimbangkan untuk menggunakan pairwise_similarity.shape untuk menutup persamaan diri dan argmax() secara langsung:
<code class="python">n, _ = pairwise_similarity.shape pairwise_similarity[np.arange(n), np.arange(n)] = -1.0 pairwise_similarity[input_idx].argmax() </code>
Atas ialah kandungan terperinci Bagaimana Mengira Kesamaan Antara Dokumen Teks Menggunakan TF-IDF dan Kesamaan Kosinus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!