[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)
      • 🌟🙇🏻‍♂️ 꼭 읽어봤으면 하는 글 (4)
      • 💻 개발 (72)
        • 설정 및 세팅 (4)
        • DB&서버&네트워크&암호 (11)
        • React (0)
        • JPA, Querydsl (13)
        • 알고리즘 (7)
        • 언어 (15)
        • 프레임워크 (12)
        • HTML, CSS (10)
      • ✍🏻 (33)
        • 회고록 (16)
        • 독서록 (7)
        • 일지록 (9)
        • 세미나 (1)
      • 💡 리뷰 (0)
        • 제품리뷰 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    di란
    토이프로젝트개발일지
    해피해킹 꿀팁
    QueryDSL
    JPA
    azure ci/cd
    해피해킹 키매핑
    스냅샷과로그성
    githubaction 라벨 배포
    스냅샷방식
    di동작원리
    githubaction 라벨 ci/cd
    디비스냅샷
    창업패키지후기
    db 날린 썰
    스냅샷과히스토리성 차이
    nestjs pipe
    스냅샷과 히스토리
    typedi란
    db 날림
    해피해킹 카라비너
    typedi 동작원리
    db 초기화
    nestjs pipe body
    di의존성
    서이추
    해피해킹 방향키
    해피해킹 커스텀
    개발썰
    validation failed (numeric string is expected)
  • 최근 댓글

  • 최근 글

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

티스토리툴바