Basic/Python
파이썬 translate, punctuation을 이용한 단어 구분
가누
2017. 7. 12. 00:05
반응형
파이썬에서는 translate라는 str 메소드가 존재한다.
보통은 테이블을 이용하여 치환해주는 방식인데 다르게 쓸 수 있는 방법이 존재한다.
import string을 한 후
print string.punctuation을 해보면 여러 기호들이 나타남을 알 수 있다.
이 객체와 translate라는 메소드를 이용하여 단어를 구분할 때 어떻게 쓰는지 알아보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #-*- coding: CP949 -*- import string rhandle = open('romeo-full.txt', 'r') s = rhandle.read() s = s.translate(None, string.punctuation) dic = {} for i in s: if i == ' ' or i == '\n' or ('0' <= i and i <= '9'): continue dic[i.lower()] = dic.get(i.lower(), 0) + 1 tmp = [] for i, j in dic.items(): tmp.append((j,i)) tmp.sort(reverse = True) for i in tmp: print i[1], i[0] // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
위의 파일을 이용한 코드이다.
우선 s 변수에 read를 이용하여 romeo-full.txt에 있는 모든 string을 가져온다.
이제 translate(None, string.punctuation)을 하게 되는데 이 의미는 구두점이 s 스트링에 포함되어 있다면,
모두 제거하라는 의미가 된다.
앞의 None는 테이블이 존재하지 않기에 None로 입력을 해주면 된다.
그 후 dic = {}를 통해 딕셔너리를 생성한다.
아래 포문에서는 공백, 개행, 숫자 등등 필요없는 것들에 대해서는 continue를,
그 외에 이제 영단어에 해당하는 것들을 소문자로 치환하여 모두 넣어준다.
마지막으로 단어가 많이 나온 순으로 정렬하기 위해 tmp에 단어 빈도, 단어를 기준으로 생성해주고, 내림차순 정렬을 해준다.
마지막으로 print를 통해 단어 빈도를 알 수 있게 된다.
반응형
romeo-full.txt