brunch

You can make anything
by writing

C.S.Lewis

by Sand Apr 17. 2022

week 1. 자연어 처리 입문 -(1)

소설 "해리포터"에서 가장 많이 쓰인 단어는 무엇일까?

글을 읽고 쓰다보면 다음과 같은 질문이 생길 수 있다. 

1. 소설 "해리포터"에서 가장 많이 쓰인 단어는 무엇일까?

2. 도널드 트럼프가 그렇게 영어를 못한다는데 (?) 그가 사용하는 문장 길이의 평균은 몇 단어 정도일까?

3. 마블 히어로들의 언어 사용을 통한 긍정적인 캐릭터, 부정적인 인물 분류


문학을 전공한 내가 데이터 공부를 시작한 이유는 글에 대한 위와 같은 질문들에 대한 데이터 기반 답변을 찾아보기 위해서였다. 


글에 대한 데이터 기반 인사이트를 얻기 전 우리는 텍스트를 분석 가능한 상태로 만들어야 한다. 

NLKT 는 이러한 작업을 빠르고 편리학 해주는 파이썬 라이브러리이다. 

NLKT를 사용하면 언어에 대한 각종 문법 체계 (말뭉치, 토큰생성, 형태소 분석, 품사 태깅)를 활용해 자연어에 대한 인사이트를 추출할 수 있다. 


글을 문장과 단어로 나누고 조사, 접속사 등 의미 없는 단어들을 처리하기

Tokenization (토큰생성)

사람은 문장을 보면 "이건 숫자네" "이건 단어네" "이건 문장부호네" 가 바로바로 확인을 할 수 있다. 반면 컴퓨터는 "얘가 단어고 얘가 숫자야~"라고 누군가가 친절하게 설명해주지 않는 이상 구분을 하지 못한다.


토큰생성은 텍스트를 작은 단위로 쪼개서 "이건 뭐고 저건 뭐야"라는 과정을 간소화해준다. 물론 뭐가 숫자고 뭐가 단어인지 하나하나 하드 코딩 (함수나 method 없이 직접 한 땀 한 땀 코드를 치는 것을 하드코딩이라고 부른다)을 할 수도 있지만, NLKT는 이런 번거로운 작업을 대신 처리해준다.




Stop Words (불용어) 처리 

불용어는 한마디로 "뜻을 전달하지 않는 단어"들이다. 소설속에서 가장 많이 사용되는 단어를 찾는 작업을 한다고 가정해보자. 아마 높은 확률로 가장 많으 쓰이는 단어는 "나", "너", "그리고" "." "말했다" 등이 있을 것이다. 이런 단어들은 텍스트의 내용이 무엇인지 (물론 텍스트의 종류나 상황에 따라 다를 것이다)에 대한 인사이트를 얻는 것에 방해가 될 수 있다. 이를 방지하기 위해 우리는 NLKT에 친절하게 정리되어 있는 "불용어" 리스트를 활용할 수 있다. 


1. 불용어가 담긴 리스트를 "stopwords"라고 이름붙인다.

2. 만일 text에 있는 단어가 stopwords에 없는 경우 (즉 불용어가 아닌 경우) w 를 남기고 아닌 경우에는 버린다. 



많은 사람들이 문학이 "감성적인 학문"이라고들 하는데, 텍스트 분석을 해본 사람들은 알겠지만, 근거없는 비평은 비평이 아니다. 학부 4년동안 내가 배운 것은 다양한 방법론을 통해 글 안에서 일정한 패턴과 논리구조를 발견하고 이를 해석하는 것! 


자연어 처리는 여기서 한 발짝 더 나아가는 것과 같다고 생각한다. 

매거진의 이전글 Pyspark 참고 사이트 정리
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari