アップデート
scikit-learn 0.14以降、形式は次のように変更されました。
n_grams = CountVectorizer(ngram_range=(1, 5))
完全な例:
test_str1 = "I need to get most popular ngrams from text. Ngrams length must be from 1 to 5 words."
test_str2 = "I know how to exclude bigrams from trigrams, but i need better solutions."
from sklearn.feature_extraction.text import CountVectorizer
c_vec = CountVectorizer(ngram_range=(1, 5))
# input to fit_transform() should be an iterable with strings
ngrams = c_vec.fit_transform([test_str1, test_str2])
# needs to happen after fit_transform()
vocab = c_vec.vocabulary_
count_values = ngrams.toarray().sum(axis=0)
# output n-grams
for ng_count, ng_text in sorted([(count_values[i],k) for k,i in vocab.items()], reverse=True):
print(ng_count, ng_text)
I
これは次のように出力します(単語がストップワードであるためではなく(そうではない)、その長さのために削除されることに注意してください: https ://stackoverflow.com/a/20743758/ ):
> (3, u'to')
> (3, u'from')
> (2, u'ngrams')
> (2, u'need')
> (1, u'words')
> (1, u'trigrams but need better solutions')
> (1, u'trigrams but need better')
...
これは、最近はもっと簡単になるはずです、imo。のようなことを試すことができますが、ドキュメントの初期化など、ドキュメントに示されているようにtextacy
現在v.0.6.2では機能しない独自の問題が発生する場合があります。ドキュメントの初期化が約束どおりに機能した場合、理論的には次のように機能します(ただし機能しません)。
test_str1 = "I need to get most popular ngrams from text. Ngrams length must be from 1 to 5 words."
test_str2 = "I know how to exclude bigrams from trigrams, but i need better solutions."
import textacy
# some version of the following line
doc = textacy.Doc([test_str1, test_str2])
ngrams = doc.to_bag_of_terms(ngrams={1, 5}, as_strings=True)
print(ngrams)
古い答え
WordNGramAnalyzer
scikit-learn 0.11以降、実際には非推奨になっています。n-gramの作成と用語頻度の取得は、sklearn.feature_extraction.text.CountVectorizerで結合されるようになりました。次のように、1から5までのすべてのn-gramを作成できます。
n_grams = CountVectorizer(min_n=1, max_n=5)
その他の例と情報は、テキスト特徴抽出に関するscikit-learnのドキュメントにあります。