티스토리 뷰

728x90
pdftotext나 docx를 사용하여 문서를 파싱 한 후 필요 없는 헤더와 푸터를 자를 필요가 있습니다.
예시로 이미지와 같은 부분만 남기고 서론과 결론은 자를 경우에 대한 함수를 짜 보겠습니다. 
가정: 라이브러리를 통해 파일을 불러온 상태입니다.

 

 

본론만  가져오기

빨간 선 안이 남길 부분

 


728x90

목표

1. 전체 글에서 특정 단어가 나올 경우 서론을 날린다.

2. 전체 글에서 특정 단어가 나올 경우 결론을 날린다.

3. 날린 부분에 대한 빈 문자열 처리를 해서 전체 길이를 같게 유지한다.

 

목표의 세부 가정

1. 전체 글에서 특정 단어를 찾는다.

2. 전체 글에 대한 각각의 string index 번호를 알아낸다.

3. 전체 string에서 특정 단어가 나올 경우 해당 index를 last_index로 담는다.

4. last_index 기준으로 자른다.

 

 


전체  함수  실행을  위한 함수의 세분화

def del_header(keywords, regexes):
    for regex in regexes:
        if regex in full_list:
            last_idx = find_last_index(keywords, regex)
            modified_result = header_point_idx(keywords, last_idx)
            return modified_result
    return []

pure_main_footer = del_header(full_list, ['테스트', '본론', '테스트1']) #삭제 header 추가

 

1. def del_header 함수가 실행되면 인자값으로 full_list 리스트를 담고 있는 매개변수를 넘겨준다.

2. del_headr 내 keywords에 full_list가 들어오고, regexes에 리스트를 담고 있는 리스트가 들어준다.

3. 함수 내 for문으로 입력받은 리스트를 풀어주고 첫 번째, 두 번째, 세 번째가 순서대로 find_last_index 함수로 들어간다.

4. find_last_idx와 header_point_idx함수를 돌고 난 후 결과 값을 리턴한다.

5. 특정 단어가 없는 경우는 빈 배열을 리턴한다.

 

 

 

라스트 index 구하기

def find_last_index(whole_list, regex):
    last_idx = -1
    for idx in range(len(whole_list)):
        check = re.compile(regex)
        check_word = check.search(whole_list[idx])
        if bool(check_word):
            last_idx = idx
            continue
    return last_idx

1. del_header에서 입력받은 full_list와 regex(첫 번째 값: 테스트)가 넘어온다. 

(full_list -> whole_list 이름 바꿈)

 

2. for idx in range(len(whole_list))

->  0부터 전체 문장의 길이를 알아낸 후 i에 담는다.

 

3. check = re.compile(regex)

들어온 regex값을 check에 담아둔다.

 

4. check_word = check.search(whole_list [idx])

-> compile 한 check을 search 하여 whole_list의 스트링 하나하나 조회한다.

 

5. if bool(check_word):

-> bool 함수는 True or False만 리턴하므로

-> 위의 4번에서 check_word가 값을 찾아낸다면

-> True가 되어 check_word = check.search(whole_list [idx])에서 찾은 리스트의 인덱스 값을 

 

6. last_index = idx

->  last_index에  idx를 담는다.

 

 

last_index  기준으로  앞은 지우고,  뒤는  살리기

def header_point_idx(whole_list, last_idx):
    modified_result = []
    for idx in range(len(whole_list)):
        if idx <= last_idx:  # first_idx = 1
            modified_result.append('')
        else:
            modified_result.append(whole_list[idx])
    return modified_result

1. 전체 리스트(whole_list)와 find_last_index에서 넘어온 last_idx를 받는다.

 

2.  for idx in range(len(whole_list)): 

-> whole_list를 0 ~ whole_list의 길이만큼 구한다.

 

3. if idx <= last_ldx:

-> whole_list의 idx와 last_idx(특정 값이 담겨있는 string의 idx)를 비교

-> idx가 작다는 것은 0,1,2,3,4~~ 와 같이 앞부분을 뜻함

 

4. modified_result.apped('-')

-> 작을 경우는 빈 배열에 '-'를 담아주고

 

5. else:

->  idx > last_idx 경우는 뒷부분을 뜻 함 

-> whole_list의 스트링을 modified_result에 담아준다

 

header 함수를 돌고 남은  결과 값

 

 

footer 지우기

header 함수와 전체적인 로직은 비슷하다.

 

1. full_list로 도는 게 아닌 header를 돌고 나온 리스트로 footer함수를 돌아야 한다.

2. last_idx를 idx와 비교하며 '-'를 담을 때 화살 표 방향으로 더 큰 수를 담아주면 된다.

 

 

 

 

최종 결과 값

 

 

참고하실 분들을 위해 전체 로직을 공유드립니다^^

전체 로직

# 4. 마지막 인덱스 구하기
def find_last_index(whole_list, regex):
    last_idx = -1
    for idx in range(len(whole_list)):
        check = re.compile(regex)
        check_word = check.search(whole_list[idx])
        if bool(check_word):
            last_idx = idx
            continue
    return last_idx



# 4-1. 메인 로직
def header_point_idx(whole_list, last_idx):
    modified_result = []
    for idx in range(len(whole_list)):
        if idx <= last_idx:  # first_idx = 1
            modified_result.append('')
        else:
            modified_result.append(whole_list[idx])
    return modified_result


def footer_point_idx(whole_list, last_idx):
    modified_result = []
    for idx in range(len(whole_list)):
        if idx >= last_idx:  # first_idx = 1
            modified_result.append('')
        else:
            modified_result.append(whole_list[idx])
    return modified_result


def del_header(keywords, regexes):
    for regex in regexes:
        if regex in full_list:
            last_idx = find_last_index(keywords, regex)
            modified_result = header_point_idx(keywords, last_idx)
            return modified_result
    return []  # header 날린 값 / last_idx


def del_footer(keywords, regexes):
    for regex in regexes:
        if regex in pure_main_footer:
            last_idx = find_last_index(keywords, regex)
            modified_result = footer_point_idx(keywords, last_idx)
            return modified_result
    return pure_main_footer


# 4-2. 지울 header, footer 담기
# print( False or "u")

pure_main_footer = del_header(full_list, ['테스트','서론',테스트']) #삭제 header 추가

mod_header_footer = del_footer(pure_main_footer, ['결론', '아이유','이쁘다']

print(mod_header_footer)

 

 

 

😊 이상 헤더와 푸터 지우는 로직 포스팅 글을 마무리하겠습니다.

혹시 전체적인 설명이 이해가 안 되거나 부족한 부분은 댓글 달아주시면 감사하겠습니다.

728x90
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday