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) 정규표현식 연습 사이트
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 |