딕셔너리 이용한 단어 빈도 계산문제 질문드립니다.

f=open('c:/doit/원본.txt', 'r', encoding='utf-16')

r=open('c:/doit/어절 빈도 통계.txt', 'w', encoding='utf-16')

data=f.read()

data2=data.split()

count={}

for word in data2:

if word in count:

    count[word] +=1

else:
    count[word] = 1

for key in count:

r.write("%s: %d" % (key,count[key])+"\n")

print("작업완료")

r.close()

이런 코드를 봤는데요. 다섯 번째 줄에서 count={}라고 정의할 경우 안에 아무것도 없는데, x in y라고 할때 y라는 집합안에 x라는 원소가 있는것 처럼

딕셔너리라는 집합 안에 '워드'라는 원소가 있어야 하는 것 아닌가요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    단어 빈도 계산은 다음과 같이 할 수 있습니다.

    >>> Counter(["a", "b", "a"])
    Counter({'a': 2, 'b': 1})
    

    위의 코드를 바꾼다면 아래처럼 바꿀 수 있겠네요

    from collections import Counter
    with open('c:/doit/원본.txt', 'r', encoding='utf-16') as f:
        data=f.read()
        data2=data.split()
        count = Counter(data2)
    with open('c:/doit/어절 빈도 통계.txt', 'w', encoding='utf-16') as f:
        for w,c in count.items():
            f.write("%s: %d" % (w,c)+"\n")
    

    아 코드 블럭 처리가 부분적으로 되어 있어 제가 착각을 했네요 온전한 코드입니다.

    위의 코드를 설명해드리자면 data2에서 단어를 하나씩 추출하여 count 딕셔너리 안에 단어가 존재하지 않으면 1로 초기화를 해주고 만약 단어가 존재한다면 +1씩 증가시켜주는 코드입니다.

    • 답변 달아주셔서 감사합니다. 그런데 아직 이해가 잘 안되네요 ㅠㅠ 왜 count라는 집합안에 아무것도 없는데 word라는 미지수가 검색이 되는 건가요? 리스트나 문자열을 'if x in y'라고 가정하면 y라는 집합안에 미지수 x들이 있다고 알고 있는데 딕셔너리는 다른 건가요? bag0753 2018.6.14 16:17

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.