[텍스트 마이닝의 개념 ]


1. 개요


텍스트 마이닝은 비정형 데이터 마이닝의 유형 중 하나입니다. 텍스트 마이닝은 비정형  및 반정형 데이터에 대하여 자연어 처리 기술과 문서 처리 기술을 적용하여 유용한 정보를 추출, 가공하는  목적으로 하는 기술입니다. 실생활에서 만들어 지는 대부분의 자료는 문서 형태입니다. 여러 분야의 논문, 신문  또는 잡지의 기사, 여론조사, 콜센터의 전화 보고서, 이메일, 디지털 형태의 문서 등이 문서 형태를 가지는데요.  문서 형태의 데이터는 기존의 통계분석이나 데이터 마이닝 기법을 적용하기에 부적합한 데이터 형태를 가집니다.   그리고 대부분 텍스트 데이터베이스에 저장된 데이터는 반구조적 데이터입니다. 문서는 제목, 작가, 출판날짜,  길이, 분류 등과 같은 약간의 구조적인 분야들을 포함할 수 있고, 또 문서의 요약, 내용과 같이 크기가 큰  비구조적 텍스트 요소 또한 포함되기 때문입니다. 즉, 반구조적 데이터란 완전하게 구조적이지도 않고 완전하게  비구조적이지도 않은 데이터를 의미합니다. 


텍스트 마이닝의 응용분야 는 다양한데요. 어떤 경우에 응용하는지를 살펴보겠습니다. 과학논문 데이터베이스에서  특정 주제의 논문들을 찾을 경우 텍스트 마이닝을 응용합니다. 그리고 문서로부터 구조화된 정보를 추출하여  데이터베이스화 시키거나 규칙을 찾을 경우, 사용자가 웹 상에서 문서를 찾는 것을 도와줄 때 경우, 대량의  데이터베이스에서 문서의 분류 및 군집화할 경우, 문서 분류정보를 이용하여 문서를 재해석할 경우,  신문/논문/보고서를 요약할 경우, 문서를 번역할 경우, 스팸메일을 여과할 경우, 문서를 여과하거나 추천할 경우,  대표적 키워드나 토픽을 추출할 경우, 질의 응답시스템을 활용할 경우, 설문지 조사의 기타항목을 요약할  경우 등이 있습니다. 




데이터 마이닝과 텍스트 마이닝을 비교 하여 각 특징에 대하여 정리해보겠습니다. 





먼저 데이터마이닝과  텍스트 마이닝은 마이닝할 대상이 다른데요. 데이터마이닝이 수치 또는 범주화된 데이터를 대상으로 적용하는  반면, 텍스트 마이닝은 텍스트를 대상으로 적용합니다. 그리고 구조를 보면 데이터 마이닝이 관계형 데이터 구조를  가지는데 반하여 텍스트 마이닝은 비정형 또는 정형의 텍스트 데이터를 다룹니다. 이 둘은 목적도 다른데요.  데이터 마이닝이 미래 상황 결과의 예견 및 예측을 하는 목적을 가지는 반면, 텍스트 마이닝은 적합한 정보를  획득하고 의미를 정제하고 범주화하는 목적을 가집니다. 그리고 방법으로는 데이터 마이닝이 기계학습 방법을  사용합니다. 텍스트 마이닝은 기계학습 방법을 포함하고 인덱싱, 언어처리, 온톨로지 등의 방법도 적용합니다.  이 중 온톨로지가 낯설을 수 있는데요. 온톨로지는 사람들이 세상에 대하여 보고 듣고 느끼고 생각하는 것에  대하여 서로 간의 토론을 통하여 합의를 이룬 바를 개념적이고 컴퓨터에서 다룰 수 있는 형태로 표현한 모델로,  개념의 타입이나 사용상의 제약조건들을 명시적으로 정의한 기술입니다. 온톨로지는 일단 합의된 지식을 나타내므로  어느 개인에게 국한되는 것이 아니라 그룹 구성원이 모두 동의하는 개념임으로 프로그램이 이해할 수 있어야 하므로  여러 가지 정형화가 존재합니다. 




텍스트 마이닝의 문제점

텍스트 마이닝의 문제점은 크게 두 가지가 있습니다. 하나는 상당히 자연어에 영향을 많이 받는다는 것입니다.  자연어란 사람이 쓰는 말로 한국어, 일본어, 독일어, 영어 등을 의미하는데요. 자연어 중 한글이나 한국어 처리에서  문제가 있는 분야는 광학문자판독, 음성인식 그리고 감성분석 등이 있습니다. 또 하나의 문제점은 분석 결과물  자체로 어떤 성과를 보기 어렵다는 것입니다.이는 분석 결과물 자체를 그대로 비즈니스 모델에 적용해서 뭔가를  만들어 성과를 보기 어렵다는 의미인데요. 워드 클라우드란 단어를 기억하고 가셔야 합니다. 이는 자주 볼 수 있는  분석 결과물 시각화 방법으로 단어들이 둥둥 떠 있고 단어끼리 선을 연결하여 시각화하는 방법입니다.



텍스트 마이닝이 요구하는 기법

텍스트 마이닝은 데이터 마이닝 기법 외에도 자연어 처리 기술 문서 처리 기술 을 추가로 요구합니다. 텍스트로 된  정보원으로부터 필요한 지식을 추출하는데 사용되는 자연어 처리 기술과 문서 처리 기술에 대해서 살펴보겠습니다. 





2. 자연어 처리 기술과 문서 처리 기술



자연어 처리 기술

먼저 자연어 처리 기술부터 알아보겠습니다. 텍스트 마이닝은 자연어 처리 도구에 매우 많이 의존하고 있습니다.  자연어 처리 도구란 자연어를 처리하는데 필요한 소프트웨어 라이브러리들을 의미하는데요. 형태소 분석기,  구문 분석기, 화행 분석기, 대화처리 분석기 등이 있습니다. 이 도구들은 자연어의 특성을 많이 타는 것으로 각  언어별로 다 품질이 다르고, 사전 관리 등 복잡한 문제가 있습니다. 영어권의 경우에는 기술적인 진척이 많고  영어의 특성이 분석이 더 쉽다는 것이 없지 않아 잘 되는 것도 있지만 한글 및 한국어는 어순이 명확하지 않아  아직은 기술적으로 부족하여 분석이 어려운 편입니다. 현재의 자연어 처리 기술은 부족합니다. 텍스트의 내용을  이해할 수 있을 만큼의 정확한 정보를 제공할 수준에 이르지 못하였을 뿐만 아니라, 구문 정보조차도 아주 높은  정확도로 제공하지 못하고 있습니다. 따라서 순수한 자연언어처리 기법을 사용하여 관계를 파악하는 것은  불가능합니다. 그래서 현실성이 있는 수준의 처리만 하여 필요한 정보를 추출하는데요. 구문 정보를 파악하기 위해  현재는 전체 파싱 대신에 부분 파싱 기법을 사용합니다. 파싱이란 컴퓨터에서 컴파일러 또는 번역기가 원시 부호를  기계어로 번역하는 과정의 한 단계로 각 문장의 문법적인 구성 또는 구문을 분석하는 과정입니다. 



자동문서 분류(텍스트 Classification)
문서 처리 기술 중 하나는 자동 문서 분류입니다. 대량의 온라인 문서들과 함께 중요한 텍스트 마이닝 작업으로  주어진 문서에 대해서 그 문서가 속하는 클래스를 결정하는 기술입니다. 자동 문서 분류 절차는 미리 분류된  문서들의 집합을 시험 집합으로 구성한 후 시험 집합은 분류 체계를 구성하기 위해 분석합니다. 그리고 생성된  문서 분류 체계는 다른 온라인 서류들의 분류에 사용됩니다. 일반적으로 문서 공간을 벡터 공간으로 보아 벡터로  문서를 표현합니다. 



문서 처리에 기계학습 방법을 적용하기 위해서 문서를 기계학습에 적합하도록 표현한 것인데요.
이 때, 벡터의 각 요소는 어휘 내의 한 단어가 됩니다. 그리고 비슷한 문서들이 유사한 관련 용어 빈도수들을
갖는다고 기대하기 때문에 빈도수 표에서 유사한 관련 용어 발생에 기초합니다. 이로써 문서들 사이 또는 문서  집합에서의 유사성을 측정할 수 있습니다. 



키워드 기반 연관분석
문서 처리 기술 중 나머지 하나는 키워드 기반 연관분석입니다 키워드 기반 연관분석은 빈번하게 발생하는 키워드의  집합이나 용어에서 연관성이나 상호관계를 발견하는 것입니다. 연관 분석 절차를 살펴보면 먼저 텍스트를 구문분석,  어근분석, 불용어 제거 등의 순서로 전처리를 하고, 연관 마이닝 알고리즘을 가동합니다. 문서데이터베이스에서  각 문서는 트랜잭션으로 볼 수 있고, 문서에서 키워드들의 집합은 트랜잭션에서 항목의 집합으로 생각할 수  있습니다. 그리고 문서 데이터베이스에서 키워드 연관 마이닝 문제는 트랜잭션 데이터베이스에서 품목 연관성  마이닝 문제와 유사합니다. 





[R을 활용한 텍스트 마이닝 수행 ]



1. 텍스트 파일 불러와서 코퍼스(Corpus)로 변환하기  


Corpus

R 프로그래밍 언어 패키지 중 tm패키지를 이해하기 위해서는 코퍼스(Corpus)에 대한  이해가 우선이 되어야 하는데요. 코퍼스(Corpus)는 텍스트 문서들의 집합으로 tm패키지에서 문서를 관리하는  기본 구조입니다. R 프로그래밍의 외부 데이터베이스나 파일로 관리됩니다. 그리고 저장장소를 표시하는 DirSource,  VectorSource, DataframeSource처럼 디렉토리, 백터값, 데이터프레임을 통해 읽어 들여 생성됩니다. 


Tm패키지 설치
R프로그래밍 언어를 활용하여 텍스트 마이닝을 수행해보겠습니다. 먼저 R 프로그래밍 언어 패키지 중  tm패키지를 설치해보겠습니다. 1번 박스 안 언어를 먼저 보겠습니다. library(tm)는 tm패키지를 불러오는  언어입니다. 그리고 R 디렉토리 - library - tm - 텍스트s - txt 폴더 안에 텍스트 마이닝에 필요한 텍스트 파일을  넣습니다. 그 후 두번째 줄에서 txt라는 이름으로 변수를 선언합니다. txt에는 화살표 왼쪽의 함수를 실행해서 얻은  결과를 담는 것입니다. 그럼 이제 우리는 언어를 해석할 수 있습니다. 읽어 들일 문서의 pass정보를 tm/텍스트/txt  디렉토리에서 가져와 txt에 담는다는 것입니다. 자, 그럼 2번 박스를 보죠. 우리는 이제 해석할 수 있습니다.  ovid라는 변수에 1번에서 불러온 텍스트들을 코퍼스(Corpus)로 변환하여 넣는 건데요. 위의 txt를 통해 읽어 들일  디렉토리를 지정하고 라틴어로 된 문서임을 지정하여 읽어 들인다는 의미입니다. 3번 박스의 언어는 읽어 들일  reader의 종류를 확인하는 것입니다. word, pdf,csv 등의 다양한 문서형식을 읽어 들일 수 있습니다. 


디렉토리로부터 읽어 들이기
이제 디렉토리로부터 텍스트 파일을 읽어 들이는 예제를 살펴보겠습니다. 4번 박스의 언어는 reut21578을 변수로  두고 여기에 tm/텍스트s/crude 디렉토리의 파일을 읽어 들이도록 지정합니다. 그리고 reuters라는 변수에 앞의 reut21578을 XML 리더로 읽어 들이도록 합니다. XML 문서로 다양한 태그 및 메타 데이터가 정의되어 있음을 확인할  수 있습니다. 이번에는 벡터소스로부터 텍스트 파일을 읽어 들이는 예제를 살펴보겠습니다 6번 박스에서 Vector  Source를 통해 코퍼스(Corpus)를 생성합니다. 그리고 생성한 코퍼스를 docsCorpus에 지정하고  파일로 저장합니다.   만약 코퍼스를 다른 오브젝트에서 가져온 경우 이를 저장하고자 하면 default working directory에 개별 파일로  저장됩니다. 

tm패키지의 기능인 tm_map을 이용해서 텍스트로 전환
이번에는 xml 문서를 tm패키지의 기능인 tm_map을 이용해서 텍스트로 전환해보겠습니다. 8번 박스를  보면 XML 문서를 tm패키지의 기능인 tm_map을 이용해서 텍스트로 전환합니다. 
as.Plain텍스트  Document는 xml 태그를  제거하고 일반 텍스트 형식으로 변환하는 언어입니다. 9번 박스에서 tolower는 중간의 빈칸을 제거합니다. 10번  박스에서는 stripWhitespace로 대문자를 소문자로 변경하여 사전에 있는 내용과 비교할 수 있도록 표준화 합니다.  한글이나 특수문자가 들어 있는 경우 오류를 발생시키므로 이를 데이터에는 별도로 분리하여 처리하거나 삭제해야  합니다. 11번 박스를 보면 텍스트 마이닝에는 언어별 stop word라는 게 있는데요. 한글에서는 조사가 해당되며  띄어쓰기 등을 통해 확인할 수 있고, 영어의 경우도 띄어쓰기와 시제 등의 내용을 제거합니다. stemDocument는  과거형이나 복수형 표준형으로 변환합니다. 



2. 변형 및 결과보기


 term document matrix 작업

이번에는 term document matrix 작업하는 언어를 살펴 볼 텐데요. 문서 번호와 단어간의 사용여부 또는 빈도수를  이용하여 matrix를 만드는 작업을 term document matrix 작업이라고 합니다. 12번 박스에서 DocumentTermMatrix는   Reuter로 읽어 들이고 변환한 문서를 document term matrix로 dtm을 생성한다는 것입니다. findFreqTerms(dtm,10)는  10회 이상 사용된 단어를 찾는 방법입니다. 만약 findFreqTerms(dtm, 10, 15)로 지정하면 10에서 15회 사이로  사용된 단어가 출력되는 것입니다. 14번 박스에서 findAssocs(dtm,"oil",0.65)은 findAssocs에서 oil과 연관성이  0.65 이상인 단어들이 표시하는 것입니다. 즉, oil과 같이 사용될 확률로 계산이 되는데 이를 통해 무슨 내용이  많이 언급되는지를 알 수 있습니다. 다음을 볼까요? removeSparseTerms(x, sparse)에서 sparse는 최대  sparsity값으로 해당 값까지는 허용되는데요. 즉, removeSparseTerms(tdm, 0.2)라는 것은 0.2를 넘는 경우는  삭제된다는 것입니다. 


워드클라우드

마지막으로 결과를 시각화하기 위해 워드 클라우드를 실행할건데요. 단어의 사용 빈도를 시각적으로 보도록  하겠습니다. 16번 박스 안을 살펴보겠습니다. 워드 클라우드를 불러옵니다. 작업한 것을 m이라는 변수에  실행합니다. 그리고 단어의 빈도를 계산하고 빈도에 의해 내림차순으로 정렬합니다. 그리고 워드 클라우드에  텍스트 크기나 색깔에 관하여 효과를 주는데요. 참고로 +기호는 윗줄과 아랫줄을 연결한다는 의미입니다. 엔터를  눌러 워드 클라우드를 만듭니다. 그럼 단어가 다음과 같이 구름처럼 생깁니다. 단어의 사용 빈도가 가장 높은  것은 가장 큰 글씨인 data, r, mining 등입니다.