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

뭐 그러한 연유로 구글의 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

code -8번항을 보려고 들어갔다가 그냥 전부 정리해두려고 적습니다.

애플 개발자문서에서는 이름만 나오고 값소개가 안되있길래 그냥 라이브러리쪽 복사해서 보기편하려고 번역기 돌렸습니다.

 

 

public enum Code : Int {

    /// Authentication was not successful, because user failed to provide valid credentials.

    // 사용자가 유효한 자격 증명을 제공하지 못했기 때문에 인증에 실패했습니다.

    case authenticationFailed = -1

 

    /// Authentication was canceled by user (e.g. tapped Cancel button).

    /// 사용자가 인증을 취소했습니다 (예 : 취소 버튼을 탭함).

    case userCancel = -2

 

    /// Authentication was canceled, because the user tapped the fallback button (Enter Password).

    /// 사용자가 대체 버튼 (암호 입력)을 탭했기 때문에 인증이 취소되었습니다.

    case userFallback = -3

 

    /// Authentication was canceled by system (e.g. another application went to foreground).

    /// 시스템에서 인증을 취소했습니다 (예 : 다른 애플리케이션이 포 그라운드로 전환됨).

    case systemCancel = -4

 

    /// Authentication could not start, because passcode is not set on the device.

    /// 기기에 비밀번호가 설정되어 있지 않아 인증을 시작할 수 없습니다.

    case passcodeNotSet = -5

 

    /// Authentication could not start, because Touch ID is not available on the device.

    /// 장치에서 Touch ID를 사용할 수 없어 인증을 시작할 수 없습니다.

    @available(iOS, introduced: 8.0, deprecated: 11.0, message: "use LAErrorBiometryNotAvailable")

    case touchIDNotAvailable = -6

 

    /// Authentication could not start, because Touch ID has no enrolled fingers.

    /// Touch ID에 등록 된 손가락이 없어 인증을 시작할 수 없습니다.

    @available(iOS, introduced: 8.0, deprecated: 11.0, message: "use LAErrorBiometryNotEnrolled")

    case touchIDNotEnrolled = -7

 

    /// Authentication was not successful, because there were too many failed Touch ID attempts and

    /// Touch ID is now locked. Passcode is required to unlock Touch ID, e.g. evaluating

    /// LAPolicyDeviceOwnerAuthenticationWithBiometrics will ask for passcode as a prerequisite.

    @available(iOS, introduced: 9.0, deprecated: 11.0, message: "use LAErrorBiometryLockout")

    /// 실패한 Touch ID 시도가 너무 많았 기 때문에 인증에 실패했습니다.

    /// 이제 Touch ID가 잠겨 있습니다. Touch ID를 잠금 해제하려면 암호가 필요합니다. 평가

    /// LAPolicyDeviceOwnerAuthenticationWithBiometrics는 전제 조건으로 암호를 요청합니다.

    case touchIDLockout = -8

 

    /// Authentication was canceled by application (e.g. invalidate was called while

    /// authentication was in progress).

    /// 인증이 애플리케이션에 의해 취소되었습니다 (예 : invalidate가 호출되는 동안

    /// 인증이 진행 중입니다)

    @available(iOS 9.0, *)

    case appCancel = -9

 

    /// LAContext passed to this call has been previously invalidated.

    ///이 호출에 전달 된 LAContext는 이전에 무효화되었습니다.

        @available(iOS 9.0, *)

    case invalidContext = -10

 

/// 장치에서 생체 측정을 사용할 수 없기 때문에 인증을 시작할 수 없습니다.

 @available (iOS 11.0, *)

 public static var biometryNotAvailable : LAError.Code {get}

 

 

 /// 생체 측정에 등록 된 ID가 없기 때문에 인증을 시작할 수 없습니다.

 @available (iOS 11.0, *)

 public static var biometryNotEnrolled : LAError.Code {get}

 

 

 /// 실패한 생체 측정 시도가 너무 많았 기 때문에 인증에 실패했습니다.

 /// 이제 생체 측정이 잠겨 있습니다. 생체 측정을 잠금 해제하려면 암호가 필요합니다. 평가

 /// LAPolicyDeviceOwnerAuthenticationWithBiometrics는 전제 조건으로 암호를 요청합니다.

 @available (iOS 11.0, *)

 public static var biometryLockout : LAError.Code {get}

 

 /// 금지 된 UI를 표시해야하므로 인증에 실패했습니다.

 /// interactionNotAllowed 속성을 사용합니다.

 

 @available (iOS 8.0, *)

 case notInteractive = -1004

}

반응형

원하는 영역 드래그로 지정 ( 또는 전체 지정: ⌘(command) + a) 

상태에서 ⌘(command) + k + f

 

문서 전체 자동 정렬

(shift) + option(⌥) + f 

 

단 이는 해당 문서의 확장자가 확정 지어 있어( 파일이 생성되어)야 하며 해당 확장자의 정렬 확장파일이 설치되어있어야함(자동으로 다운받는 경우가 많음)

 

 

밑은 공식 홈페이지에서 제공중인 핫키 테이블의 캡쳐 사진입니다.

 

 

(2020년 9월 1일자 스크린샷)

링크: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf

 

반응형

https://wiwi-pe.tistory.com/73

 

firebase를 다루면서 며칠만에 열어본 프로젝트가 오류를 뱉는다.

오류 내용은 30개의 정의되지 않은 내용이 있다는 사항 "_OBJC_CLASS_$_APMAnalytics", 가 없다 뭐 가 없다  내가 정의하지않은 부분이라 당황하면서도 클린도 해보고 껏다 켜보기도하고 해도 안되다가 �

wiwi-pe.tistory.com

위 게시글 쓰면서 라이브러리가 손상됐다기보단 라이브러리가 변경되어서 다루는부분에서 문제가 생긴줄 알았는데 파일자체가 손상된거였다.

 

손상되는 이유는 어이없게도 icloud 자동업로드 기능...

 

항상 나에게 도움을 주시는 스택오버플로우에서 나온 답변이다.

 

https://stackoverflow.com/questions/56931305/framework-not-found-googleappmeasurement-getting-error-while-adding-framework

 

"Framework not found GoogleAppMeasurement" Getting error while adding framework manually

when I try to add framework manually it shows me error like " Framework not found GoogleAppMeasurement" and when I checked it in details it looks like following: ld: framework not found

stackoverflow.com

pod파일에서 들어가서 파일을 직접적으로 가지고있어야만 손상이 안간다고한다.

아니면 그냥 icloud 범위밖으로 빼버리고 작업

 

난 그냥 빼버리고 작업하고있다.

반응형

오류 내용은 30개의 정의되지 않은 내용이 있다는 사항

"_OBJC_CLASS_$_APMAnalytics", 가 없다 뭐 가 없다  

내가 정의하지않은 부분이라 당황하면서도 클린도 해보고 껏다 켜보기도하고 해도 안되다가

 

결국 Pod update를 호출 하니 다시 돌아간다.

 

며칠인데도 뭔가 업데이트 사항이 있었나보다

 

이것도 안되면 그냥 pod로 깐 라이브러리들을 죄다 지우고 다시 설치해볼 생각이였으나 update로 해결되서 다행임.

반응형

사용자로부터 2byte 의 10진수를 입력받고 입력받은수를 2진수로 출력하라.

 

바로 nasm으로 적어보려고했으나 잘안되서 c로 먼저 굴려봤습니다.

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int target = 0;
    int remain[100] = {0,};
    int index = 0;
    scanf("%d",&target);
    while (target > 1) {
        remain[index] = target % 2;
        target = target / 2;
        index++;
    }
    printf("%d\n",target);
    for (int i = index - 1; i >= 0; i--) {
        printf("%d\n", remain[i]);
    }
    return 0;
}

이렇게나 간단한건데

속이 터지네요

 

 

계속 문제가 생기는  mov eax, dword [target] 부분을

and eax, 0x0000ffff 추가로 땜빵해줬습니다...

필요한 부분은 ax뿐만이라(2byte수 제한) 솔직히 앞부분은 필요없기도하고........

 

누가좀 알려줬으면 좋겠네요

 

%include "io64.inc"

 

section .text

global CMAIN

CMAIN:

mov rbp, rsp; for correct debugging

GET_DEC 2, ax

mov [target], ax

L_loop:

mov eax, 0

mov edx, 0

 

mov eax, dword [target]

and eax, 0x0000ffff

 

mov edx, eax

shr edx, 16

and eax, 0x0000ffff

 

mov ebx, 0

mov bx, 2

div bx

 

mov ebx, [remainder_index]

mov [remainder + ebx * 2], dx

add [remainder_index], word 1

 

mov [target], ax

cmp ax, 1

jle L_loop_end

jmp L_loop

L_loop_end:

;print

PRINT_DEC 2, target

;NEWLINE

 

mov eax, 0

mov eax, [remainder_index]

dec eax

 

L_print_loop:

PRINT_DEC 2, [remainder + eax * 2]

;NEWLINE

add [print_count], word 1

 

dec ax

mov bx, [print_count]

cmp bx, [remainder_index]

je L_end

jmp L_print_loop

L_end:

xor rax,rax

ret

section .bss

target resw 1

remainder resw 100

section .data

remainder_index dw 0

print_count dw 0

반응형

'NASM' 카테고리의 다른 글

9일차  (0) 2020.06.23
8일차.  (0) 2020.06.21
7일차.  (0) 2020.06.20
6일차.  (0) 2020.06.19
5일차.  (0) 2020.06.18

1~ 입력받은 수(2byte)까지의 3의 배수를 구하고 그 수를 출력, 합을 출력

 

%include "io64.inc"

 

section .text

global CMAIN

CMAIN:

mov rbp, rsp; for correct debugging

GET_DEC 2, input

 

L_loop:

add [for_index],word 1 ; 반복 인덱스값 증가

 

;인덱스값이 3의 배수인지 판별하려고 3으로나눠봄

mov eax, [for_index]

;dx에 전반부 ax에 후반부로 나눠야 계산이됨 - 실제 저장된건 리틀엔디안 스타일이기에 값으로는 반대

mov edx, eax

shr edx, 16

 

and eax, 0x0000ffff

 

mov bx, 3

div bx ; 값은 ax에 몫, dx에 나머지가 저장됨

 

cmp dx, 0 ; 나머지가 0인지 판별하려고함

jne L_after_save ;0이 아니라면 데이터배열에 저장하지않음

 

;데이터배열에 저장

mov eax, 0

mov ax, [data_index]

mov bx, [for_index]

mov [data + eax * 2], bx

inc ax

mov [data_index], ax

 

L_after_save:

mov bx, [for_index]

cmp bx, [input]

jne L_loop; for_index가 입력된 값과 같을때까지 반복

 

; 저장된 값 출력

PRINT_STRING str_print_start

mov eax, 0

L_print_loop:

;3의 배수값 출력 + 합구하기

mov dx, [data + eax * 2]

add [total], dx

PRINT_DEC 2, dx

PRINT_STRING str_comma_space

 

inc ax

 

mov bx, [data_index]

cmp ax, bx

jne L_print_loop

 

NEWLINE

;저장된 개수

PRINT_STRING str_count

PRINT_DEC 2, [data_index]

NEWLINE

;합

PRINT_STRING str_total

PRINT_DEC 2, [total]

NEWLINE

 

xor rax, rax

ret

 

section .bss

data resw 100

input resw 1

section .data

data_index dw 0

for_index dw 0

total dw 0

;msg

str_print_start db '3의 배수 : ',0x00

str_comma_space db ', ',0x00

str_count db '3의 배수 갯수 : ',0x00

str_total db '총합 : ',0x00

 

2byte수를 한 개 입력 받아(10진수) 이 숫자를 2진수로 출력하라

막혔음... 

c로 하면 간단한데 어디서 문제가 생긴지 모르겠다.

 

 

 

 

반응형

'NASM' 카테고리의 다른 글

10일차.  (0) 2020.06.24
8일차.  (0) 2020.06.21
7일차.  (0) 2020.06.20
6일차.  (0) 2020.06.19
5일차.  (0) 2020.06.18

배열 복사...  디버깅 테스트용

디버깅 메뉴에서 show memory 에 들어가면 각 변수별 관찰이 가능하다.

변수이름을 적고 타입을 정하면 실행시 자동으로 값이 보임

주소값으로도 볼 수 있는데 왼쪽의 address를 꼭 체크해야 된다.

%include "io64.inc"

 

section .text

global CMAIN

CMAIN:

;write your code here

mov eax, my1

mov ebx, you1

 

mov edx, 0

mov ecx, 3

 

L1:

mov eax, [my1 + edx * 2]

mov [you1 + edx * 2], eax

inc edx

loop L1

 

mov edx, 0

L2:

PRINT_HEX 2, my1 + edx * 2

NEWLINE

inc edx

cmp edx, 3

jl L2

 

xor rax, rax

ret

 

section .data

my1 dw 0x1234, 0x4567, 10

 

section .bss

you1 resw 3

4- 문제

2바이트 수 한개를 입력받고 1 ~ 입력받은수 까지의 3의 배수만 배열에 저장하고 그 개수와 값을 출력

 

풀다가 못풀었음.; 내일로 미룸

반응형

'NASM' 카테고리의 다른 글

10일차.  (0) 2020.06.24
9일차  (0) 2020.06.23
7일차.  (0) 2020.06.20
6일차.  (0) 2020.06.19
5일차.  (0) 2020.06.18

+ Recent posts