2012-08-08 19 views
6

Tamam, biraz kafam karıştı. Ancak bu basit ve basit bir soru olmalıdır. Arama karşı en benzer belgeyi almak içinTF-IDF Basit Kullanım - NLTK/Scikit Öğren

array([[ 0.85..., 0. ..., 0.52...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 0.55..., 0.83..., 0. ...], 
     [ 0.63..., 0. ..., 0.77...]]) 

nasıl bu sonucu kullanırım:

tüm korpus karşı Belgenin TF-IDF Matrix hesapladıktan sonra, bu çok benzer bir sonuç elde sorgu? Temel olarak Wikipedia için bir arama çubuğu yeniden oluşturmaya çalışıyorum. Bir arama sorgusuna dayanarak, Wikipedia'dan en alakalı makaleleri dönmek istiyorum. Bu senaryoda, 6 makale (satır) vardır ve arama sorgusu 3 sözcük (sütun) içerir.

Tüm sonuçları sütunlarda mı ekliyorsunuz yoksa tüm satırları mı ekliyorsunuz? En büyük değer en alakalı mı yoksa en uygun olan en düşük değer mi?

cevap

4

cosine similarity? Her bir makale için (A vektörü), sorgunun benzerliğini hesaplar (vektör B). Ardından azalan sırada sıralayın ve en iyi sonucu seçin. Refactor için gensim kütüphanesi mükemmel.

+1

Aslında bu eğiticiyi takip ediyorum: http: //pyevolve.sourceforge.net/wordpress/? P = 1589 ... Anlamsız olan, orijinal makalelerle arama sorgusu arasında TF-IDF Vektörlerinin nasıl kullanılacağıdır . – tabchas

+1

Eğer ağırlıklandırma şeması olarak tf-idf kullanıyorsanız, hala sorgunuzu normalleştirmek istersiniz. Matrisiniz, tümü sorguda temsil edilen üç terim içerir; Bu nedenle, sorgudaki ham frekans vektörü (1,1,1) 'dir. sqrt ((1^2) + (1^2) + (1^2)) = 1,73 ve 1/1,73 = 0,57. Yani sorgu vektörünüz (0,57,0,57,0,57). Artık sorguyu başka bir belge olarak ele alabilirsiniz. Bu sorgu vektörünün ve diğer bazı belge vektörlerinin kosinüs benzerliği nokta ürünüdür. İlk madde için: ((.57 * .85) + (. 57 * 0) + (. 57 * .52)) = 0.2964. Tüm makaleler için en yüksek skoru kazanın. – verbsintransit

+0

Yani bir çeşit sınıflandırıcı eğitmem gerekmiyor mu? – tabchas