[Python] pdf정제를 위한 코드를 짜면서 느낀점 / 회고

2021. 6. 29. 08:20·💻 개발/언어
728x90

1. kss 모듈을 먼저쓸까? 정제와 토큰화 후 kss를 쓸까?

-> 모듈을 사용하여 불러온 pdf를 split('\n')해주고, 함수를 사용하여 정제 후 깨끗한 한글문장에서 kss를 사용.

 

 

 

2. kss 사용을 위한 문자열 변환 시키기

-> 임의의 ex_sentence = '' 를 생성 후 한글을 출력해 string sentence를 

               ex_sentence =+ sentence 이용하여 만듬 

 

 

 

2. 파이참에서 출력 시 부분적으로 짤리는 오류가 있었고, 터미널에선 없었는데 왜 그럴까?

-> 추후 추가

 

 

 

3. footer의 규칙없는 더러운 내용 지우는 방법?

-> 정규식을 써야할 지, 다른 방법이 있나 고민 중... 

 

 

 

 

4. all_text = '' /  all_text += sentence 의 사용으로 ''를 붙이자

 

 

 

 

 

5. input과 output 정확히 알기 

-> 주석을 이용하여 채킹하기.

 

 

 

6.명확하게 모르는 부분 알기, 하다가 다른 방향으로 빠지지 않기.

 

 

 

 

7. stanza, nltk, kss 등 다양한 라이브러리 사용법 숙지

-> 다양한 모듈로 불러올 때 어떤식으로 불러올 수 있는지, 어떤 차이점이 있고, 무엇이 더 좋을지 알기

 

 

 

8. 참고문항 아래 글 삭제 고민해보기

->'참고문항'이라는 글이 두개 이상일 때도 생각해서 if문 사용으로 만들어 보기

 

 

 

9. 리턴

-> 함수 자체로직을 불러온다는 개념으로 이해

 

 

10. ''.join() 후  Tokenizer 사용하기.

 

 

 

11. 내 로직

 

import re
from kss import split_sentences
import pandas as pd
import pdftotext
# from regex_function import *

with open("/Users/ichanghyeon/Desktop/day_monday/러일전쟁 이전 대한제국 원수부의 군무정책 강화와 군사운영의 성격.pdf", "rb") as f:
    pdf = pdftotext.PDF(f)

pdfToken = []

for page in pdf:
    pdfToken.extend(page.strip().lstrip().split("\n"))

delete_header_index = -1
delete_footer_index = -1

for sentence in pdfToken:  # sentence = str

    if "1. 머리말" in sentence:  # delete_header
        delete_header_index = pdfToken.index(sentence)

    elif "원고투고일" in sentence:  # delete_footer
        delete_footer_index = pdfToken.index(sentence)

del pdfToken[:delete_header_index]
del pdfToken[delete_footer_index:]


modified_pdf = []
all_text = ''

for idx, sentence in enumerate(pdfToken):
    sentence = check_delete_word(sentence)

    sentence = check_delete_word(sentence)

    sentence = specialChar_delete(sentence)

    sentence = delete_count(sentence)

    sentence = delete_line(sentence)

    sentence = assist_word_delete(sentence)
#     print(sentence.strip())
#     print('-------------')
    
    modified_pdf.append(sentence.strip())
    
#     all_text += sentence
#     modified_pdf.append("".join(sentence))

# result = "".join(modified_pdf)

# use_list = split_sentences(result)  # 문장단위 파싱 list
modified_pdf
import re


def check_delete_word(sentence):
    check_word = re.compile(r'그리고|그런데|그러나|그러므로|또한|그래서|하지만|예를 들어|예를들어|예를 들면|예를들면|구체적으로')
    delete_sentence = re.sub(check_word, '', sentence)
    return delete_sentence  # 지워진 문장이 delete_sentence에 담김 그리고 sentence이름으로 넘겨줌


def specialChar_delete(sentence):
    check_word = re.compile(r'^[a-zA-Z\{\}\[\]\/?.,;:|\)~\`!^\-_+<>@\#$%&\\\=\(\’\”\s]*$')
    delete_sentence = re.sub(check_word, '', sentence)
    return delete_sentence


def delete_count(sentence):
    specific_start_word = re.compile(r'[첫째|둘째|셋째].[,]')
    delete_word = re.sub(specific_start_word, '', sentence)
    return delete_word


def delete_line(sentence): #1. 한글 2. 한글, 가. 한글 ...삭제
    stapling_sentence = re.compile(r'(^[\d|I|II|III|가|나|다][.]\s[가-힣ㄱ-ㅎ].+)|(^[\s].[가|나|다][.].+)|[\d]{0,5}[\)]')
    delete_word = re.sub(stapling_sentence, '', sentence.strip())

    return delete_word


def assist_word_delete(sentence): #병기문자안 영어 러시아어 등 삭제
    sentence.split('\n')
    check_word = re.compile(r'([「]|[\(])+[\.a-zA-Z一-龥\sЁёА-я]+([\)]|[」])+')
    assist_delete = re.sub(check_word, '', sentence)
    return assist_delete

def delete_NIDA(sentence):
    find_word = re.compile(r'[?!아니다][니다].+$')
    delete_NIDA_word = re.search(find_word, sentence)
    if delete_NIDA_word is None:
        return delete_NIDA_word




def check_word_count(regex_list): # 15 ~ 30 어절 찾기 함수 # 문자열로 들어옴
    if 31 > len(regex_list.split(' ')) and len(regex_list.split(' ')) > 9:

        return regex_list

    else:
        #
        return regex_list

728x90
저작자표시 비영리 변경금지 (새창열림)

'💻 개발 > 언어' 카테고리의 다른 글

[Python] 어절수 조건에 일치하는 경우만 출력하기  (0) 2021.06.30
[Python] 여러가지 함수 input, output 정리  (0) 2021.06.29
[Python] pdf to text | Parsing 기본, 기초,시작 정규식(병기표현)  (0) 2021.06.23
[Typescript] 특징  (0) 2021.03.02
[Typescript] 시작하기  (0) 2021.03.02
'💻 개발/언어' 카테고리의 다른 글
  • [Python] 어절수 조건에 일치하는 경우만 출력하기
  • [Python] 여러가지 함수 input, output 정리
  • [Python] pdf to text | Parsing 기본, 기초,시작 정규식(병기표현)
  • [Typescript] 특징
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (109)
      • 🌟🙇🏻‍♂️ 꼭 읽어봤으면 하는 글 (0)
      • 💻 개발 (76)
        • 설정 및 세팅 (4)
        • DB&서버&네트워크&암호 (12)
        • React (0)
        • JPA, Querydsl (14)
        • 알고리즘 (7)
        • 언어 (15)
        • 프레임워크 (14)
        • HTML, CSS (10)
      • ✍🏻 (33)
        • 회고록 (15)
        • 독서록 (7)
        • 일지록 (10)
        • 세미나 (1)
      • 💡 리뷰 (0)
        • 제품리뷰 (0)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
foodev
[Python] pdf정제를 위한 코드를 짜면서 느낀점 / 회고
상단으로

티스토리툴바