2016-12-23 2 views
2

문장으로 가득 찬 텍스트 파일에서 데이터 정리 작업을하고 있습니다. 이 문장의 형태를 알아 내고 나면 나는 줄기 세포 목록에있는 단어의 빈도를 얻고 싶습니다.파이썬에서 형태소 분석을 한 후 단어의 빈도 찾기

[u'anyon', u'think', u'forgotten', u'day', u'parti', u'friend', u'friend', u'paymast', u'us', u'longer', u'memori'] 

[u'valu', u'friend', u'bought', u'properti', u'actual', u'relev', u'repres', u'actual', u'valu', u'properti'] 

[u'monster', u'wreck', u'reef', u'cargo', u'vessel', u'week', u'passeng', u'ship', u'least', u'24', u'hour', u'upload', u'com'] 

내가 모든 단어의 빈도를 얻을 싶지만 난 단지 획득하고있다 : 나는, stem_list을 막아야 목록을 인쇄 할 때 같은 문제가 발생하고 그러나, 나는과 같이 모든 문장에 대한 목록을 획득하고

fdist = nltk.FreqDist(stem_list) 
    for word, frequency in fdist.most_common(50): 
     print(u'{};{}'.format(word, frequency)) 

이 다음과 같은 출력 생산 : 다음 코드를 사용하여 문장 당 주파수 친구 2 paymast 1 이상 1 memori 1 이상적 상대; 1 우리 1 일 1 개 애니 온, 잊고 1 생각, 실제 1 properti 2 가치있는 2 친구 1 repres 1 relev 1 구입; 1 주 1 개 화물 1 몬스터 1 시간 1 난파선 1 개 업로드 1 passeng, 적어도 1 1 개 암초 1 24 1 개 선박 1 선박 1 명 닷컴, 내 1 1 개 지역 1 territori 1 사용자 정의 1 개 물 1 3, 그것은 두에 있기 때문에 단어 '친구'두 번 계산되고 1

다른 문장들. 어떻게하면 친구를 한 번 카운트하고 친구를 표시 할 수 있습니까?이 경우 3 명입니까?

stem_list = [inner for outer in stem_list for inner in outer] 

을하고 당신이 동일한 방식으로 처리 :

+2

당신은 definitvely 사용자가 정의한 –

+0

방법을 https://docs.python.org/2/library/collections.html#collections.Counter 살펴해야 'stem_list'의 문법이 잘못되었습니다. 올바른 정의를 입력하십시오. – trincot

답변

0

당신은 하나의 목록에서 모두를 연결할 수 있습니다.

그렇지 않으면 동일한 코드를 유지할 수 있지만 인쇄 대신 사전에 작성한 값으로 채울 수 있습니다. 새 단어를 얻을 때마다 키를 만든 다음 값을 추가합니다.

all_words_count = dict() 
for word, frequency in fdist.most_common(50): 
    if word in all_words_count : # Already found 
     all_words_count[word] += frequency 
    else : # Not found yet 
     all_words_count[word] = frequency 

for word in all_words_count : 
    print(u'{};{}'.format(word, all_words_count[word])) 
+0

나는 그 일을 시도했으나 각 편지를 따로 따로 인쇄하는 것을 끝낸다 : [u'a ', u'n', u'y ', u'o', u'n ', u't' 어, 우, 우, 우, 우, 우, 우, 우, 우, 우, 우, 우, '', '', '', '', 'u'a', u'y ', u'p', u'a ', u'r' ',' ',' ',' ',' ',' ',' ','u'f ' '', '', '', '', '', '', '', ',' ',' ',' ',' ',' ',' ', , u'o ', u'r', u'i '] –

+0

stem_list는 정확히 무엇입니까? 목록 목록입니까? 게시물의 구조가 명확하지 않습니다. – iFlo

+0

죄송합니다. 전에 텍스트 파일 (문장 포함)을 토큰화한 이후로 단어 벡터입니다. –

0

가장 쉬운 방법은 배열을 함수에 전달하기 전에 결합하는 것입니다.

allwords = [inner for outer in stem_list for inner in outer] 

fdist = nltk.FreqDist(allwords) 
    for word, frequency in fdist.most_common(50): 
     print(y'{};{}'.format(word, frequency)) 

이하는 : - 처음 sentenc의 단어 문장 및 초

stem_list = [[u'anyon', u'think', u'forgotten', u'day', u'parti', u'friend', u'friend', u'paymast', u'us', u'longer', u'memori'], 

      [u'valu', u'friend', u'bought', u'properti', u'actual', u'relev', u'repres', u'actual', u'valu', u'properti'], 

      [u'monster', u'wreck', u'reef', u'cargo', u'vessel', u'week', u'passeng', u'ship', u'least', u'24', u'hour', u'upload', u'com'], 

      [.....], etc for the other sentences ] 

그래서 당신이 두 배열이 있습니다

fdist = nltk.FreqDist([inner for outer in stem_list for inner in outer]) 
    for word, frequency in fdist.most_common(50): 
     print(y'{};{}'.format(word, frequency)) 

나는 귀하의 의견의 모습을 생각한다. allwords = [inner in stem_list in outer for inner]를 사용하면 문장을 실행하고이를 단어의 하나의 배열로 결합합니다.

+0

'allwords = [sent for stem_list] '는 아무 것도하지 않습니다. 내부 목록을 가져 와서 목록에 넣습니다. 'stem_list'는 'allwords'에 의해 참조되는 것을 제외하고는 동일하게 유지됩니다. – iFlo

+1

감사합니다. iFlo로 수정했습니다. iFlo - 점검하지 않았습니다. –

관련 문제