python 파이썬 한글 hwp 파일 문서 열기 및 텍스트 추출
python 파이썬 한글 hwp 파일 문서 열기
오늘 알아봐야 될 거는 파이썬으로 한글 파일 문서를 열어보고 안에서 텍스트를 한번 추출해보는 코딩을 만들어 왔었는데요. 여기 안에 내용을 보자면은 여기서 새로운 파이썬 패키지를 썼던 건데 ole 라는 구조적인 파일이 있다 하더라고요 근데 파일이 뭐냐면 원래 워드라든가 ppt 이런 파일에서 개발해서 불러와서 쓰는 그건데 거기에 한글 파일도 뭔가 되는 부분이 있다고 합니다 해서 파이썬으로 만들어 봤는데요.
python 파이썬 한글 hwp 파일 오류
제가 사용했었던 바로는 전반위적으로 텍스트 추출하는 데는 전혀 문제가 없었습니다. 근데 여기 제일 맨 밑에 보시면 오류 사항이 하나가 있었어요. 그게 뭐냐면 아까도 말씀드렸다시피 이 파일 형식이 ole 구조적인 파일 형식이 돼야 됩니다. 근데 한 가지 아까 문제점이 한글 파일 중에서 옛날에 만들어졌었던 이런 한글 파일 같은 경우에는 작동하지가 않아요. 이거를 어떻게 해결할까 하다가 이걸 해결할 수 있는 방법 중에 하나가 이렇게 동작하지 않고 아래와 같은 에러 코드가 발생됐었을 때는 한글 파일을 다른 이름으로 저장을 해서 넣어놔야 됩니다.
python 파이썬 한글 hwp 파일 텍스트 추출
다른 이름으로 저장을 할 때 처음에 보시면 통합 형식으로 되어 있는 한글 파일로 저장하는 방식이 있어요. 그거를 선택을 하시고 다른 이름으로 저장을 완료한 다음에 다시 한 번 파일 디렉토리를 넣어서 돌려보시면 정상적으로 텍스트가 추출이 될 겁니다. 그게 하나가 있고요 그래서 이외로 보여졌었던 에러사항 그러한 것들은 제가 확인한 바로는 크게 없었습니다. 원래 가장 커서 실제로 이거를 바꾸기 위해서 다른 개발 이런 것도 찾아보고 했는데 제가 가장 확인한 바로는 한글 파일 실행돼서 뭔가 매크로 형식으로 작업하는 이것보다는 말 그대로 제가 보여드린 이 코딩만 사용을 하셔서 진행만 하시면 한글 파일을 열고 텍스트를 추출하는 데 큰 문제는 없으리라 생각됩니다. 오늘은 여기까지입니다.
import olefile
import zlib
import struct
def get_hwp_text(filename):
f = olefile.OleFileIO(filename)
dirs = f.listdir()
# HWP 파일 검증
if ["FileHeader"] not in dirs or \
["\x05HwpSummaryInformation"] not in dirs:
raise Exception("Not Valid HWP.")
# 문서 포맷 압축 여부 확인
header = f.openstream("FileHeader")
header_data = header.read()
is_compressed = (header_data[36] & 1) == 1
# Body Sections 불러오기
nums = []
for d in dirs:
if d[0] == "BodyText":
nums.append(int(d[1][len("Section"):]))
sections = ["BodyText/Section"+str(x) for x in sorted(nums)]
# 전체 text 추출
text = ""
for section in sections:
bodytext = f.openstream(section)
data = bodytext.read()
if is_compressed:
unpacked_data = zlib.decompress(data, -15)
else:
unpacked_data = data
# 각 Section 내 text 추출
section_text = ""
i = 0
size = len(unpacked_data)
while i < size:
header = struct.unpack_from("<I", unpacked_data, i)[0]
rec_type = header & 0x3ff
rec_len = (header >> 20) & 0xfff
if rec_type in [67]:
rec_data = unpacked_data[i+4:i+4+rec_len]
section_text += rec_data.decode('utf-16')
section_text += "\n"
i += 4 + rec_len
text += section_text
text += "\n"
return text
file_name = 'C:/Users/user/Downloads/test.hwp'
print(get_hwp_text(file_name))
#not an OLE2 structured storage file 에러발견으로 작동 안함.
# 동작 하지 않는 이유는 파일명을 hwp로 다른 이름으로 저장해서 넣어놔야함.
'Python' 카테고리의 다른 글
[python] 검색엔진 줌 ZUM 자동완성 연관 키워드 검색어 크롤링 추출 (0) | 2022.08.26 |
---|---|
[python] 스마트스토어 해시태그 키워드 추출 수정 버전(2022.08.25 기준) (0) | 2022.08.26 |
[python] 네이버 블로그 아이디 크롤링 추출 엑셀 가공 (0) | 2022.08.23 |
[python] 셀레늄 Selenium 파파고 한일 번역기로 문장 교정 해보기 (0) | 2022.08.19 |
[python] 정규식 한문 제거 (0) | 2022.08.19 |
댓글