영문 소설 '빨강머리 앤 (Anne of Green Gables)' 을 가지고 주인공 Ann을 중심으로 관계도를 만들어 보았다. 

     소설 텍스트는 '프로젝트 구텐베르크' 에서 가져왔다.

 

     https://www.gutenberg.org/ebooks/45

      

     사이트로 들어가면 다운받을 수 있는 종류가 많은데 나는 첫번째 Read online(web)으로 들어갔다.

   

 

     챕터별로 영문 텍스트를 복사 해서 Visual Studio(VS)에 붙여넣기를 했다.

      붙여넣기 하기 전에 VS에서 File -> New File -> ANNE OF GREEN GABLES.json 을 만들어주었다.

      (파일 저장은 jupyter notebook의 python 파일이 저장되는 곳에 저장했다.)

      그러고 나서 밑에 사진처럼 딕셔너리 형식으로 "cast"와 "chapters" 를 만들었다. 

      참고로 "cast"는 내가 주인공을 찾아 적어 넣었다. 

 

     그 다음 코드를 작성하였다.

       빨강머리 앤의 주인공 'Anne'을 기준으로 관계도가 그려진 것을 확인할 수 있다.

   

 

     DTM과  TF-IDF를 이용하여 추출한 벡터는 머신러닝 기법을 적용하기 위한 입력으로 사용되어

     문서 분류부터 다양한 분야에 활용될 수 있다. 

     문서 간의 유사도를 측정하여 주어진 문서와 가장 유사한 문서를 말뭉치에서 검색하는데 사용하는 방법도

     하나의 예이다.

     

    1. 코사인 유사도란?

      코사인 유사도는 두 벡터 간의 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도를 의미한다.

      두 벡터의 방향이 완전히 동일한 경우에는 1의 값을, 90°의 각을 이루면 0, 180°로 반대의 방향을 가지면 -1의 값을 갖게 된다.

      즉, 결국 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단할 수 있다.

      이를 직관적으로 이해하면 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미한다.

 

   

    2. 코사인 유사도 공식

       두개의 벡터인 A와 B에 대해서 구하는 식은 다음과 같다.

 

      예를들어 쉽게 설명하면

     

      doc_1 = "Data is the oil of the digital economy"

      doc_2 = "Data is a new oil"

      doc_3 = "Data is an information"

 

     위의 그림은 카운트 벡터를 사용하여 doc_1과 doc_2를 벡터화한 결과이다.

      이 결과를 가지고 코사인 유사도를 구해보면 아래와 같은 결과가 나온다.

 

 

    3. CountVectorizer( ) vs. TfidfVectorizer( )

        CountVectorizer( )와 TfidfVectorizer( )를 사용해서 코사인 유사도를 구한 결과를 보자.

     위의 그림과 같이 CountVectorizer( )와 TfidfVectorizer( )의 유사도 결과가 다르다는 것을 확인 할 수 있는데

     이는 TfidfVectorizer( )는 문서에서 많이 등장하는 불용어를 제거 하고 계산을 하기 때문이다.

 

 

코사인 유사도 소스코드 (깃헙)

 

GitHub - kaitnam/TIL: Today I Learned

Today I Learned. Contribute to kaitnam/TIL development by creating an account on GitHub.

github.com

 

 

 

     REFERENCE  

     https://studymachinelearning.com/cosine-similarity-text-similarity-metric/

     https://needjarvis.tistory.com/665     

     https://wikidocs.net/24603

 

 

     카운트 벡터에서는 빈도는 일종의 가중치로 작용하기에 빈도가 높을수록 중요한 단어로 취급 되는 경향이 있다.

     그렇다면 어떤 단어가 모든 문서에 나타난다면 그 단어는 과연 중요한 단어일까?

     모든 문서에 'the' 의 빈도수가 높다고 해서 중요하다고 생각하긴 어려울 것이다. 

     이걸 다시 얘기하면 모든 문서에 다 들어있는 단어는 별로 중요하지 않다.

     이러한 의미를 카운트 벡터에 반영한 것이 바로 TF-IDF 이다. 

 

    1. TF-IDF 란?

      용어 그대로 해석하면 단어빈도(Term Frequency) - 역문서빈도(Inverse Document Frequency) 인데,

      카운트 대신 단어의 빈도에 그 단어가 출현한 문서 수의 역수를 곱했다는 뜻이다.

 

      TF-IDF는 모든 문서에서 자주 등장하는 단어는 중요도가 낮다고 판단하며,

      특정 문서에서만 자주 등장하는 단어는 중요도가 높다고 판단한다.

      TF-IDF 값이 낮으면 중요도가 낮은 것이며, TF-IDF 값이 크면 중요도가 큰 것이다.

      즉, the나 a와 같이 불용어의 경우에는 모든 문서에 자주 등장하기 때문에

      불용어의 TF-IDF의 값은 다른 단어의 TF-IDF에 비해서 낮아지게 된다. 

 

    2. 예제

 

      위의 예제에서 카운트 벡터의 값(DTM)과 TF-IDF의 벡터 값이 다른것을 확인할 수 있다.

      또한, DTM의 결과에서 값이 0인것은 TF-IDF의 결과에서도 값은 0이다.

 

 

 

 

 

 

 

 

 

 

      REFERENCE  

     파이썬 텍스트 마이닝 완벽 가이드

     https://wikidocs.net/31698      

 

     1. 문서 단어 행렬(Document-Term Matrix, DTM)이란?

        다수의 문서에서 등장하는 각 단어들의 빈도를 행렬 값으로 표현한 것을 말한다. 

        표1과 같이 각 문서에 대한 BoW를 하나의 행렬로 표현하고 부르는 용어이다. 

       문서 단어 행렬은 문서들을 서로 비교할 수 있도록 수치화할 수 있다는 점에서 의의로 갖는다. 

표1

     

     2. DTM의 한계

       문서의 수가 많아지면 대부분의 값이 0으로 표현되는 희소 벡터(sparse vector)의 문제가 생긴다.

       희소 벡터는 많은 양의 저장 공간과 높은 계산 복잡도를 요구하기에 좋지 않다.

       이러한 이유로 텍스트 전처리 방법을 사용하여 구두점, 빈도수가 낮은 단어, 불용어를 제거하고,

       어간이나 표제어 추출을 통해 단어를 정규화하여 단어 집합의 크기를 줄인다.

 

       또한,

       단순 빈도 수 접근 방법은 한계를 가지기도 하는데 예를들어 불용어인 the는 어떤 문서이든 자주 등장한다.

       유사한 문서인지 비교하고 싶은 문서들에서 동일하게 the가 빈도수가 높다고 해서 이 문서들이

       유사한 문서라고 판단해서는 안된다.

 

 

 

 

 

     REFERENCE

    https://wikidocs.net/24559

 

     1. Bag of Words란 ?

         단어들의 출현 빈도(frequency)에만 집중하는 텍스트 데이터의 수치화 표현 방법으로

         문서가 가지는 모든 단어를 문맥이나 순서를 무시하고 단어에 대해 빈도 값을 부여해 특성(feature) 값을 추출하는 모델이다. 

         문서 내 모든 단어를 한꺼번에 Bag안에 넣은 뒤에 흔들어서 섞는다는 말로 Bag of Words 모델이라고 한다.

 

         예를 들어 책을 한 권 읽고 대략 어떤 내용인지 알아내야 한다고 생각해보자.

         처음부터 차근차근 글을 읽어 나가는 데에는 시간이 오래 걸린다.

         이를 좀 더 빨리 할 수 있는 방법은 컴퓨터를 이용해서 책에 나오는 단어의 빈도를 세는 것이다.

         책에 어떤 단어가 주로 사용됐는지 알아내면 내용을 유추할 수 있다. 

 

     2. Bag of Words 프로세스는?

         텍스트 마이닝을 하려면 말뭉치(corpus)를 우리가 다룰 수 있는 수치 형태로 변환해야 한다.

         이때 각 수치는 그 텍스트의 특성(feature)을 표현한다.

 

         비유를 들자면, 사람이라는 대상의 특성으로는 이름, 나이, 키, 몸무게 등이 있을 것이다.

         각 사람을 구분할 수 있는 것은 이러한 특성의 값들이 달라서다. (ex. Mike, 28 years old, 170cm, 62kg)

         우리가 정의한 특성 관점에서, 비슷한 사람끼리는 특성 값이 비슷할 것이다.

         그와 마찬가지로 텍스트 마이닝에서는 텍스트의 특성을 정의하고 그 값으로 텍스트를 구분한다. 

 

     

     3. BoW 피처(feature) 벡터화

         머신러닝 알고리즘은 일반적으로 숫자형 피처를 데이터로 입력: 받아 동작하기 때문에

         텍스트 데이터를 특정 의미를 가지는 숫자형 값인 벡터 값으로 변환해야 한다. 

         이러한 변환을 피처 벡터화라고 한다.

Bow의 피처 벡터화 2가지 방식

1. 카운트 기반의 벡터화
   : 단어 피처에 값을 부여할 때 각 문서에서 해당 단어가 나타나는 횟수, 즉 Count를 부여하는 경우를 말한다.
     카운트 벡터화에서는 카운트 값이 높을수록 중요한 단어로 인식된다.

2. TF-IDF(Term Frequency - Inverse Document Frequency) 기반의 벡터화
   : 개별 문서에서 자주 나타나는 단어에 높은 가중치를 주되, 모든 문서에서 전반적으로 자주 나타나는 단어에
     대해서는 패널티를 주는 방식으로 값을 부여하는 방법이다.

 

     4. 텍스트의 특성(feature)은?

         그렇다면 텍스트의 특성은 무엇으로 정의할 수 있을까?

         텍스트의 특성은 단어로 표현하고, 특성값은 그 단어가 텍스트에서 나타나는 횟수로 표현한다.

         예를들어 "text mining is the process of deriving high quality information from text"라는 문장이 있을 때,

         이 문장에는 'text', 'mining', 'is', 'the'등의 단어가 사용됐다.

         따라서 각 단어가 특성이 되고, 이 단어의 빈도가  특성의 값이 된다.

         다음과 같이 파이썬의 딕셔너리로 표현 할 수 있다.

     

     feature = { 'text': 2,  'mining': 1,  'is': 1,  'the': 1,  'process': 1,  'of': 1,  'deriving': 1,  'high': 1,  'quality': 1, 'information': 1,  'from': 1}

 

         모든 문서의 특성은 같아야 서로 비교할 수 있기 때문에 동일한 단어들로 특성을 표현해야 한다.

         다시 말해 전체 말 뭉치에 한번이라도 사용된 단어는 문서에 없더라도 특성에 포함하고 빈도를 0으로 주면 된다.

 

         쉽게 다시 설명하면,

         우선 말뭉치(Corpus)와 문서(Document)의 차이점을 알아야 하는데

         텍스트 마이닝에서 보통 문장을 문서라고 하고 문장들의 집합을 말뭉치라고 한다.

         ( ex. 100개의 문장으로 구성된 말뭉치)

       위의 예제에서는 하나의 말뭉치와 3개의 문서가 있는데 각각의 문서의 단어 조합 즉, 특성이 다르다. 

        문서2에는 'quality', 'deriving' 같은 특성이 포함되어 있지만 문서1과 문서3에는 없다. 

        이렇게 되면 모든 문서의 특성이 같지 않기때문에 서로 비교 할 수가 없다.

        그러므로 전체 말뭉치에 한번이라도 사용된 단어는 특성에 포함하고 빈도를 0으로 준다.

 

      카운트 기반 문서 표현은 문서의 의미를 반영해 벡터를 만드는 과정을 말한다.

       위의 결과는 3개의 문서에 대해 특성 벡터를 추출한 결과이고 결과에서 보듯이 각 문서에 없는 특성(단어)들은 

       0으로 되어 있는 것을 확인할 수 있다. 이렇게 특성이 같아야 서로 비교 할 수 있다.

 

      이렇게 하기 위해서 먼저 대상이 되는 말뭉치에 대해 하나의 단어 집합(Vocabulary)을 구성한다.

       그리고 이 단어 집합을 대상으로 각 문서에 대해 빈도를 표시한다. 

       여기서 문제점은 위의 결과와 같이 하나의 문서에서 사용한 단어에 비해 사용하지 않은 단어(0)가 훨씬 많다. 

       이는 카운트 기반 문서 표현의 본질적인 문제로, 문서를 표현하기 위해 너무나 많은 특성을 사용해야 하고 

       그 특성중에서 극히 일부만 값을 갖는다. 

       이와 같이 대부분의 값이 0인 특성 벡터를 희소 벡터(sparse vector)라고 부른다.  

 

       정리하자면 텍스트는 우리가 정의한 특성에 대한 특성 값의 집합(혹은 벡터)으로 변환하는데

        BoW에서는 단어가 특성이 되고, 이렇게 표현하는 이유는 문서의 단어들을 가방에 넣으면 순서가

        사라지기 때문이다. 가방 안의 단어들에 대해 빈도를 계산하여 특성 벡터를 추출한다.

 

파이썬 텍스트 마이닝 완벽 가이드

 

* 말뭉치는 '언어 연구를 위해 컴퓨터가 텍스트를 가공, 처리, 분석할 수 있는 형태로 모아 놓은 자료의 집합'을 의미한다. 일반적으로 우리가 텍스트 마이닝을 한다면 그 대상은 하나의 문장 혹은 문서(document)가 아니고 그러한 문장이나 문서들의 집합(corpus)이 된다. 따라서 카운트 기반의 문서표현은 개별 문서가 아닌 말뭉치를 대상으로 한다. 

 

     

 

 

 

 

 

 

 

 

     REFERENCE

      파이썬 텍스트 마이닝 완벽 가이드(2022)

      파이썬 라이브러리를 활용한 텍스트 분석(2022)

      파이썬 머신러닝 완벽 가이드

      https://swjman.tistory.com/125

      

 

 

 

 1. 품사 태깅(Part-of-Speech Tagging)이란?

 

         품사 태깅은 형태소(의미를 가진 가장 작은 말의 단위)에 대해 품사를 파악해 부착(tagging)하는 작업을 말한다.

   a)  형태소란?
         형태소는 '의미를 가진 가장 작은 말의 단위'를 의미한다.
         예를 들어 '책가방'이라는 단어는 '책'과 '가방'으로 나눌 수 있고 '가방'을 '가'와 '방'으로 나누면 본래의 뜻을 잃어버린다.
        그러므로 '책' 과 '가방'은 형태소로 볼 수 있으나, '가'와 '방'은 형태소라고 볼 수 없다.

   b) 품사란?

       품사는 명사, 대명사, 수사, 조사, 동사, 형용사, 관형사, 부사, 감탄사와 같이 공통된 성질을 지닌 낱말끼리 모아 놓은
       낱말의 갈래'를 말한다.

 

     

 2. 영어로 된 텍스트에 대한 품사 태깅 _ NLTK

     품사의 약어를 잘 모를 경우에는 nltk.help.upenn_tagset()을 사용해 품사 약어의 의미와 설명을 볼 수 있다.

 

   

 3. 한글로 된 텍스트에 대한 품사 태깅 _ KoNLPy

 

     그렇다면 NLTK로 한국어 문서에 대해서도 품사 태깅도 가능할까? 안된다.

     파이썬에서 쓸 수 있는 대표적인 한국어 형태소 분석 및 품사 태깅 라이브러리는 KoNLPy가 있다.

     KoNLPy는 Hannanum, Kkma, Komoran, Twitter(Okt), Mecab 이렇게 다섯 종의 형태소 분석기를 제공한다. 

     보통 Twitter(Okt) 속도가 빨라서 많이 사용하지만 KoNLPy 홈페이지에서 각 분석기 간의 성능을 비교해보고 용도에 맞는 

     분석기를 선택하여 사용한다. 참고로 Mecab은 윈도우를 지원하지 않는다.  

 

 

 

 

     REFERENCE

     파이썬 텍스트 마이닝 완벽 가이드(2022)

'데이터 분석 > 자연어 처리' 카테고리의 다른 글

2.6 문서 단어 행렬(Document-Term Matrix, DTM)  (1) 2023.01.19
2.5 Bag of Words(BoW)  (0) 2023.01.16
2.3 정규화(Nomalization)  (0) 2023.01.09
2.2 토큰화(Tokenization)  (0) 2023.01.09
2.1 정제(Cleaning)  (0) 2023.01.09

     

     1. 정규화(Nomalization)란?

        같은 의미를 가진 동일한 단어이면서 다른 형태로 쓰여진 단어들을 통일해 표준 단어로 만드는 작업을 말한다.

        예를 들어 '간다', '갔다', '가려고 한다.' 등은 '가다'라는 기본형이 변환된 것이고  am, are, is는 서로 다른 스펠링이지만 

        기본형인 be가 변환된 것이다. 

        이처럼 이렇게 동일한 단어이지만 다른 형태로 쓰여진 단어를 표준 단어로 만드는 작업을 정규화라고 한다.

        정규화 방법에는 표제어 추출(Lemmatization)과 어간 추출(Stemming)이 있다.

 

     2. 표제어 추출(Lemmatization)

       표제어(Lemma)는 '기본 사전형 단어' 정도의 의미를 갖으며 표제어 추출은 단어들로부터 사전에 정의된 기본형을

       찾아가는 과정이다.

       표제어 추출은 단어들이 다른 형태를 가지더라도, 그 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단한다.

       위에 예와 같이 am, are, is를 뿌리 형태인 be로 통합하는 방법을 말한다. 

 

     3. 어간 추출(Stemming)

       어간 추출은 '어형이 변형된 단어로부터 접사 등을 제거하고 그 단언의 어간을 분리해 내는 작업'을 말한다.

      a) 어형 : 단어의 형태
      b) 어간(stem) : 단어의 의미를 담고 있는 단어의 핵심 부분
      c) 접사(affix) : 단어에 추가적인 의미를 주는 부분

       

      예를들어 '간다', '갔다'에서 바뀌지 않는 부분인 '가'를, '작다', '작으니'에서 바뀌지 않는 부분인 '작'을 어간이라고 한다. 

      동사와 형용사가 서술의 시제나 묘사 의도에 따라 다양하게 변화할 때 변화하지 않는 부분을 어간이라고 하고,

      어간 추출은 그러한 어간을 분리하는 작업이다.

      어간 추출 알고리즘에는 포터 스테머(Porter Stemmer), 랭카스터 스테머(Lancaster Stemmer)가 있다.

       

        위의 결과와 같이 포터 스테머와 랭카스터 스테머의 결과가 다르다.

        어떤 스테머를 선택할지는 둘 다 수행해서 최종 결과를 비교해 보면 결정할 수 있다.

        분석 목적이나 대상에 따라 더 좋은 성능을 보이는 스테머가 달라질 수 있기 때문이다. 

 

 

 

 

 

 

      REFERENCE

      https://wikidocs.net/22530

      파이썬 텍스트 마이닝 완벽 가이드(2022)

'데이터 분석 > 자연어 처리' 카테고리의 다른 글

2.6 문서 단어 행렬(Document-Term Matrix, DTM)  (1) 2023.01.19
2.5 Bag of Words(BoW)  (0) 2023.01.16
2.4 품사 태깅(PoS Tagging)  (0) 2023.01.10
2.2 토큰화(Tokenization)  (0) 2023.01.09
2.1 정제(Cleaning)  (0) 2023.01.09

     1.  토큰화란? 

        주어진 텍스트에서 토큰(token)이라 불리는 단위로 나누는 작업을 토큰화(tokenization)이라고 한다.

        토큰의 단위가 상황에 따라 다르지만, 보통 의미있는 단위로 토큰을 정의한다. 

 

     2. 단어 토큰화(Word Tokenization)

        토큰의 기준을 단어(word)로 하는 경우를 말한다. 

        다만, 여기서 단어(word)는 단어 단위 외에도 단어구, 의미를 갖는 문자열로 간주되기도 한다.

        예를들어 구두점(punctuation) 같은 문자를 제외시키는 간단한 단어 토큰화 작업을 해보면

       *구두점 : 마침표(.), 컴마(,), 물음표(?), 세미콜론(;), 느낌표(!) 등과 같은 기호

    

       입력 : Time is an illusion. Lunchtime double so!

 

       출력 : 'Time', 'is', 'an', 'illusion', 'Lunchtime', 'double', 'so'

        

        출력 결과에서 보듯이 입력으로부터 구두점을 제외시킨 후 띄어쓰기를 기준으로 잘라 낸 결과를 확인 할 수 있다.

 

        토큰화 작업은 단순히 구두점이나 특수문자를 제거하는 정제(cleaning) 작업을 수행하는 것으로 해결 되지 않는다.

        토큰이 의미를 잃어버리는 경우가 발생하기 때문이다.

        또한 띄어쓰기 단위로 자르면 사실상 단어 토큰이 구분되는 영어와 달리, 한국어는 띄어쓰기만으로는 단어 토큰을

        구분하기 어렵다. 이점을 유의하여야 한다.

 

  • word_tokenize와는 달리 WordPunctTokenizer는 is, ', s의 세 토큰으로 분리하는 것을 볼 수 있다.
    이는 두 토크나이저가 서로 다른 알고리즘에 기반하기 때문이다.     
  • 케라스의 text_to_word_sequence는 기본적으로 모든 알파벳을 소문자로 바꾸면서 마침표나 컴마, 느낌표 등의 구두점을 제거한다.
    하지만 it's와 let's 같은 경우 아포스트로피는 보존하는 것을 볼 수 있다.

     

  • 영어는 단어 토큰화를 단어 단위로 분리한다고 설명할 수 있으나, 한글을 기준으로 할 때에는 이 설명이 명확하지 않다.
  • 한글을 대상으로 하는 토큰화는 엄밀하게 말하자면 의미를 가지는 최소단위, 즉 형태소로 텍스트를 분리하는 것을 의미한다. 
    그런 의미에서 '안녕하세요'의 경우 '안녕'과 '하세요'를 분리하는 것이 더 맞을 것이다.
  • 영어는 보통 모든 단어를 공백으로 분리할 수 있어 어렵지 않게 단어 토큰화할 수 있지만, 한국어에서는 의미를 이루는 최소 단위가
    공백 없이 붙어 있는 경우가 많아서 공백을 이용한 분리만으로는 부족하게 느껴진다.
  • 공백만으로 토큰화가 잘 되지 않는다면 새로운 방법으로 단어를 분리해야 하고 이와 같은 작업을 단어 분할(word segmentation)이라고 한다.
  • 한국어 텍스트를 정확하게 토큰화하려면 다양한 단어 분할방법을 적용할 필요가 있다.

     3. 문장 토큰화(Sentence Tokenization)

        문장 토큰화는 여러 문장으로 이루어진 텍스트를 각 문장으로 나누는 것을 말한다. 

        즉, 토큰의 기준을 문장(sentence)로 하는 경우를 말한다.

  • NLTK는 영어 학습 데이터에 대해 사전학습된 모델을 사용해 토큰화한다. 다른 언어에 대해 문장 토큰화를 하려면 사전 학습된 
    모델을 지정해 불어 올 수 있다.
  • NLTK에는 한글에 대해 사전학습된 모델이 없다. 그러나 문장 토큰화는 각 문장의 끝에 있는 마침표 등을 기준으로 분리하도록 
    학습되어 있으므로, 영어로 학습된 모델도 한국어에 대해 어느 정도 잘 작동할 것으로 예측할 수 있다.

 

 

     REFERENCE

      https://wikidocs.net/21698

      파이썬 텍스트 마이닝 완벽 가이드(2022)

 

'데이터 분석 > 자연어 처리' 카테고리의 다른 글

2.6 문서 단어 행렬(Document-Term Matrix, DTM)  (1) 2023.01.19
2.5 Bag of Words(BoW)  (0) 2023.01.16
2.4 품사 태깅(PoS Tagging)  (0) 2023.01.10
2.3 정규화(Nomalization)  (0) 2023.01.09
2.1 정제(Cleaning)  (0) 2023.01.09

    

     주어진 텍스트에서 용도에 맞게 토큰을 분류하는 작업을 토큰화(tokenization)라고 하며, 토큰화 작업 전, 후에는

     텍스트 데이터를 용도에 맞게 정제(cleaning) 및 정규화(normalization)하는 일이 항상 함께한다.

 

     1. 정제(Cleaning)란?

         정제는 주어진 텍스트에서 노이즈 데이터를 제거하는 것을 말한다. 

         노이즈 데이터란 자연어가 아니면서 아무 의미도 갖지 않는 글자들(특수 문자 등)을 의미하기도 하지만,

         분석하고자 하는 목적에 맞지 않는 불필요 단어들을 말하기도 한다.

         불필요 단어들을 제거하는 방법으로는 불용어 제거등장 빈도가 적은 단어, 길이가 짧은 단어들을 제거하는 방법이 있다.

 

     2. 불용어(Stopword) 제거

         불용어는 의미 없는 특수문자 들과는 별도로, 실게 사용되는 단어이지만 분석에는 별 필요가 없는 단어들을 말한다. 

         예를 들어 I, my, me, over, 조사, 접미사 같은 단어들을 말하며, NLTK에서는 100여개 이상의 영어 단어들을

         불용어로 패키지 내에서 미리 정의하고 있다.

 

 

       또한, 사용자가 불용어 사전을 만들어서 사용할 수도 있다.

     나의 불용어 사전에는 'i', 'go', 'to' 를 넣었다. 그래서 NLTK 불용어 패키지를 사용했을때의 결과는

     'go'를 포함하고 있지만 나의 불용어 사전을 사용했을때의 결과에는 'go'를 포함하고 있지 않다.

     반대로 NLTK 불용어 사전에는 "couldn't"가 불용어로 되어있어서 결과에 나오지 않았는데

     나의 불용어 사전에는 "couldn't"가 불용어로 포함 되어있지 않기 때문에 결과에 "couldn't"가 포함됐다. 

 

 

 

 

     REFERENCE

      https://wikidocs.net/22530

      파이썬 텍스트 마이닝 완벽 가이드(2022)

 

'데이터 분석 > 자연어 처리' 카테고리의 다른 글

2.6 문서 단어 행렬(Document-Term Matrix, DTM)  (1) 2023.01.19
2.5 Bag of Words(BoW)  (0) 2023.01.16
2.4 품사 태깅(PoS Tagging)  (0) 2023.01.10
2.3 정규화(Nomalization)  (0) 2023.01.09
2.2 토큰화(Tokenization)  (0) 2023.01.09

+ Recent posts