Python/자연어처리

2024-06-24 2. 자연어 처리 프로젝트 진행 순서, 3.전처리 실습

nomad06 2024. 6. 24. 15:50

1. 문제 정의

  •  문제의 대한 솔루션이 있어야 하고, 명확하고 구체적일수록 알맞는 자연어처리 기술을 찾을 수 있음

 

 

 

 

 

2. 데이터 수집 및 분석

  • 다양한 학습데이터를 수집하기 위해 공개된 데이터셋, 유료 데이터셋 또는 웹 크로링을 사용하여 수집

 

 

Papers with Code - Machine Learning Datasets

286 datasets • 138532 papers with code.

paperswithcode.com

  • 웹크로링을 통해 데이터를 수집 했다면 EDA(탑색적 데이터 분석) 및 분석을 통해 데이터를 철저하게 검증해야함
  • 레이블이 필요하다면 수집한 데이터에 레이블을 붙여야 함

 

 

 

 

3. 데이터 전처리

  • 학습에 용이하게 데이터를 수정/보완 하는 작업
  • 자연어처리 진행 과정에서 데이터가 차지하는 비준이 매우 높기 때문에 데이터를 수집하고 전처리하는 과정이 매우 중요함
  • 큰화(Tokenization): 주어진 데이터셋에서 문장이나 문서들을 토큰이하 불리는 단위로 나누는 작업
  • 정제(Cleaning):갖고 있는 데이터셋으로 노이즈 데이터(이상치, 편향 등)을 제거하는 작업 
  • 규화(normalization):표현 방버이 다른 데이터들을 통합시커서 같은 항목으로 합침

 

1. 토큰화 (Tokenization)

  • 토큰의 단위는 자연어 내에서 의미를 가지는 최소의 단위로 정의  
  • 토큰화 작업은 주어진 코퍼스내 자연어 문장들을 토큰이라 불리는 최소 단위로 나누는 작업
  • 코퍼스: 자연어 처리 연구나 애플리케이션 활용을 염두에 두고 수집된 테스트 데이터셋을 의미 

2. 토큰화 과정의 필요성 

  • 언어의 모델의 자언어 이해 능력 향상 
  • 다양한 자연어를 효율적으로 표현 가능
    • 중복을 제거한 대규모 자연어 코퍼스 내 토큰의 집합(단어 사전) 사용
    • 적절한 정보량을 내포하면서 전체 단어 사전의 개수가 많아지지 않도록 토큰의 단위를 잘 정의해야 함
    • 상황에 따라 다르지만 , 일반적인 자연어 처리
    • 작업에서 단어 사전의 규모는 약 10000 ~ 50000개 정도로 구성 (현재 한글의 글자 수는 11172개)

3. 토큰화 방법

  • 문장 토큰화 : 토큰의 기준을 문장으로 하는 토큰화 방법 
    • 문장의 끝에 오는 문장 부호를 기준으로 코퍼스를 잘라냄(. 또는 ! 또는 ?)
  •  단어 토큰화 : 토큰의 기준을 단어로 하는 토큰화 방법 
    • 보편적으로 구분 기호를 가지고 텍스트를 나눈게 되며, 기본적으로 공백을 구분자로 사용 
    • 한국어의 경우 교착어이기 떄문에 공백으로 단어 토큰화를 하면 성능이 좋지 않음 
    • 새로운 단어가 추가될수록 단어 사전의 크기가 계속 증가 
    • OOV(Out of Vocabulary) 문제  
  • 문자 토큰화 : 토큰의 기준을 문자로 하는 토큰화 방법 
    • 단어 토큰화의 한계점들을 해결하기 위한 방법
    • 영어는 26개의 알파벳에 따라 분리, 한국오는 자음 19와 모음 21개의 글자에 따라 분리
    • 문장 하나를 생성하는데 너무 많음 추론이 필요함 
    • 단어 사전이 작지만, 모델에 예측 시간에 문제가 생길수 있음 
  • 서브워드 토큰화 : 토큰의 기준을 서브워드로 하는 토큰화 방법  
    • 단어 토큰화와 문자 토큰화의 한계점을 해결하기 위한 방법
    • 문자 토큰화의 확장된 버전으로 토큰의 단위를 n개의 문자로 정의하고 해당 기준에 따라 텍스트를 분절하는 방법
    • 형태소 분절 기반의 서브워드 토큰화로 확장될 수 있어 한국어에서도 좋은 성능을 가짐
    • 서브워드를 만드는 알로그즘중에서 가장 유명한 것은 BPE 

 

 

 

 

 

 

4. 서브워드 토큰화

 

1. 서브워드 토큰화

  • 단어보다 더 작은 의미의 단위 
  • 단어를 여러 서브워드로 분리해서 단어 사전을 구축하겠다는 토큰화 방법
  • 신조어에서 주로 발생하는 OOV문제를 완화
  • 예) birthday = birth + day
          아침밥 = 아침 + 밥

2. BPE(Byte Pair Encoding)

  • 코퍼스 내 단어의 등장 빈도에 따라 서브워드를 구축하는데 사용 
  • 2016년 아래 논문에서 처음 제안
    Neural Machine Translation of Rare Words with Subword Units: https://arxiv.org/abs/1508.07909
  • 글자단위에서 점진적으로 서브워드 집합을 만들어내는 Bottom-up 방식의 접근 방식으로 자연어 코퍼스에 있는 모든 단어들을 글자 단위로 통합하는 방식

3. WorldPiece Tokenizer

  • 구글이 2016년도 아래 논문에 처음 공개한 BPE의 번형 알고리즘
    https://arxiv.org/abs/1609.08144
  • 병합할 두 문자가 있을 때 각각의 문자가 따로 있을 때를 더 중요시 여기는지, 병합되었을 때를 더 중요시 여기는지에 차이점을 둠 
  • GPT모델와 같은 생성 모델의 경우에는 BPE 알로리즘을 사용
  • BERT, ELECTRA와 같은 자연어 이해 모델에서는 WorldPiece Tokenizer를 주로 사용

 

 

 

 

 

5. 정제(Cleaning)

  • 토큰화 작업에 방해가 되는 부분들을 필터링하거나 토큰화 작업 이후에도 여전히 남아있는 노이즈들을 제거하기 위해 지속적으로 이뤄지는 전처리 과정 
  • 어떤 특성이 노이즈인지 판단하거나 모든 노이즈를 완벽하게 제거하는 것은 어렵기 때문에 일돈의 합의점을 찾아야 함

 

1. 정제 작업의 종류

  • 불용어(Stopword) 처리 
    • 불용어의 정의는 가변적이기 때문에 추가하고 싶은 불용어가 있다면 직접 정의할 수 있음 
    • 보편적으로 선택할 수 있는 한국어 불용어 리스트
      https://www.ranks.nl/stopwords/korean
  • 불필요한 태그 및 특수 문자 제거  
  • 코퍼스 내 등장 빈도가 적은 단어 제거
    • 코퍼스 내 단어들의 빈도를 분삭하여 분표를 보고 특정 Threshold를 설정한 후, 해당 threshold아래의 단어들을 필터링하는 방식으로 정제 

2. 정제 과정에서 유의해야할 점

  • @와 같은 특수 문자는 일반적인 작업에서는 정보양이 적은 토큰일 수 있지만 이메일과 관련한 내용을 판단해야 하는 작업에서는 유용한 토큰으로 사용될 수 있음
  • 자연어처리 작업에서 데이터를 수집한 이흐에는 항상 목적에 맞지 않는 노이즈가 있진 않은지 검사하고 발견한 노이즈를 정제하기 위한 노력이 필요

 

 

 

 

 

6. 정규화(Normalization)

  • 일반적인 머신러닝 작업에서 데이터 정규화는 학습데이터의 값들이 적단한 범위를 유지하도록 데이터의 범위를 변환 하거나 스케일링하는 과정 
  • 정규화 목표는 모든 데이터가 같은 정도의 스케일로 반영되도록 하는 것 
  • 자연어처리 정규화의 핵심은 표현방법이 다른 단어들을 통합시켜서 같은 단어로 만들어주는 과정 

 

1. 정규화 작업이 필요한 이유

  • 이상적으로 단어 사전 내의 단어 토큰들이 코두 중요하게 고려되길 원함
  • 자연어의 특성 상 의미가 같은데 표기가 다른 단어들이 있을 수 있고, 의미가 같지만 사용 빈도가 낮은 동의어들을 학습에 유용하게 활용되지 않을 수 있음
  • 의미가 같지만 표기가 다른 단어들을 통합할 수 있다면, 통합된 단어의 사용 빈도가 높아질 것이고 빈도가 낮은 단어들의 중요도가 높아질수 있음 

2. 정규화 작업의 종류

  • 어간 추출, 표제어 추출
    • 어간 추출: 형태학적 분석을 단군화한 버전으로 정해진 규칙만 보고 단어의 어미를 자르는 어림짐작의 작업 
    • 표제어 추출: 단어들이 다른 형태를 기지더라고, 그 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단하는 방법
  • 대소문자 총합  
    • 대문자와 소문자가 구분되어야 하는 경우도 있음 , 무작정 소문자로 총합해서는 안됨, 예) US(미국), us(우리)

3. 정규화 시 유의할 점 

  • 규칙이 너무 엄격한 정규화 방법은 부작용이 심해 학습에 악영향을 줄 수 있음
  • 원본 의미를 최대한 유지하는 것이 학습에 도움이 됨 
  • 대화에서 사용하는 의미가 비슷한 이모티콘들을 통합하는 정규화 작업 

 

 

 

 

 

7. 한국어 데이터 전처리

 

1. 한국어의 특성 

  • 영어는 합성어나 줄임말에 대한 예외처리만 한다면 띄어쓰기를 기준으로 하는 토큰화 작업으로도 어느 정도의 성능을 보장할 수 있음
  • 한국어에는 조사나 어미가발달되어 있기 때문에 띄어쓰기만으로 단어를 문리하면 의미적인 훼손이 일어날 수 있음
  • 띄어쓰기 단위가 되는 단위를 "어쩔"이라고 하는데 어절 토큰화와 단어 토큰화가 같지 않기 때문 

2. 형태소 분석 

  • 형태소를 비룻하여, 어근/접두사/접미사/품사 등 다양한 언어적 속성의 구조를 파악하는 것을 의미
  • 형태소 분석 과정은 한국어 단어에서 형태소를 추출하여 분리하는 작업이며, 이휴에 필요에 따라 사전 정의된 품사를 해당 단어에 태깅하는 작업을 하기도 함 
  • 태깅: 형태소의 뜻과 문맥을 고려하여 단어에 품사를 매핑하는 것 

 



@. 논문리뷰하기

 

 

1. https://arxiv.org/abs/1508.07909

 

Neural Machine Translation of Rare Words with Subword Units

Neural machine translation (NMT) models typically operate with a fixed vocabulary, but translation is an open-vocabulary problem. Previous work addresses the translation of out-of-vocabulary words by backing off to a dictionary. In this paper, we introduce

arxiv.org

 

 

 

2. https://arxiv.org/abs/1609.08144

 

Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation

Neural Machine Translation (NMT) is an end-to-end learning approach for automated translation, with the potential to overcome many of the weaknesses of conventional phrase-based translation systems. Unfortunately, NMT systems are known to be computationall

arxiv.org

 

 


 

 

1. 자연어 전처리 

 

 

 뉴스 기사 크롤링 라이브러리 설치


      
      # 웹 스크래핑을 통해 뉴스 기사를 수집하고 분석하는데 사용되는 라이브러리
      !pip install newspaper3k


 

 

 

 지원 언어 확인


       
        import newspaper

        newspaper.languages()


Your available languages are:

input code full name
  vi   Vietnamese
  it   Italian
  de   German
  sr   Serbian
  zh   Chinese
  fa   Persian
  be   Belarusian
  sv   Swedish
  el   Greek
  da   Danish
  no   Norwegian
  nb   Norwegian (Bokmål)
  et   Estonian
  hu   Hungarian
  id   Indonesian
  en   English
  es   Spanish
  pt   Portuguese
  fr   French
  fi   Finnish
  pl   Polish
  ro   Romanian
  ko   Korean
  hi   Hindi
  sl   Slovenian
  hr   Croatian
  ar   Arabic
  bg   Bulgarian
  sw   Swahili
  ja   Japanese
  uk   Ukrainian
  nl   Dutch
  ru   Russian
  he   Hebrew
  tr   Turkish
  mk   Macedonian

 

 

 

 다음 뉴스 기사 데이터


       
        # 특정 뉴스의 기사의 url을 통해 기사를 다운로드하고, 파싱하며 기사의 메타데이트와 본문 내용을 추출
        from newspaper import Article

        article = Article(url, language = 'ko')

        article.download()
        article.parse()

        print('[title]', article.title)
        print('[content]', article.text)

 
[title] 개봉 D-2 '핸섬가이즈', 한국영화 예매율 1위 기염…흥행 청신호
[content] 6월 26일 개봉하는 고자극 오싹 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.

iMBC 연예뉴스 사진

개봉 전 시사회를 통해 언론과 관객 모두를 사로잡으며 예사롭지 않은 호평을 얻고 있는 영화 '핸섬가이즈'가 관객들의 열띤 기대에 힘입어 개봉을 이틀 앞두고 한국영화 예매율 1위에 등극했다. '핸섬가이즈'는 평화로운 전원생활을 꿈꾸던 ' 재필'과 '상구'가 하필이면 귀신들린 집으로 이사 오며 벌어지는 고자극 오싹 코미디다.

영화진흥위원회 통합전산망에 따르면 '핸섬가이즈' 는 6월 24일 오전 8시 55분 기준 14.0%의 예매율로 한국영화 예매율 1위에 올라 올여름 극장가 최고의 기대작임을 입증했다. 특히 이번 한국영화 예매율 1위는 여름 극장가에 찾아오는 다양한 화제작들 속에서 이뤄낸 유의미한 결과라 더욱 이목을 집중시킨다. 여기에 '인사이드 아웃 2'에 이어 전체 예매율로는 2위를 기록하며 그 뒤를 쫓고 있어 6월 26일(수) 개봉을 통해 시작될 본격적인 흥행 레이스에 더욱 귀추가 주목된다.

영화 '핸섬가이즈' 는 귀신들린 집으로 이사 온 불운의 집주인 '재필'(이성민)과 '상구'(이희준)가 원치 않았던 강제 집들이를 시작하며 멈출 수 없는 웃음을 유발한다. 끝없이 몰려드는 불청객은 사람, 악령 가리지 않아 두 남자가 꿈꾸던 드림하우스에서 펼쳐지는 예측불가한 웃음으로 관객들을 사로잡을 것이다. 이를 완벽한 연기력으로 소화한 이성민, 이희준, 공승연, 박지환, 이규형 등 믿고 보는 배우들의 환상적인 앙상블은 물론 코미디와 호러 두 마리 토끼를 다 잡은 복합 장르가 전하는 독보적인 매력으로 관객들을 극장가로 불러들일 것이다.

 

 

 추가 데이터






        additional_info = 
[
            "※ 기자 김사과(apple@apple.com) 취재 반하나(banana@banana.com)",
            "<h2>'핸섬가이즈'가 개봉전 시사회를 통해 얼론과 관객 모두를 사로잡으며 예사롭지 호평을 얻고 있다.'</h2>",
            "이 기사는 임시 데이터임을 알립니다, …",
            "Copyright@코리아IT아카데미",
            "<br> ☞ 이 기사는 문화 섹션으로 분류되었습니다 … </br>",
            "#기사 #문화 #핸섬가이즈 #시사회"
        ]

        context = article.text.split('\n\n')
        context += additional_info

        for i, text in enumerate(context):
          print(i, text)
       
 
 
0 6월 26일 개봉하는 고자극 오싹 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.
1 iMBC 연예뉴스 사진
2 개봉 전 시사회를 통해 언론과 관객 모두를 사로잡으며 예사롭지 않은 호평을 얻고 있는 영화 '핸섬가이즈'가 관객들의 열띤 기대에 힘입어 개봉을 이틀 앞두고 한국영화 예매율 1위에 등극했다. '핸섬가이즈'는 평화로운 전원생활을 꿈꾸던 ' 재필'과 '상구'가 하필이면 귀신들린 집으로 이사 오며 벌어지는 고자극 오싹 코미디다.
3 영화진흥위원회 통합전산망에 따르면 '핸섬가이즈' 는 6월 24일 오전 8시 55분 기준 14.0%의 예매율로 한국영화 예매율 1위에 올라 올여름 극장가 최고의 기대작임을 입증했다. 특히 이번 한국영화 예매율 1위는 여름 극장가에 찾아오는 다양한 화제작들 속에서 이뤄낸 유의미한 결과라 더욱 이목을 집중시킨다. 여기에 '인사이드 아웃 2'에 이어 전체 예매율로는 2위를 기록하며 그 뒤를 쫓고 있어 6월 26일(수) 개봉을 통해 시작될 본격적인 흥행 레이스에 더욱 귀추가 주목된다.
4 영화 '핸섬가이즈' 는 귀신들린 집으로 이사 온 불운의 집주인 '재필'(이성민)과 '상구'(이희준)가 원치 않았던 강제 집들이를 시작하며 멈출 수 없는 웃음을 유발한다. 끝없이 몰려드는 불청객은 사람, 악령 가리지 않아 두 남자가 꿈꾸던 드림하우스에서 펼쳐지는 예측불가한 웃음으로 관객들을 사로잡을 것이다. 이를 완벽한 연기력으로 소화한 이성민, 이희준, 공승연, 박지환, 이규형 등 믿고 보는 배우들의 환상적인 앙상블은 물론 코미디와 호러 두 마리 토끼를 다 잡은 복합 장르가 전하는 독보적인 매력으로 관객들을 극장가로 불러들일 것이다.
5 ※ 기자 김사과(apple@apple.com) 취재 반하나(banana@banana.com)
6 <h2>'핸섬가이즈'가 개봉전 시사회를 통해 얼론과 관객 모두를 사로잡으며 예사롭지 호평을 얻고 있다.'</h2>
7 이 기사는 임시 데이터임을 알립니다, …
8 Copyright@코리아IT아카데미
9 <br> ☞ 이 기사는 문화 섹션으로 분류되었습니다 … </br>
10 #기사 #문화 #핸섬가이즈 #시사회

 

 

 불용어 제거


       
      # 불용어 제거
      # 불용어 사전 정의 ['※','☞','...','오싹']
      # delete_stopwords() : context 데이터를 넣으면 불용어를 제거 후 리스트(데이터)를 반환

      stopwords = ['※', '☞', '…','오싹']

      def delete_stopwords(context):
        preprocessed_text = []

        for text in context:
          text = [w for w in text.split(' ') if w not in stopwords]
          preprocessed_text.append(' '.join(text))
        return preprocessed_text

      preprocessed_context = delete_stopwords(context)

      for i, text in enumerate(preprocessed_context):
        print(i, text)

 
0 6월 26일 개봉하는 고자극 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.
1 iMBC 연예뉴스 사진
2 개봉 전 시사회를 통해 언론과 관객 모두를 사로잡으며 예사롭지 않은 호평을 얻고 있는 영화 '핸섬가이즈'가 관객들의 열띤 기대에 힘입어 개봉을 이틀 앞두고 한국영화 예매율 1위에 등극했다. '핸섬가이즈'는 평화로운 전원생활을 꿈꾸던 ' 재필'과 '상구'가 하필이면 귀신들린 집으로 이사 오며 벌어지는 고자극 코미디다.
3 영화진흥위원회 통합전산망에 따르면 '핸섬가이즈' 는 6월 24일 오전 8시 55분 기준 14.0%의 예매율로 한국영화 예매율 1위에 올라 올여름 극장가 최고의 기대작임을 입증했다. 특히 이번 한국영화 예매율 1위는 여름 극장가에 찾아오는 다양한 화제작들 속에서 이뤄낸 유의미한 결과라 더욱 이목을 집중시킨다. 여기에 '인사이드 아웃 2'에 이어 전체 예매율로는 2위를 기록하며 그 뒤를 쫓고 있어 6월 26일(수) 개봉을 통해 시작될 본격적인 흥행 레이스에 더욱 귀추가 주목된다.
4 영화 '핸섬가이즈' 는 귀신들린 집으로 이사 온 불운의 집주인 '재필'(이성민)과 '상구'(이희준)가 원치 않았던 강제 집들이를 시작하며 멈출 수 없는 웃음을 유발한다. 끝없이 몰려드는 불청객은 사람, 악령 가리지 않아 두 남자가 꿈꾸던 드림하우스에서 펼쳐지는 예측불가한 웃음으로 관객들을 사로잡을 것이다. 이를 완벽한 연기력으로 소화한 이성민, 이희준, 공승연, 박지환, 이규형 등 믿고 보는 배우들의 환상적인 앙상블은 물론 코미디와 호러 두 마리 토끼를 다 잡은 복합 장르가 전하는 독보적인 매력으로 관객들을 극장가로 불러들일 것이다.
5 기자 김사과(apple@apple.com) 취재 반하나(banana@banana.com)
6 <h2>'핸섬가이즈'가 개봉전 시사회를 통해 얼론과 관객 모두를 사로잡으며 예사롭지 호평을 얻고 있다.'</h2>
7 이 기사는 임시 데이터임을 알립니다,
8 Copyright@코리아IT아카데미
9 <br> 이 기사는 문화 섹션으로 분류되었습니다 </br>
10 #기사 #문화 #핸섬가이즈 #시사회

 

 

 이메일 제거




        
# 이메일 제거
        # delete_email() : context 데이터를 넣으면 이메일 제거 후 리스트(데이터)를 반환

        import re

        def delete_email(context):
            preprocessed_text = []
            for text in context:
                text = re.sub("[A-Za-z0-9+-_.]+@[A-Za-z0-9]+\.[a-zA-Z0-9]+", '', text).strip()
                if text:
                    preprocessed_text.append(text)
            return preprocessed_text

        preprocessed_context = delete_email(preprocessed_context)
        for i, text in enumerate(preprocessed_context):
            print(i, text)
       
 
 
0 6월 26일 개봉하는 고자극 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.
1 iMBC 연예뉴스 사진
2 개봉 전 시사회를 통해 언론과 관객 모두를 사로잡으며 예사롭지 않은 호평을 얻고 있는 영화 '핸섬가이즈'가 관객들의 열띤 기대에 힘입어 개봉을 이틀 앞두고 한국영화 예매율 1위에 등극했다. '핸섬가이즈'는 평화로운 전원생활을 꿈꾸던 ' 재필'과 '상구'가 하필이면 귀신들린 집으로 이사 오며 벌어지는 고자극 코미디다.
3 영화진흥위원회 통합전산망에 따르면 '핸섬가이즈' 는 6월 24일 오전 8시 55분 기준 14.0%의 예매율로 한국영화 예매율 1위에 올라 올여름 극장가 최고의 기대작임을 입증했다. 특히 이번 한국영화 예매율 1위는 여름 극장가에 찾아오는 다양한 화제작들 속에서 이뤄낸 유의미한 결과라 더욱 이목을 집중시킨다. 여기에 '인사이드 아웃 2'에 이어 전체 예매율로는 2위를 기록하며 그 뒤를 쫓고 있어 6월 26일(수) 개봉을 통해 시작될 본격적인 흥행 레이스에 더욱 귀추가 주목된다.
4 영화 '핸섬가이즈' 는 귀신들린 집으로 이사 온 불운의 집주인 '재필'(이성민)과 '상구'(이희준)가 원치 않았던 강제 집들이를 시작하며 멈출 수 없는 웃음을 유발한다. 끝없이 몰려드는 불청객은 사람, 악령 가리지 않아 두 남자가 꿈꾸던 드림하우스에서 펼쳐지는 예측불가한 웃음으로 관객들을 사로잡을 것이다. 이를 완벽한 연기력으로 소화한 이성민, 이희준, 공승연, 박지환, 이규형 등 믿고 보는 배우들의 환상적인 앙상블은 물론 코미디와 호러 두 마리 토끼를 다 잡은 복합 장르가 전하는 독보적인 매력으로 관객들을 극장가로 불러들일 것이다.
5 기자 김사과() 취재 반하나()
6 <h2>'핸섬가이즈'가 개봉전 시사회를 통해 얼론과 관객 모두를 사로잡으며 예사롭지 호평을 얻고 있다.'</h2>
7 이 기사는 임시 데이터임을 알립니다,
8 Copyright@코리아IT아카데미
9 <br> 이 기사는 문화 섹션으로 분류되었습니다 </br>
10 #기사 #문화 #핸섬가이즈 #시사회

 

 

 HTML 태그 제거


       
        # HTML 태그 제거
        # delete_html_tag() : context 데이터를 넣으면 HTML 제거 후 리스트(데이터)를 반환
        def delete_html_tag(context):
            preprocessed_text = []

            # <태그의 시작을 나타내는 문자를 찾음>
            # .*? 다음에 오는 패턴과 매칭되지 않을 때까지 최소한의 문자를 포함
            # '.' : 줄바꿈 문자를 제외한 모든 문자
            # '*?' : 0번 이상 가능한 적게를 의미
            html_tag = re.compile('<.*?>')

            for text in context:
                text = re.sub(html_tag, '', text).strip()
                if text:
                    preprocessed_text.append(text)
            return preprocessed_text

        preprocessed_context = delete_html_tag(preprocessed_context)

        for i, text in enumerate(preprocessed_context):
            print(i, text)

0 6월 26일 개봉하는 고자극 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.
1 iMBC 연예뉴스 사진
2 개봉 전 시사회를 통해 언론과 관객 모두를 사로잡으며 예사롭지 않은 호평을 얻고 있는 영화 '핸섬가이즈'가 관객들의 열띤 기대에 힘입어 개봉을 이틀 앞두고 한국영화 예매율 1위에 등극했다. '핸섬가이즈'는 평화로운 전원생활을 꿈꾸던 ' 재필'과 '상구'가 하필이면 귀신들린 집으로 이사 오며 벌어지는 고자극 코미디다.
3 영화진흥위원회 통합전산망에 따르면 '핸섬가이즈' 는 6월 24일 오전 8시 55분 기준 14.0%의 예매율로 한국영화 예매율 1위에 올라 올여름 극장가 최고의 기대작임을 입증했다. 특히 이번 한국영화 예매율 1위는 여름 극장가에 찾아오는 다양한 화제작들 속에서 이뤄낸 유의미한 결과라 더욱 이목을 집중시킨다. 여기에 '인사이드 아웃 2'에 이어 전체 예매율로는 2위를 기록하며 그 뒤를 쫓고 있어 6월 26일(수) 개봉을 통해 시작될 본격적인 흥행 레이스에 더욱 귀추가 주목된다.
4 영화 '핸섬가이즈' 는 귀신들린 집으로 이사 온 불운의 집주인 '재필'(이성민)과 '상구'(이희준)가 원치 않았던 강제 집들이를 시작하며 멈출 수 없는 웃음을 유발한다. 끝없이 몰려드는 불청객은 사람, 악령 가리지 않아 두 남자가 꿈꾸던 드림하우스에서 펼쳐지는 예측불가한 웃음으로 관객들을 사로잡을 것이다. 이를 완벽한 연기력으로 소화한 이성민, 이희준, 공승연, 박지환, 이규형 등 믿고 보는 배우들의 환상적인 앙상블은 물론 코미디와 호러 두 마리 토끼를 다 잡은 복합 장르가 전하는 독보적인 매력으로 관객들을 극장가로 불러들일 것이다.
5 기자 김사과() 취재 반하나()
6 '핸섬가이즈'가 개봉전 시사회를 통해 얼론과 관객 모두를 사로잡으며 예사롭지 호평을 얻고 있다.'
7 이 기사는 임시 데이터임을 알립니다,
8 Copyright@코리아IT아카데미
9 이 기사는 문화 섹션으로 분류되었습니다
10 #기사 #문화 #핸섬가이즈 #시사회

 

 

  해시태그 제거


       
        # 해시태그 제거
        # delete_hashtag():context 데이터를 넣으면 해시태그 제거 후 리스트(데이터)를 반환

        def delete_hashtag(context):
            preprocessed_text = []
         
            for text in context:
                text = re.sub("#\S+", '', text).strip()
                if text:
                    preprocessed_text.append(text)
            return preprocessed_text

        preprocessed_context = delete_hashtag(preprocessed_context)
        for i, text in enumerate(preprocessed_context):
            print(i, text)

 
0 6월 26일 개봉하는 고자극 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.
1 iMBC 연예뉴스 사진
2 개봉 전 시사회를 통해 언론과 관객 모두를 사로잡으며 예사롭지 않은 호평을 얻고 있는 영화 '핸섬가이즈'가 관객들의 열띤 기대에 힘입어 개봉을 이틀 앞두고 한국영화 예매율 1위에 등극했다. '핸섬가이즈'는 평화로운 전원생활을 꿈꾸던 ' 재필'과 '상구'가 하필이면 귀신들린 집으로 이사 오며 벌어지는 고자극 코미디다.
3 영화진흥위원회 통합전산망에 따르면 '핸섬가이즈' 는 6월 24일 오전 8시 55분 기준 14.0%의 예매율로 한국영화 예매율 1위에 올라 올여름 극장가 최고의 기대작임을 입증했다. 특히 이번 한국영화 예매율 1위는 여름 극장가에 찾아오는 다양한 화제작들 속에서 이뤄낸 유의미한 결과라 더욱 이목을 집중시킨다. 여기에 '인사이드 아웃 2'에 이어 전체 예매율로는 2위를 기록하며 그 뒤를 쫓고 있어 6월 26일(수) 개봉을 통해 시작될 본격적인 흥행 레이스에 더욱 귀추가 주목된다.
4 영화 '핸섬가이즈' 는 귀신들린 집으로 이사 온 불운의 집주인 '재필'(이성민)과 '상구'(이희준)가 원치 않았던 강제 집들이를 시작하며 멈출 수 없는 웃음을 유발한다. 끝없이 몰려드는 불청객은 사람, 악령 가리지 않아 두 남자가 꿈꾸던 드림하우스에서 펼쳐지는 예측불가한 웃음으로 관객들을 사로잡을 것이다. 이를 완벽한 연기력으로 소화한 이성민, 이희준, 공승연, 박지환, 이규형 등 믿고 보는 배우들의 환상적인 앙상블은 물론 코미디와 호러 두 마리 토끼를 다 잡은 복합 장르가 전하는 독보적인 매력으로 관객들을 극장가로 불러들일 것이다.
5 기자 김사과() 취재 반하나()
6 '핸섬가이즈'가 개봉전 시사회를 통해 얼론과 관객 모두를 사로잡으며 예사롭지 호평을 얻고 있다.'
7 이 기사는 임시 데이터임을 알립니다,
8 Copyright@코리아IT아카데미
9 이 기사는 문화 섹션으로 분류되었습니다

 

 

 문장 정리

  • 학습된 데이터를 구성할 때 입력 데이터의 단위를 설정하기 애매해지므로 문장 단위로 모델이 학습할 수 있도록 문장분리가 필요
  • 한국어 문자 분리기 중 kss 라이브러리 사용 

       
      ! pip install kss    

 
 

 

 

 kss라이브러리: 한국어 텍스트에서 문장을 분리
     ->  전처리된 문장에서 문장을 분리


       
          import kss

          def sentence_seperator(context):
            splited_context = []

            for text in context:
              text = text.strip() # 텍스트의 앞뒤 공백제거

              if text:
                splited_text = kss.split_sentences(text)  # kss를 사용하여 문장을 분리
                splited_context.extend(splited_text) # 분리된 각 문장을 splited_context 리스트에 추가
           
            return splited_context # 분리된 모든 문장이 담긴 리스트

          preprocessed_context = sentence_seperator(preprocessed_context) # 전처리된 콘텍스트에서 문장을 분리
          for i, text in enumerate(preprocessed_context):
              print(i, text)


WARNING:root:Oh! You have mecab in your environment. Kss will take this as a backend! :D

0 6월 26일 개봉하는 고자극 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.
1 iMBC 연예뉴스 사진
2 개봉 전 시사회를 통해 언론과 관객 모두를 사로잡으며 예사롭지 않은 호평을 얻고 있는 영화 '핸섬가이즈'가 관객들의 열띤 기대에 힘입어 개봉을 이틀 앞두고 한국영화 예매율 1위에 등극했다.
3 '핸섬가이즈'는 평화로운 전원생활을 꿈꾸던 ' 재필'과 '상구'가 하필이면 귀신들린 집으로 이사 오며 벌어지는 고자극 코미디다.
4 영화진흥위원회 통합전산망에 따르면 '핸섬가이즈' 는 6월 24일 오전 8시 55분 기준 14.0%의 예매율로 한국영화 예매율 1위에 올라 올여름 극장가 최고의 기대작임을 입증했다.
5 특히 이번 한국영화 예매율 1위는 여름 극장가에 찾아오는 다양한 화제작들 속에서 이뤄낸 유의미한 결과라 더욱 이목을 집중시킨다.
6 여기에 '인사이드 아웃 2'에 이어 전체 예매율로는 2위를 기록하며 그 뒤를 쫓고 있어 6월 26일(수) 개봉을 통해 시작될 본격적인 흥행 레이스에 더욱 귀추가 주목된다.
7 영화 '핸섬가이즈' 는 귀신들린 집으로 이사 온 불운의 집주인 '재필'(이성민)과 '상구'(이희준)가 원치 않았던 강제 집들이를 시작하며 멈출 수 없는 웃음을 유발한다.
8 끝없이 몰려드는 불청객은 사람, 악령 가리지 않아 두 남자가 꿈꾸던 드림하우스에서 펼쳐지는 예측불가한 웃음으로 관객들을 사로잡을 것이다.
9 이를 완벽한 연기력으로 소화한 이성민, 이희준, 공승연, 박지환, 이규형 등 믿고 보는 배우들의 환상적인 앙상블은 물론 코미디와 호러 두 마리 토끼를 다 잡은 복합 장르가 전하는 독보적인 매력으로 관객들을 극장가로 불러들일 것이다.
10 기자 김사과() 취재 반하나()
11 '핸섬가이즈'가 개봉전 시사회를 통해 얼론과 관객 모두를 사로잡으며 예사롭지 호평을 얻고 있다.'
12 이 기사는 임시 데이터임을 알립니다,
13 Copyright@코리아IT아카데미
14 이 기사는 문화 섹션으로 분류되었습니다

 

 

 

 반복횟수가 많은 문자 정규화


       

      ! pip install soynlp


 

 

  • repeat_normalize 함수를 호출 : 반복되는 문자를 최대 num_repeats 값에 따라 정규화

       

          from soynlp.normalizer import *

          repeat_normalize('ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ', num_repeats = 2)

          repeat_normalize('야야!!!! 너!!!! 하하하하하... 지금 뭐하냐?ㅠㅠㅠㅠㅠㅠ', num_repeats = 2)


ㅋㅋ

-----------------

야야!!!! 너!!!! 하하... 지금 뭐하냐?ㅠㅠ

 

 

 중복된 문장 제거


       
        # 중복된 문장 제거
        from  collections import OrderedDict

        def duplicated_sentence_normalizer(context):
          context = list(OrderedDict.fromkeys(context))
          return(context)

        temp = ['apple', 'banana','apple','orange', 'banana', 'melon']
        temp = duplicated_sentence_normalizer(temp)

        for i, text in enumerate(temp):
            print(i, text)

 
0 apple
1 banana
2 orange
3 melon

 

 

 문장 길이 기반 필터링

  • min_max_filter(min_len,max_len,context) : min_len 보다 길고, max_len보다 짧은 문장만 필터링하여 저장

       
        # 문장길이 기반 필터링
        # min_max_filter(min_len, max_len, context): min_len 보다 길고, max_len보다
        # 짧은 문장만 필터링하여 저장


        def min_max_filter(min_len, max_len, context):
          preprocessed_text = []
          for text in context:
            if min_len < len(text) and len(text) < max_len:
              preprocessed_text.append(text)
          return preprocessed_text

        preprocessed_context = min_max_filter(20, 200, preprocessed_context)

        for i, text in enumerate(preprocessed_context):
            print(i, text)


0 6월 26일 개봉하는 고자극 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.
1 개봉 전 시사회를 통해 언론과 관객 모두를 사로잡으며 예사롭지 않은 호평을 얻고 있는 영화 '핸섬가이즈'가 관객들의 열띤 기대에 힘입어 개봉을 이틀 앞두고 한국영화 예매율 1위에 등극했다.
2 '핸섬가이즈'는 평화로운 전원생활을 꿈꾸던 ' 재필'과 '상구'가 하필이면 귀신들린 집으로 이사 오며 벌어지는 고자극 코미디다.
3 영화진흥위원회 통합전산망에 따르면 '핸섬가이즈' 는 6월 24일 오전 8시 55분 기준 14.0%의 예매율로 한국영화 예매율 1위에 올라 올여름 극장가 최고의 기대작임을 입증했다.
4 특히 이번 한국영화 예매율 1위는 여름 극장가에 찾아오는 다양한 화제작들 속에서 이뤄낸 유의미한 결과라 더욱 이목을 집중시킨다.
5 여기에 '인사이드 아웃 2'에 이어 전체 예매율로는 2위를 기록하며 그 뒤를 쫓고 있어 6월 26일(수) 개봉을 통해 시작될 본격적인 흥행 레이스에 더욱 귀추가 주목된다.
6 영화 '핸섬가이즈' 는 귀신들린 집으로 이사 온 불운의 집주인 '재필'(이성민)과 '상구'(이희준)가 원치 않았던 강제 집들이를 시작하며 멈출 수 없는 웃음을 유발한다.
7 끝없이 몰려드는 불청객은 사람, 악령 가리지 않아 두 남자가 꿈꾸던 드림하우스에서 펼쳐지는 예측불가한 웃음으로 관객들을 사로잡을 것이다.
8 이를 완벽한 연기력으로 소화한 이성민, 이희준, 공승연, 박지환, 이규형 등 믿고 보는 배우들의 환상적인 앙상블은 물론 코미디와 호러 두 마리 토끼를 다 잡은 복합 장르가 전하는 독보적인 매력으로 관객들을 극장가로 불러들일 것이다.
9 '핸섬가이즈'가 개봉전 시사회를 통해 얼론과 관객 모두를 사로잡으며 예사롭지 호평을 얻고 있다.'
10 이 기사는 문화 섹션으로 분류되었습니다

 



2. 토큰화 

 

 

 토큰화 {단어:1...}


       

      # 토큰화

      from tensorflow.keras.preprocessing.text import Tokenizer

      tokenizer = Tokenizer()
      tokenizer.fit_on_texts(preprocessed_context)

      word2idx = tokenizer.word_index
      print(word2idx)


{'한국영화': 1, '예매율': 2, '6월': 3, "'핸섬가이즈'가": 4, '개봉을': 5, '1위에': 6, '통해': 7, '26일': 8, '고자극': 9, '이틀': 10, '앞두고': 11, '시사회를': 12, '관객': 13, '모두를': 14, '사로잡으며': 15, '예사롭지': 16, '호평을': 17, '얻고': 18, '영화': 19, '꿈꾸던': 20, "'": 21, '귀신들린': 22, '집으로': 23, '이사': 24, "'핸섬가이즈'": 25, '는': 26, '더욱': 27, '수': 28, '이성민': 29, '이희준': 30, '두': 31, '관객들을': 32, '것이다': 33, '개봉하는': 34, '코미디': 35, '올랐다': 36, '개봉': 37, '전': 38, '언론과': 39, '않은': 40, '있는': 41, '관객들의': 42, '열띤': 43, '기대에': 44, '힘입어': 45, '등극했다': 46, "'핸섬가이즈'는": 47, '평화로운': 48, '전원생활을': 49, "재필'과": 50, "'상구'가": 51, '하필이면': 52, '오며': 53, '벌어지는': 54, '코미디다': 55, '영화진흥위원회': 56, '통합전산망에': 57, '따르면': 58, '24일': 59, '오전': 60, '8시': 61, '55분': 62, '기준': 63, '14': 64, '0': 65, '의': 66, '예매율로': 67, '올라': 68, '올여름': 69, '극장가': 70, '최고의': 71, '기대작임을': 72, '입증했다': 73, '특히': 74, '이번': 75, '1위는': 76, '여름': 77, '극장가에': 78, '찾아오는': 79, '다양한': 80, '화제작들': 81, '속에서': 82, '이뤄낸': 83, '유의미한': 84, '결과라': 85, '이목을': 86, '집중시킨다': 87, '여기에': 88, "'인사이드": 89, '아웃': 90, "2'에": 91, '이어': 92, '전체': 93, '예매율로는': 94, '2위를': 95, '기록하며': 96, '그': 97, '뒤를': 98, '쫓고': 99, '있어': 100, '시작될': 101, '본격적인': 102, '흥행': 103, '레이스에': 104, '귀추가': 105, '주목된다': 106, '온': 107, '불운의': 108, '집주인': 109, "'재필'": 110, '과': 111, "'상구'": 112, '가': 113, '원치': 114, '않았던': 115, '강제': 116, '집들이를': 117, '시작하며': 118, '멈출': 119, '없는': 120, '웃음을': 121, '유발한다': 122, '끝없이': 123, '몰려드는': 124, '불청객은': 125, '사람': 126, '악령': 127, '가리지': 128, '않아': 129, '남자가': 130, '드림하우스에서': 131, '펼쳐지는': 132, '예측불가한': 133, '웃음으로': 134, '사로잡을': 135, '이를': 136, '완벽한': 137, '연기력으로': 138, '소화한': 139, '공승연': 140, '박지환': 141, '이규형': 142, '등': 143, '믿고': 144, '보는': 145, '배우들의': 146, '환상적인': 147, '앙상블은': 148, '물론': 149, '코미디와': 150, '호러': 151, '마리': 152, '토끼를': 153, '다': 154, '잡은': 155, '복합': 156, '장르가': 157, '전하는': 158, '독보적인': 159, '매력으로': 160, '극장가로': 161, '불러들일': 162, '개봉전': 163, '얼론과': 164, '있다': 165, '이': 166, '기사는': 167, '문화': 168, '섹션으로': 169, '분류되었습니다': 170}

 

 

 순서 바꾸기 {1: 단어..}


       
        # 순서 바꾸기
        idx2word = {value: key for key, value in word2idx.items()}
        print(idx2word)


{1: '한국영화', 2: '예매율', 3: '6월', 4: "'핸섬가이즈'가", 5: '개봉을', 6: '1위에', 7: '통해', 8: '26일', 9: '고자극', 10: '이틀', 11: '앞두고', 12: '시사회를', 13: '관객', 14: '모두를', 15: '사로잡으며', 16: '예사롭지', 17: '호평을', 18: '얻고', 19: '영화', 20: '꿈꾸던', 21: "'", 22: '귀신들린', 23: '집으로', 24: '이사', 25: "'핸섬가이즈'", 26: '는', 27: '더욱', 28: '수', 29: '이성민', 30: '이희준', 31: '두', 32: '관객들을', 33: '것이다', 34: '개봉하는', 35: '코미디', 36: '올랐다', 37: '개봉', 38: '전', 39: '언론과', 40: '않은', 41: '있는', 42: '관객들의', 43: '열띤', 44: '기대에', 45: '힘입어', 46: '등극했다', 47: "'핸섬가이즈'는", 48: '평화로운', 49: '전원생활을', 50: "재필'과", 51: "'상구'가", 52: '하필이면', 53: '오며', 54: '벌어지는', 55: '코미디다', 56: '영화진흥위원회', 57: '통합전산망에', 58: '따르면', 59: '24일', 60: '오전', 61: '8시', 62: '55분', 63: '기준', 64: '14', 65: '0', 66: '의', 67: '예매율로', 68: '올라', 69: '올여름', 70: '극장가', 71: '최고의', 72: '기대작임을', 73: '입증했다', 74: '특히', 75: '이번', 76: '1위는', 77: '여름', 78: '극장가에', 79: '찾아오는', 80: '다양한', 81: '화제작들', 82: '속에서', 83: '이뤄낸', 84: '유의미한', 85: '결과라', 86: '이목을', 87: '집중시킨다', 88: '여기에', 89: "'인사이드", 90: '아웃', 91: "2'에", 92: '이어', 93: '전체', 94: '예매율로는', 95: '2위를', 96: '기록하며', 97: '그', 98: '뒤를', 99: '쫓고', 100: '있어', 101: '시작될', 102: '본격적인', 103: '흥행', 104: '레이스에', 105: '귀추가', 106: '주목된다', 107: '온', 108: '불운의', 109: '집주인', 110: "'재필'", 111: '과', 112: "'상구'", 113: '가', 114: '원치', 115: '않았던', 116: '강제', 117: '집들이를', 118: '시작하며', 119: '멈출', 120: '없는', 121: '웃음을', 122: '유발한다', 123: '끝없이', 124: '몰려드는', 125: '불청객은', 126: '사람', 127: '악령', 128: '가리지', 129: '않아', 130: '남자가', 131: '드림하우스에서', 132: '펼쳐지는', 133: '예측불가한', 134: '웃음으로', 135: '사로잡을', 136: '이를', 137: '완벽한', 138: '연기력으로', 139: '소화한', 140: '공승연', 141: '박지환', 142: '이규형', 143: '등', 144: '믿고', 145: '보는', 146: '배우들의', 147: '환상적인', 148: '앙상블은', 149: '물론', 150: '코미디와', 151: '호러', 152: '마리', 153: '토끼를', 154: '다', 155: '잡은', 156: '복합', 157: '장르가', 158: '전하는', 159: '독보적인', 160: '매력으로', 161: '극장가로', 162: '불러들일', 163: '개봉전', 164: '얼론과', 165: '있다', 166: '이', 167: '기사는', 168: '문화', 169: '섹션으로', 170: '분류되었습니다'}

 

 

 

 인코딩


       
        #인코딩
        encoded = tokenizer.texts_to_sequences(preprocessed_context)
        print(encoded)

 
[[3, 8, 34, 9, 35, 4, 5, 10, 11, 1, 2, 6, 36], [37, 38, 12, 7, 39, 13, 14, 15, 16, 40, 17, 18, 41, 19, 4, 42, 43, 44, 45, 5, 10, 11, 1, 2, 6, 46], [47, 48, 49, 20, 21, 50, 51, 52, 22, 23, 24, 53, 54, 9, 55], [56, 57, 58, 25, 26, 3, 59, 60, 61, 62, 63, 64, 65, 66, 67, 1, 2, 6, 68, 69, 70, 71, 72, 73], [74, 75, 1, 2, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 27, 86, 87], [88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 3, 8, 28, 5, 7, 101, 102, 103, 104, 27, 105, 106], [19, 25, 26, 22, 23, 24, 107, 108, 109, 110, 29, 111, 112, 30, 113, 114, 115, 116, 117, 118, 119, 28, 120, 121, 122], [123, 124, 125, 126, 127, 128, 129, 31, 130, 20, 131, 132, 133, 134, 32, 135, 33], [136, 137, 138, 139, 29, 30, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 31, 152, 153, 154, 155, 156, 157, 158, 159, 160, 32, 161, 162, 33], [4, 163, 12, 7, 164, 13, 14, 15, 16, 17, 18, 165, 21], [166, 167, 168, 169, 170]]

 

 

◼ vocab사이즈 확인 


      
        # vocab사이즈 확인
        vocab_size = len(word2idx)
        print(f'단어 사전의 크기는: {vocab_size}')


단어 사전의 크기는: 170

 

 

 첫번째 줄 출력

("6월 26일 개봉하는 고자극 코미디 '핸섬가이즈'가 개봉을 이틀 앞두고 한국영화 예매율 1위에 올랐다.")


       
      print(encoded[0])


[3, 8, 34, 9, 35, 4, 5, 10, 11, 1, 2, 6, 36]

 

 

 

 

'Python > 자연어처리' 카테고리의 다른 글

2024-06-27 6. RNN 기초  (0) 2024.06.27
2024-06-27 5. 워드임베딩 시각화  (1) 2024.06.27
2024-06-25 4. 워드 임베딩  (0) 2024.06.25
2024-06-25 3. 임베딩, 임베딩 실습  (0) 2024.06.25
2024-06-24 1. 자연어 처리 개요  (0) 2024.06.24