반응형

파이썬에서는 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')
 
= rhandle.read()
 
= 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




romeo-full.txt


위의 파일을 이용한 코드이다.


우선 s 변수에 read를 이용하여 romeo-full.txt에 있는 모든 string을 가져온다.


이제 translate(None, string.punctuation)을 하게 되는데 이 의미는 구두점이 s 스트링에 포함되어 있다면,


모두 제거하라는 의미가 된다.


앞의 None는 테이블이 존재하지 않기에 None로 입력을 해주면 된다.



그 후 dic = {}를 통해 딕셔너리를 생성한다.


아래 포문에서는 공백, 개행, 숫자 등등 필요없는 것들에 대해서는 continue를,


그 외에 이제 영단어에 해당하는 것들을 소문자로 치환하여 모두 넣어준다.


마지막으로 단어가 많이 나온 순으로 정렬하기 위해 tmp에 단어 빈도, 단어를 기준으로 생성해주고, 내림차순 정렬을 해준다.


마지막으로 print를 통해 단어 빈도를 알 수 있게 된다.
















반응형