2012-08-01 3 views
13

텍스트에서 가장 많이 사용되는 ngram을 가져와야합니다. Ngrams 길이는 1 ~ 5 단어 여야합니다.파이썬 빈도가있는 Ngram 목록

나는 bigrams와 trigrams를 얻는 방법을 안다. 예 :

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) 

그러나 scikit-learn은 다양한 길이의 ngram을 얻을 수 있다는 것을 알았습니다. 예를 들어 I는 1에서 5

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

에 길이 ngrams 얻을 수 그러나 WordNGramAnalyzer 지금은 사용되지 않습니다. 내 질문입니다 : 어떻게 1에서 5에 collocations 길이와 내 텍스트에서 N 최고의 단어 collocations을 얻을 수 있습니다. 또한이 collocations/ngrams의 FreqList를 얻을 필요가 있습니다.

nltk/scikit으로 할 수 있습니까? 하나의 텍스트에서 다양한 길이의 ngram 조합을 가져와야합니까?

예를 들어 NLTK 바이 그램과 트라이 그램을 사용하면 트라이 그램에 내 비트 그램이 포함되는 많은 상황이 발생하거나 트라이 그램이 더 큰 4 그램의 일부가됩니다.

bitgrams : 안녕 내 괘 : 예를 들어 안녕 내 이름

내가 괘에서 bigrams을 제외하는 방법을 알고,하지만 난 더 나은 솔루션이 필요합니다. 0.14 scikit 배우기 때문에

답변

12

갱신

형식이 변경되었습니다 : 0.11 scikit 배우기 때문에

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

된 대답

WordNGramAnalyzer 실제로 사용되지 않습니다. n 그램을 만들고 용어 빈도를 얻는 것이 이제 sklearn.feature_extraction.text.CountVectorizer에 결합되었습니다. 당신은 1 일부터 다음 5로까지 이르기까지 모든 N-그램을 만들 수 있습니다

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

더 많은 예제와 정보가 scikit 배우기의 문서에 대한 text feature extraction에게에서 찾을 수 있습니다.

+3

를 사용하여 구현하고있는 후드 nltk.util.bigrams()와 nltk.util.trigrams에서 생각 http://nltk.org/_modules/nltk/util.html 보면 '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); X = v.fit_transform ([ "하루에 사과를 가지고 의사를 계속 지냅니다]]); zip (v.inverse_transform (X) [0], X.A [0])'. 불용어와 1 문자 토큰은 기본적으로 제거됩니다. –

7

원시 ngram을 생성하려면 (직접 계산하십시오) nltk.util.ngrams(sequence, n)도 있습니다. n의 값에 대해 ngrams의 시퀀스를 생성합니다. 패딩 옵션이 있습니다. 설명서를 참조하십시오.

3

나는()는 TF-IDF 정상화를 원하지 않는 경우 nltk.util.ngrams()