2016-04-05 12 views
-4

Bir çift metin dosyasının kosinüs benzerliğini hesaplamak için 84 metin dosyası içeren bir veri kümesi (daha fazla yineleme işlemi olarak) kullanıyorum. Takip ettiğim mantık, önce belge 0 ve 1'den, sonra belge 1 ve 2'ye kadar n-1 ve n. liste dizini aralık dışı Python

my_funcs = {} 
for i in range(len(data)): 
    def foo(x, y): 
     x = data[i]['body'] 
     y = data[i+1]['body'] 
     tfidf = vectorizer.fit_transform([x, y]) 
     return ((tfidf * tfidf.T).A)[0,1] 


    foo.func_name = "cosine_sim%d" % i 
    my_funcs["cosine_sim%d" % i] = foo 

globals().update(my_funcs) # Export to namespace 

Beklendiği kodum bana aşağıdaki hatayı veriyor: Bunu kodlu yolu şudur list index out of range. Döngünün i = len(data) ne zaman durduğunu söylemenin bir yolu var mı?

+1

Döngünün durmasını söylemiştiniz, ancak veri [i + 1] 'hata veren şeydir. Belki de menzil istiyorsun (len (data) - 1) '. – msw

+3

'globals()' özelliğini büyük bir nedenden dolayı kullanmayın. Sebebinizin neden mükemmel olduğunu açıklayamadığınız sürece büyük bir sebebiniz olmadığını varsayın. – msw

cevap

1
my_funcs = {} 
for i in range(len(data)-1): 
    def foo(x, y): 
     x = data[i]['body'] 
     y = data[i+1]['body'] 
     tfidf = vectorizer.fit_transform([x, y]) 
     return ((tfidf * tfidf.T).A)[0,1] 


    foo.func_name = "cosine_sim%d" % i 
    my_funcs["cosine_sim%d" % i] = foo 

globals().update(my_funcs) # Export to namespace 

Döngüyü len(data)-1 yaptık. Hangi değişiklikleri yaptığını biliyor musunuz? Bu arada, çok fazla fonksiyonla globals()'u doldurmaya katılmıyorum. 84 tanesi var. Python Shell kullanımı için kullanmadığınız sürece (hızlı çalışma için), bunu denemenizi tavsiye etmem.

İlgili konular