2014-07-14 2 views
0

업데이트 : 단어에서 발견 배의 수가 아니라되는 목록의 수를 계산하는 방법 내 인생을 위해,파이썬 카운트 UNIQUE 발생 ... 총 카운트가 아닙니다. 방법?

 for word in words: 
      if word not in unique_words: ##skips replicates in a given list 
       unique_words.append(word) 
이 가

내가 알아낼 수 없습니다 : 다음 코드는 트릭을 할 것 같다 단어가 목록 사이에서 발견됩니다.

나는 카운터를 설정하면 ... 단어의 발생을 계산합니다. 그러나 단어 목록을 반복하면서 (각 목록은 트윗) 단어의 고유 사건 (예 : 단어가있는 짹짹의 수)을 계산합니다. 카운터, 사용법을 알고 있고 컬렉션 카운터와 마찬가지로 모든 인스턴스를 계산합니다.

FYI ... 반복되는 내용은 .split() 함수가 적용된 트윗입니다. 각 트윗은 단어 목록입니다.

이것은 내가 필요로하는 것을하지 않는 코드입니다. 그것이 내가 새로운 단어가 발견 된 지점까지,뿐만 아니라 점수를 총 심리 점수를 얻을 수 있었던 유일한 방법이었다 있기 때문에

 sentiment = 0 

     for word in words: 
      if word in AFINN: 
       sentiment += AFINN[word]     

     for word in words: 
      if word not in AFINN and word not in new_sent: 
       new_sent[word] = sentiment 
       tweet_count[word] = 1 

      elif word in new_sent: 
       new_sent[word] = new_sent[word] + sentiment 
       tweet_count[word] += 1 

... 나는 단어 문에서 두 단어를 가지고 . 그래도 감정이 돌아 오면 듀얼 루프가 필요 없다고 생각 하나? 그러나 지금은 그것이 내 최대 관심사가 아닙니다.

고맙습니다.

+0

'AFFIN'을 무엇입니까? –

+0

코드는 사전 정의 된 사전 (AFINN)에 포함되지 않은 단어에 대한 정서 점수를 추출합니다. 따라서 AFINN은 키로 단어 묶음을, 값으로 정수를 사용합니다. – MJMV

+0

AFINN은 http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6010에서 얻을 수있는 나의 정서 분석 단어 목록입니다. –

답변

1

정확하게 이해하면 많은 짹짹이 있고 그 짹짹에 특정 단어가 몇 번 나타나는지 확인하고 싶습니까? 물론

count = 0 
for tweet in tweets: 
    if word in tweet: 
     count += 1 

당신이 정말로 그것을에 대한 상세하지 싶다면 ...

sum([word in tweet for tweet in tweets]) 

protip : 시도 합 ([거짓, 참 참 참 참])

하는 경우 나에게 알려주는 것을 오해했다.

tweets_with_word = defaultdict(int) 

for words in tweets: # `tweets` is the "outside" list of word lists 
    for word in set(words): 
     tweets_with_word[word] += 1 

    for word in words: 
     ... # The rest of your code 

는 기본적으로 각 트윗의 고유 한 단어의 목록을 얻을 수 set()을 사용, 그럼 그냥 그 인스턴스를 수 :에 대해 어떻게

0

. 당신이 (게시물에 매우에) 쓰기 업데이트에서

+0

"짹짹 단어" 일치 ... 단어가 문지르고, 소문자로 만들고, 분할하고 ... 이름을 "단어"로 변경했습니다. 그리고 나는 짹짹에 모든 독특한 단어를 원하지 않아 ... 나는 AFINN에없는 단어를 포함하는 쓰러진 트윗을 원한다. 그래서 set()을 사용하여 설명한대로 작동하지 않습니다. – MJMV

+0

나는 Kirk Strauser의 버전이 당신이 원하는 것이라고 생각합니다. 'set ([ 'hello', 'there', 'world']) - set ([ 'there'])와 같이 단어를 제외 시키려면 항상 차이를 만들 수 있습니다. –

0

:

for word in words: if word not in unique_words: ##skips replicates in a given list unique_words.append(word)

는 지금은 혼란 스러워요. 즉 당신이 원하는 것입니다 경우, 왜 그냥 collections.OrderedDict를 사용하지 : 모든 제어 구조의 필요가 없습니다

from collections import OrderedDict words = ['good', 'good', 'bad', 'terrible', 'lucky'] unique_words = OrderedDict.fromkeys(words)

.

단어의 순서가 문제 그럼 그냥 set를 사용하지 않는 경우 :

unique_words = set(words)

+0

열쇠 ...하지만 내가 필요로하는 것은 새로운 단어를 포함하는 짹짹의 수입니다. 키/세트를 복사하면 단어가 나옵니다 ... 값을 복사하면 총 발생 횟수가 나옵니다. 그러나 트윗을 거꾸로 돌아서 AFINN-111 목록에없는 단어가 들어있는 각 트윗에 대해 +1을 얻습니다. 목표는 AFINN이 아닌 각 단어에 대해 감정 점수가 다음과 같이 유도된다는 것입니다. E (짹짹 전송 점수)/(단어가 포함 된 짹짹 수). E는 단어가있는 모든 짹짹의 합계입니다. 같은 목적을 달성하는 또 다른 방법이 있습니까? – MJMV

+0

BTW ... 일치하지 않기 때문에 "짹짹 단어"로 백업 할 수 없습니다 ... 단어는 문지르거나, 소문자로 만들고, 분할하고, "단어"로 이름을 변경했습니다. – MJMV