2012-08-01 9 views
13

मुझे पाठ से सबसे लोकप्रिय ngrams प्राप्त करने की आवश्यकता है। Ngrams लंबाई 1 से 5 शब्दों से होना चाहिए।पाइथन आवृत्तियों के साथ Ngrams की सूची

मुझे पता है कि बिग्राम और ट्रिग्राम कैसे प्राप्त करें। उदाहरण के लिए:

bigram_measures = nltk.collocations.BigramAssocMeasures() 
finder = nltk.collocations.BigramCollocationFinder.from_words(words) 
finder.apply_freq_filter(3) 
finder.apply_word_filter(filter_stops) 
matches1 = finder.nbest(bigram_measures.pmi, 20) 

हालांकि, मुझे पता चला कि विज्ञान-शिक्षा विभिन्न लंबाई के साथ ngrams प्राप्त कर सकते हैं। उदाहरण के लिए मैं 1 से 5.

v = CountVectorizer(analyzer=WordNGramAnalyzer(min_n=1, max_n=5)) 

लंबाई के साथ ngrams प्राप्त कर सकते हैं लेकिन WordNGramAnalyzer अब मान्य नहीं है। मेरा सवाल है: मुझे 1 से 5 तक की कॉलोकेशन लंबाई के साथ, मेरे पाठ से एन सर्वश्रेष्ठ शब्द कोलाकेशन कैसे प्राप्त हो सकता है। इसके अलावा मुझे इस कॉलोकेशन/ngrams की FreqList प्राप्त करने की आवश्यकता है।

क्या मैं इसे nltk/scikit के साथ कर सकता हूं? मुझे एक पाठ से विभिन्न लंबाई के साथ ngrams के संयोजन प्राप्त करने की आवश्यकता है?

उदाहरण के लिए एनएलटीके बिग्राम और ट्रिग्राम का उपयोग करना जहां कई परिस्थितियों में मेरे ट्रिग्राम में मेरे बिटग्राम शामिल हैं, या मेरे ट्रिग्राम बड़े 4-ग्राम का हिस्सा हैं।

bitgrams: नमस्ते मेरा trigrams: उदाहरण के लिए नमस्ते मेरा नाम

मैं जानता हूँ कि trigrams से Bigrams बहिष्कृत करने का तरीका है, लेकिन मैं बेहतर समाधान की जरूरत है।

उत्तर

12

अद्यतन

के बाद से 0.14 scikit सीखने प्रारूप करने के लिए बदल गया है:

n_grams = CountVectorizer(ngram_range=(1, 5)) 

वर्ष जवाब

WordNGramAnalyzer वास्तव में हटा दिया गया है के बाद से 0.11 scikit-सीखते हैं। एन-ग्राम बनाना और टर्म फ्रीक्वेंसी प्राप्त करना अब sklearn.feature_extraction.text.CountVectorizer में संयुक्त है। आप 1 से जब तक इस प्रकार 5 के रूप में लेकर सभी एन-ग्राम बना सकते हैं:

n_grams = CountVectorizer(min_n=1, max_n=5) 

अधिक उदाहरण और जानकारी scikit सीखने के दस्तावेज़ text feature extraction बारे में पाया जा सकता।

+3

का उपयोग कर आप TF-आईडीएफ सामान्य नहीं करना चाहते हैं लागू किया जाता है बस उपयोग करें: 'countVectorizer (min_n = 1, max_n = 5) .fit_transform (list_of_strings) '। – ogrisel

+0

लेकिन मैं आगे क्या करूं? मैं ngrams आवृत्तियों कैसे प्राप्त करूं? – twoface88

+3

@ twoface88: 'v = countVectorizer (min_n = 1, max_n = 5); एक्स = v.fit_transform (["एक सेब एक दिन डॉक्टर को दूर रखता है"]); ज़िप (v.inverse_transform (एक्स) [0], एक्स.ए [0]) '। ध्यान दें कि डिफ़ॉल्ट रूप से स्टॉपवर्ड और एक-चार टोकन हटा दिए जाएंगे। –

7

यदि आप कच्चे ngrams उत्पन्न करना चाहते हैं (और खुद को गिनें, शायद), nltk.util.ngrams(sequence, n) भी है। यह एन के किसी भी मूल्य के लिए ngrams का अनुक्रम उत्पन्न करेगा। इसमें पैडिंग के विकल्प हैं, दस्तावेज़ीकरण देखें।

संबंधित मुद्दे