1. Stopwords

- 의미가 없는 글자(불용어)

- 사전으로 만들어서 관리

- 한국어 불용어 사전은 거의 없음

- 너무 많이 나오는 단어들을 잘라서 불용어로 만든다(Heap's law)

 

2. 영어 불용어 확인하기

- nltk의 코퍼스 중에 stopwords가 있다.

from nltk.corpus import stopwords

 

stop = stopwords.open("english").read()

 

 

1)  불용어, 패턴 치환

# 1. 띄어쓰기를 _로 치환
pattern = re.compile("[{0}]".format(re.escape(punctuation)))
for _ in word_tokenize(sentence.lower()):
    if pattern.sub("", _) in stop:
        print("Skipped")
    else:
        print(_)
    

 

2) 불용어와 패턴으로 단어의 수를 줄이기

from nltk.corpus import gutenberg 

corpus = gutenberg.open("austen-emma.txt").read()
pattern = re.compile("[{0}]".format(re.escape(punctuation)))

print(len(word_tokenize(corpus)))
words = list()

for _ in word_tokenize(corpus.lower()):
    if pattern.sub("", _) not in stop:
        words.append(_)

print(len(words))

 

6. 한국어 불용어 처리해보기

 

1) 불용어 선정 후 불용어 및 패턴 제거

- '은, 는, 이, 가, 을, 를, 께서, 에게' 를 임의로 불용어로 둠

- sentence는 한국어를 아직 어근을 찾아서 분리하지 못했기 때문에 어근을 따로 띄어쓰기로 구분해 줌

 

korStop = ["은", "는", "이", "가", "을", "를", "께서", "에게"]
sentence = "어머니는 짜장면 이 싫다 고 하셨어." # 한국어 어근을 잘라내는 것은 아직 못했기에 띄어쓰기로 구분해서 데이터를 줌
sentence = pattern.sub("", sentence)

print(word_tokenize(sentence))
print([_ for _ in word_tokenize(sentence) if _ not in korStop])

 

2) 문자 길이로 자르기

sentence = "어머니 는 짜장면 이 싫다 고 하셨 어"
minimum = 2
maximum = 5
pattern2 = re.compile(r"\b\w{%d,%d}\b" % (minimum, maximum))
pattern2.findall(sentence)

 

3) 빈도 수로 자르기

original = Text(word_tokenize(corpus))
print(original.vocab().N(), original.vocab().B())

lowercase = Text(word_tokenize(corpus.lower()))
print(lowercase.vocab().N(), lowercase.vocab().B())

punct1 = Text(word_tokenize(pattern.sub("", corpus.lower())))
print(punct1.vocab().N(), punct1.vocab().B())

punct2 = Text(word_tokenize(pattern.sub(" ", corpus.lower()))) 
# 띄어쓰기를 하지 않으면 i'd => id로 인식되기 때문에 새로운 단어가 너무 많이 나옴
print(punct2.vocab().N(), punct2.vocab().B())

stops = Text([_ for _ in word_tokenize(pattern.sub(" ", corpus.lower())) if _ not in stop])
print(stops.vocab().N(), stops.vocab().B())

minimum = 3
maximum = 5
pattern2 = re.compile(r"\b\w{%d,%d}\b" % (minimum, maximum))
pattern2.findall(sentence)
original = Text([_ for _ in word_tokenize(pattern.sub(" ", corpus.lower())) if _ not in stop and pattern2.findall(_)])
print(original.vocab().N(), original.vocab().B())

 

 

Tip) 정규표현식 연습 사이트

https://regexr.com/

 

7. 한국어 욕설 제거

'데이터 분석가 역량' 카테고리의 다른 글

day 15 ] GitHub  (0) 2019.05.20
day 13 ] pos  (0) 2019.05.16
day 12] BPE  (0) 2019.05.15
day 11 ] N-Gram  (0) 2019.05.15
day 11 ] 형태소 분석  (0) 2019.05.15

+ Recent posts