필자의 가족의 부탁으로 어떤 한 문제집의 전산화를 하고있다.

뭐 그러한 연유로 구글의 OCR 기능을 이용하였다.

 

구글 드라이브는 이미지를 바로 OCR돌려서 워드문서로 만들어주는 놀라운 기능을 무료로 제공해주는데

OCR을 돌릴 이미지 파일을 MyDrive에 업로드한후 오른쪽 클릭하면 연결앱에 Google 문서라는 항목이 생긴다.

위 이미지속 이미지 파일처럼 그 아래에 해당 이미지파일의 이름과 같은 문서파일이 자동 생성되며 열리게된다.

문서파일의 내용은 해당 이미지와 그 이미지의 OCR내용이다.

 

이렇게 해서 OCR돌린 문서로 만든후

 

모든 문서를 합쳐야 하는데....

 

파일은 필터 기능으로 검색해서 한번에 묶어서 다운로드가 가능하나

 

모든 문서를 하나의 문서로 만드는 기능은 제공하지 않는다 .....

 

 

물론 워드 파일을 합치는 서비스를 제공해주는 사이트도 있고(무료 유로 둘다 보인다)

 

거기를 이용해 볼까하고 실제로 앞장 몇문제는 그곳을 이용해서 했다

 

파일 문서가 많아질수록 해당 기능의 개수나 속도때문에 속터져서 결국 누가 파이썬 코드로 만들어둔게 없을까 찾아서 돌렸다.

(파이썬은 그런 요상한 기능을 적어둔게 많이 돌아다닌다. 혹시 누군가 뭔가 반복적인 작업을 빠르게 하고싶다면 파이썬으로 만들어둔게 없는지 찾아보자 진짜 온갖것이 다 돌아다닌다)

 

https://github.com/wiwi-git/python-marge-docx

 

wiwi-git/python-marge-docx

docx파일 병합. Contribute to wiwi-git/python-marge-docx development by creating an account on GitHub.

github.com

위 해당 링크는 이번에 하면서 사용한 코드의 프로젝트다.

사실 내용은 적다.

 

라이브러리는 

https://github.com/4teamwork/docxcompose

 

4teamwork/docxcompose

Append/Concatenate .docx documents. Contribute to 4teamwork/docxcompose development by creating an account on GitHub.

github.com

를 사용했고( py참에서는 docxcompose를 검색하면된다 ) 

 

코드는 분명 스택오버플로우에서 가져온걸 수정했을텐데 원본 링크는 저장해두지않았다...;;

 

뭐 아무튼 주 소스는 아래의 함수이다.

def combine_all_docx(filename_master, files_list):
    number_of_sections = len(files_list)
    master = Document_compose(filename_master)
    composer = Composer(master)
    for i in range(0, number_of_sections):
        doc_temp = Document_compose(files_list[i])
        composer.append(doc_temp)
    composer.save("combined_file.docx")

filename_master는 가장 기본이될 첫번째 문서이고

files_list는 기본문서를 제외한 합칠 문서들이다.

master문서에 composer를 사용해 모든 문서를 붙인다.

그리고 combined_file.docx라는 파일 이름으로 저장.

 

난 돌린 환경이 맥이라서 주소지정이 까다롭지않은데 윈도우에서는 어떨지 모르겠다 ./를 붙이면 되려나 ? 

 

뭐 아무튼 전체 소스에 있는걸 좀 설명해주자면 

prefix는 모든 파일에 공통적으로 있는 앞부분 이름이고 

surfix는 모든 파일에 공통적으로 있는 뒷부분으로

모든 파일은 그부분을 제외하고 숫자로 나열되어 있어서 해당 숫자를 반복문을 돌려서 파일명이 담긴 배열을 만들어서

위 combine_all_docx함수에 넣어줬다.

 

이미지까지 제대로 들어가는걸 확인해서 매우 기쁘나 OCR성능상..... 수정해야할 부분이 많아서 아직도 골치썩고 있다

괜히 해주기로 했어....

'python' 카테고리의 다른 글

python3, db connect class (mysql/mariaDb)  (0) 2020.05.07
import pymysql


class DBController:
    host = 'localhost'
    port = 9999
    user = 'userID'
    pw = 'userPW'
    db_name = 'testDB'

    def __init__(self):
        print("__init__")
        self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.pw, db=self.db_name)
        self.curs = self.conn.cursor(pymysql.cursors.DictCursor)

    def create_connect(self, host=host, port=port, id=user, pw=pw, db_name=db_name):
        print("create connect")
        self.curs = self.conn.cursor(pymysql.cursors.DictCursor)
        self.conn = pymysql.connect(host=host, port=port, user=id, password=pw, db=db_name)

    def execute(self, query, args={}):
        self.curs.execute(query, args)

    def execute_one(self, query, args={}):
        self.curs.execute(query, args)
        row = self.curs.fetchone()
        return row

    def execute_all(self, query, args={}):
        self.curs.execute(query, args)
        row = self.curs.fetchall()

        return row

    def commit(self):
        self.conn.commit()

 

 

Flask 로 api 간단히 만들기 라는 글좀 따라해보다가 어디선가 긁어와서 살짝 수정해서 썻던 소스인데 기억이 안나서 출처는 없습니다.

 

init쪽에 conn이랑 curs생성하지않고( 해당 소스 지우고 ) 

 

클래스 만들어서 사용할때 crate_connect()호출해서 쓰는게 더 나아보이는데

 

여러모로 귀찮아서.. 그냥 집어넣었던거 같기도하고 애초에 있던거같기도하고

 

기억이 여로모로 애매하네요

'python' 카테고리의 다른 글

워드문서를 합치는 방법  (0) 2020.10.07

+ Recent posts