2016-07-26 2 views
0

두 번 이상 나타나는 트라이 그램으로 정의 된 텍스트에서 "일반적으로 사용되는 구"를 얻고 싶습니다. 내가 scored의 요소의 수는 총 단어 수로 나눈 괘의 발생 횟수는 것으로 나타났습니다NLTK에서 트라이 그램의 발생 횟수를 얻으십시오

[(('This', 'is', 'a'), 0.2), (('Hello', 'world', 'This'), 0.1), (('a', 'dog', 'This'), 0.1), (('dog', 'This', 'is'), 0.1), (('is', 'a', 'cat'), 0.1), (('is', 'a', 'dog'), 0.1), (('world', 'This', 'is'), 0.1)] 

import nltk 

def get_words(string): 
    tokenizer = nltk.tokenize.RegexpTokenizer(r'\w+') 
    return tokenizer.tokenize(string) 

string = "Hello, world. This is a dog. This is a cat." 

words = get_words(string) 

finder = nltk.collocations.TrigramCollocationFinder.from_words(words) 
scored = finder.score_ngrams(nltk.collocations.TrigramAssocMeasures().raw_freq) 

결과 scored입니다 : 지금까지 나는이 있습니다 (이 경우 10). 단어 수로 '사후 배수'하지 않고 직접 발생 횟수를 얻을 수있는 방법이 있습니까?

+0

[NLTK - Bigram의 계산 빈도] 가능한 복제본 (http://stackoverflow.com/questions/19145332/nltk-counting-frequency-of-bigram) –

답변

1

당신은 당신이 더 많은 관련 예제를 확인할 수 있습니다

# To get Trigrams with occurrences 
trigrams = finder.ngram_fd.items() 
print trigrams 

# To get Trigrams with occurrences in descending order 
trigrams = sorted(finder.ngram_fd.items(), key=lambda t: (-t[1], t[0])) 
print trigrams 

finder.ngram_fd.items()를 사용하여 발생 수를 얻을 수 있습니다 : 귀하의 경우 나는 raw_freq 속성이 이미 정렬 되었기 때문에 'post-multiplying'을 사용했다.

import nltk 

def get_words(string): 
    tokenizer = nltk.tokenize.RegexpTokenizer(r'\w+') 
    return tokenizer.tokenize(string) 

string = "Hello, world. This is a dog. This is a cat." 

words = get_words(string) 
word_count = len(words) 

finder = nltk.collocations.TrigramCollocationFinder.from_words(words) 
scored = finder.score_ngrams(nltk.collocations.TrigramAssocMeasures().raw_freq) 
scored_common = filter(lambda score: score[1]*word_count > 1, scored) 
common_phrases = [" ".join(score[0]) for score in scored_common] 

이이 예를 들어 ['This is a'] 같은 일반적인 문구를 산출 : 여기 내 구현입니다.

0

:

trigram_freqs = finder.ngram_fd 
관련 문제