2012-08-11 14 views
12

ठीक है के लिए * आईडीएफ, तो मैं TF * आईडीएफ पर इन दो पदों निम्नलिखित किया गया है लेकिन बहुत कम भ्रमित कर रहा हूँ: http://css.dzone.com/articles/machine-learning-text-featureTF वेरी

मूल रूप से, मुझे लगता है कि कई दस्तावेजों के माध्यम से खोज वाली कोई खोज क्वेरी बनाना चाहते हैं। मैं पाइथन

के लिए विज्ञान-सीखने टूलकिट के साथ-साथ एनएलटीके लाइब्रेरी का उपयोग करना चाहता हूं समस्या यह है कि मुझे नहीं पता कि दो टीएफ * आईडीएफ वैक्टर कहां से आते हैं। मुझे खोजने के लिए एक खोज क्वेरी और एकाधिक दस्तावेज चाहिए। मैंने सोचा कि मैं प्रत्येक क्वेरी के खिलाफ प्रत्येक दस्तावेज़ के टीएफ * आईडीएफ स्कोर की गणना करता हूं और उनके बीच कोसाइन समानता पाता हूं, और उसके बाद अंकों को अवरोही क्रम में क्रमबद्ध करके रैंक करता हूं। हालांकि, कोड सही वैक्टर के साथ नहीं लग रहा है।

जब भी मैं क्वेरी को केवल एक खोज में कम करता हूं, तो यह 0 की एक बड़ी सूची लौटा रहा है जो वास्तव में अजीब है।

यहाँ कोड है:

from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.feature_extraction.text import TfidfTransformer 
from nltk.corpus import stopwords 

train_set = ("The sky is blue.", "The sun is bright.") #Documents 
test_set = ("The sun in the sky is bright.") #Query 
stopWords = stopwords.words('english') 

vectorizer = CountVectorizer(stop_words = stopWords) 
transformer = TfidfTransformer() 

trainVectorizerArray = vectorizer.fit_transform(train_set).toarray() 
testVectorizerArray = vectorizer.transform(test_set).toarray() 
print 'Fit Vectorizer to train set', trainVectorizerArray 
print 'Transform Vectorizer to test set', testVectorizerArray 

transformer.fit(trainVectorizerArray) 
print transformer.transform(trainVectorizerArray).toarray() 

transformer.fit(testVectorizerArray) 

tfidf = transformer.transform(testVectorizerArray) 
print tfidf.todense() 
+0

मैं सोच रहा था कि क्या आपने प्रिंट tfidf.todense() से प्राप्त अंतिम मैट्रिक्स का उपयोग करके कोसाइन की गणना की है, तो यदि आप ऐसा कैसे करते हैं? –

+1

हे एक सेक ... मैं जल्द ही एक उदाहरण पोस्ट करता हूं। – tabchas

+0

धन्यवाद कि शानदार होगा। क्या आप यहां एक लिंक डालेंगे ..? वह तो उससे भी बढ़िया है। –

उत्तर

13

आप train_set और test_set tuples के रूप में परिभाषित कर रहे हैं, लेकिन मुझे लगता है कि वे सूचियों होना चाहिए:

train_set = ["The sky is blue.", "The sun is bright."] #Documents 
test_set = ["The sun in the sky is bright."] #Query 

इस कोड का उपयोग कर रहा है ठीक चलाओ

+0

बहुत बढ़िया। सलाह के लिए धन्यवाद। किसी भी कारण से यह tuples के साथ काम नहीं करता है? – tabchas

+2

इसे इनपुट के रूप में सूचियां लेने के लिए कोड किया गया है :)। इन सूचियों को आंतरिक रूप से NumPy arrays में परिवर्तित कर दिया जाता है (आप सीधे एक NumPy सरणी भी पास कर सकते हैं)। – Sicco