본문 바로가기
데이터분석

텍스트 마이닝(2) - 불용어 제거

by 어서오세여러분 2022. 7. 19.

# 6. 불용어 제거

 

불용어(stopwords)란,
데이터 전체에서 꽤 많이 등장하지만 실제로는 별로 중요하지 않은 단어들

ex) ~가, ~은, ~는과 같은 조사나 접사 등
      해당 데이터의 특성으로 자주 등장할 수 밖에 없는 단어들

 

 

불용어는 짐작하여 한 번에 정의하는 것이 아니라, 토큰화 결과를 확인하면서 계속해서 추가

stop_words = ['기자', '제공', '무단', '배포', '무단배포', '배포금지', '이번', '위해', '라며', '금지', '뉴스', '통해', '오늘', '지난달', '지난', '대한', '경우', '관련', '뉴시스', '현재', '지난해', '때문', '지금', '또한', '만큼', '최근', '당시', '올해', '대해', '다시', '모두']

 

df['tokenized'] = df['news'].apply(tokenizer.nouns)

# 데이터프레임의 news열에 tokenized.nouns라는 함수를 모두 적용하고 나서

# tokenized 열에 새로 저장하라! 라는 의미

 

 

 

  • 리프트 컴프리헨션 
test_list = ['경찰서', '상해', '혐의', '씨', '구속', '수사', '일']
remove_word_list = ['경찰서', '구속']
test_list = [item for item in test_list if item not in remove_word_list and len(item) > 1]

print(test_list)
['상해', '혐의', '수사']

 

1) for item in test_list

test_list라는 파이썬 리스트 자료형에서 원소를 하나씩 꺼내는데 이를 item이라 명명

 

2) if item not in remove_word_list and len(item) > 1

item이 remove_word_list에 없으면서 이 item의 길이가 1 초과인 경우를 조건으로 한다.

ex) '용' 이라는 단어의 길이는 1 / '학교'라는 단어의 길이는 2

 

3) [item for item in test_list if item not in remove_word_list and len(item) > 1]

조건에 맞는 경우에만 item을 남긴다.

다시 말해 조건에 맞지 않으면 살아남지 못하여 없어지게 됩니다.

 


 

  • 불용어 제거 코드
df['tokenized'] = df['tokenized'].apply(lambda x: [item for item in x if item not in stop_words and len(item) > 1])

1) lambda x 

동작 코드는 현재 입력을 x라고 하고 x에 대해 동작 코드를 수행하라는 의미

 

2) df['tokenized']

라는 열의 각 행에 대해서 apply를 하는데

 

3) 각 행을 x라고 한다면

x의 각 원소들은 stop_words에 없으면서 길이가 1보다 긴 경우에만 살아남게하라 라는 의미

댓글