공공데이터 포털에서 데이터를 가져와서 확인하는데 동일한 row가 있어서 확인을 해봤다.

185    2019-07-01    1995    2019    정자동    40000    정든마을(5단지)(신화)    7    0    8    69.93    192    41135    8    40000    572.000572    21.153858    60-85m2이하    2019-07-08
191    2019-07-01    1995    2019    정자동    40000    정든마을(5단지)(신화)    7    0    8    69.93    192    41135    8    40000    572.000572    21.153858    60-85m2이하    2019-07-08

해당 row를 보면 동일한 row가 두개가 있다! 가격이 동일하고 거래날짜도 동일한!!! 이런...
전처리가 반드시 필요하다.

  • 파이썬에서 한글, 영문, 숫자가 포함된 문자열에서 한글만 추출하는 방법에 대해서 설명한다.
  • python을 이용해서 한글처리를 하다보면 ㅋㅋㅋ, ㅎㅎㅎ와 같은 모음, 자음이 따로 있는 경우가 있는데 보통은 의미가 없다. 감정을 나타내는 문제에서는 의미가 있으려나...
  • 모/자음만 있는 한글을 추려내는 방법은 정규식을 사용하면 쉽게 추출, 제거 할 수 있다.

정규식에서 일치되는 부분을 리스트로 저장

import re

text = "ㅋㅋㅋ 안녕하세요"
# 정규식에서 일치되는 부분을 리스트 형태로 저장
re.compile('[ㄱ-ㅎ]+').findall(text) # 출력 ['ㅋㅋㅋ']

import re

text = "ㅋㅋㅋ 안녕하ㅏ세요"
# 정규식에서 일치되는 부분을 리스트 형태로 저장
re.compile('[ㄱ-ㅎ|ㅏ-ㅣ]+').findall(text) # 출력 ['ㅋㅋㅋ', 'ㅏ']

import re

text = "ㅋㅋㅋ 안녕하세요"
# 정규식에서 일치되는 부분을 리스트 형태로 저장
re.compile('[가-힣]+').findall(text) # 출력 ['안녕하세요']

정규식에서 일치되는 부분을 제외하고 추출

import re

text = "ㅋㅋㅋ 안녕하세요"
# 한글과 띄어쓰기을 제외하고 모든 글자 (자음, 모음만 있는경우 제외)
re.compile('[ |가-힣]+').sub('', text) # 출력 'ㅋㅋㅋ'


text = "하이 ㅋㅋㅋ 안녕하ㅏ세요"
# 정규식에서 일치되는 부분을  제외하고 저장
re.compile('[ |ㄱ-ㅎ|ㅏ-ㅣ]+').sub('',text) # 출력 '안녕하세요'

주의해야할 점

  • 주의해야 할 점은 두개의 결과가 리스트str으로 반환된다는 점이다.
  • 아래 예제를 통해서 내가 언제 어떤 상황에서 어떻게 처리해야할지 판단하면 된다.
import re

text = "ㅋㅋㅋ 안녕하ㅏ세요"
# 정규식에서 일치되는 부분을 리스트 형태로 저장
re.compile('[가-힣]+').findall(text) # 출력 ['안녕하', '세요']
text = "하이 ㅋㅋㅋ 안녕하ㅏ세요"
# 정규식에서 일치되는 부분을  제외하고 저장
re.compile('[ |ㄱ-ㅎ|ㅏ-ㅣ]+').sub('',text) # 출력 '안녕하세요'

python에서 한글 전처리를 하는 모음

from collections import Counter

special_chars = ['\n', '?', '.', '+', '~', '-', '_', ',', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '{', '}', '[', ']' ,'/', '=', '`', '|']

def string_cleanup(x, notwanted):
    # import re
    for item in notwanted:
        x = x.replace(item, ' ')
        # x = re.sub(item, '', x)
    return x

def multiple_spaces_to_one(sentence):
    import re
    return re.sub(' +', ' ', sentence)

def remove_duplicated_words(sentence):

    return ' '.join(set(text.split(' ')))

def preprocessing(sentence):
    sentence = string_cleanup(sentence, special_chars) 
    sentence = re.compile('[0-9|ㄱ-ㅎ|ㅏ-ㅣ]+').sub('',sentence) # 'ㅋㅋㅋ', 'ㅏㅏ 제거'
    sentence = sentence.strip()
    sentence = sentence.lower()
    sentence = multiple_spaces_to_one(sentence)
    sentence = ' '.join(Counter(text.split(' ')).keys())
    return sentence

def preprocessing_udf(x):
  text = preprocessing(x['context'])
  return text  

result_df.head(2).apply(preprocessing_udf, axis=1)

+ Recent posts