-
인디자인에서 전자책 만들 때 클리닝 하는 문제 거의 해결
일서 취미, 잡지, 무크지, 예술 도서의 문제는 이미지 레이아웃 위에 텍스트가 들어가고 그리고 다단편집이 되어 있는 경우 텍스트 위치가 전혀 엉뚱한 곳에서 나오는 것입니다.
전자책 만들 때 아주 고생했겠어요.(그동안 전자책 안하는 1인)하여간 그걸 인디자인의 모든 페이지와 이미지를 구분하고 나누는 프로그램을 했다가 텍스트가 줄바꿈이나 디자인에 의해 배치부분이 달라지는 것을 맞추고 일반 문장으로 바꾸는 정규표현식 뭉치를 만들고 돌리고 텍스트 클리닝을 열심히 하다가... 아 이거 다른 문장으로 텍스트를 AI 로 분석하고 클리닝 하니 \n 이나 특수문자 처리한것도 한 번에 해결...
인디자인에서 브라우저별 리사이즈 자동으로 하는 카드뉴스, 영상을 만들려고 했던게 쉽게 끝났습니다.
물론 canva, adobe express 같은 것으로 애니메이션 처리하는 것은 사람이 결정해야하지만 일단 epub으로 보내건 뭘로 하건 원데이터 클리닝이 되니 이제 다음단계로 가겠네요.
-
https://github.com/felixrieseberg/electron-native-code-demos?ref=felixrieseberg.com
Electron 및 네이티브 코드 데모
이 저장소는 네이티브 코드와 네이티브 UI 요소를 Electron 애플리케이션에 통합하는 방법을 보여줍니다. 튜토리얼이자 자체 개발을 위한 시작점으로 사용됩니다. 모든 패키지는 다음을 구현합니다.
문자열을 받아서 반환하는 함수 helloWorld()입니다. JavaScript에서 호출할 수 있으며 네이티브 코드에서 실행됩니다. 간단한 호출의 시작점으로 사용하세요. 좋은 예로는 특정 운영 체제 API를 호출하는 것입니다.
모든 네이티브 컨트롤이 있는 기본 todo 편집기를 시작하는 함수 helloGui()입니다. todo가 추가, 변경 또는 삭제될 때마다 JavaScript 측에서 세부 정보가 포함된 이벤트가 방출됩니다. 이를 시작점으로 사용하여 Electron 애플리케이션을 완전한 네이티브 사용자 인터페이스로 확장합니다.
패키지
swift: Swift, SwiftUI, Foundation을 사용합니다. JavaScript와 Swift 간의 브리징은 Objective-C++에서 수행됩니다.
objective-c: Objective-C와 Cocoa를 사용합니다. JavaScript와 Objective-C 간의 브리징은 Objective-C++에서 수행됩니다.
cpp-win32: 버전 6에서는 C++와 Windows Common Controls(Win32 API 컨트롤이라고도 함)를 사용합니다. JavaScript와 Win32 세계를 연결하는 작업은 C++로 이루어집니다.
cpp-linux: C++와 GTK3를 사용합니다. JavaScript와 GTK 세계 간의 연결은 C++로 이루어집니다.
예제를 빌드하고 실행하려면 이 저장소를 복제하고 기본 예제 앱을 실행할 수 있습니다.git clone https://github.com/felixrieseberg/electron-native-code-demos
cd electron-native-code-demos
npm i
npm run build
npm run electron
Electron용 네이티브 애드온 빌드
네이티브 Node.js 애드온을 빌드하여 Electron 앱에 네이티브 코드를 추가할 수 있습니다 . Electron의 메인 스레드는 모든 운영 체제에서 적절한 GUI 애플리케이션을 실행하도록 이미 설정되어 있으므로 네이티브 애드온을 작성하는 것은 비교적 간단합니다. 이 튜토리얼에서는 각 특정 플랫폼으로 분기하기 전에 여러 단계를 공유합니다.공유 구현 세부 사항
모든 예는 에서 찾을 수 있습니다 packages. 모두 몇 가지 기본 사항을 공유합니다.package.json
네이티브 Node.js 애드온은 일반적으로 일반적인 Node 패키지이므로 require()이름으로 확인할 수 있습니다.binding.gyp&node-gyp
node-gyp이 파일은 빌드 시스템을 구성합니다. Google의 GYP("Generate Your Projects") 도구의 포트인 에서 사용됩니다 . 다양한 플랫폼과 Node.js 버전에서 C/C++ 코드를 컴파일하는 복잡한 작업을 처리하며 macOS, Windows, Linux에서 편리하게 작동합니다. 구성 파일은 binding.gypPython과 유사한 구문(실제로는 주석이 있는 JSON)으로 작성되었으며 컴파일할 소스 파일, include 디렉터리, 링크할 라이브러리, 다양한 플랫폼별 설정 및 컴파일 플래그를 지정합니다.Visual Studio의 msbuild나 Xcode를 구성해야 하는 경우에는 .에서 구성합니다 binding.gyp.
N-API레이어 및 선택적 브리지 레이어
모든 패키지에는 N-API 계층 역할을 하는 애드온 파일이 있습니다. Objective-C의 경우 해당 파일은 라고 하며 objectivec_addon.mm, C++ 패키지에서는 라고 합니다 cpp_addon.cc. 여러 가지 중요한 작업을 수행합니다.JavaScript/Node.js와 네이티브 코드 사이의 브리지 역할을 합니다.
JavaScript ↔ C++ 유형 변환을 처리합니다.
네이티브 코드와 JavaScript 코드 간의 이벤트 콜백을 관리합니다.
ABI(Application Binary Interface) 안정성을 보장하기 위해 N-API를 사용합니다.
즉, Node.js 세계와 네이티브 세계 사이의 접착제입니다. 얼마나 많은 "타입 변환"을 수행해야 하는지는 JavaScript 세계와 네이티브 세계 사이에서 얼마나 많은 타입을 앞뒤로 운반하고 싶은지에 따라 달라집니다. 이는 주로 여러분에게 달려 있지만, N-API는 이를 상당히 간단하게 만듭니다.또한, 선택한 언어가 C++에서 "멀어질"수록 상위 수준 코드(예: Swift나 Objective-C)를 하위 수준 코드에 노출하기 위한 추가적인 브리지 계층이 필요할 수 있습니다.
여러분은 궁금할 것입니다: 왜 이런 레이어를 추가할까요? 꼭 필요한 걸까요? 더 적은 파일과 코드 줄에 같은 기능을 집어넣을 수는 있지만, 저는 그렇게 하지 말라고 경고하고 싶습니다. 여러 가지 이점이 있습니다:
관심사 분리:
// N-API Layer (objectivec_addon.mm)
Napi::Value HelloWorld(const Napi::CallbackInfo& info) {
// Handle JS types and call bridge
NSString* result = [ObjCBridge helloWorld:nsInput];
}// Bridge Layer (ObjCBridge.m)
(NSString*)helloWorld:(NSString*)input {
// Handle native implementation
return [NSString stringWithFormat:@"Hello from Objective-C! You said: %@", input];
} ABI 안정성:
N-API는 안정적인 ABI를 제공하므로 애드온을 다른 Node.js 버전에 맞게 다시 컴파일할 필요가 없습니다.
N-API 코드를 별도로 유지하면 버전에 따라 달라지는 코드가 격리됩니다. 언어 경계:
// N-API Layer: C++ with Node.js bindings
class ObjectiveCAddon : public Napi::ObjectWrap {
// JavaScript interface code
}// Bridge Layer: Pure Objective-C
@interface ObjCBridge : NSObject {
// Native interface code
}
4) 이벤트 처리
// N-API Layer: Sets up JavaScript callbacks
[ObjCBridge setTodoAddedCallback:makeCallback("todoAdded")];// Bridge Layer: Manages native callbacks
static void (^todoAddedCallback)(NSString*);// UI Layer: Triggers events
[self.delegate todoAdded:jsonString];
-
jazz 프레임워크
현재 가장 제가 생각했던 방식과 비슷한 개발 프레임워크
https://jazz.tools/docs/react
-
https://www.editeur.org/.../v1.../20241112Thema_v1.6_ko.xml 그냥 때려박고 책 분류코드를 도서 상세정보, 카테고리를 LLM이 읽고 판단하게 만들어서 사용지 자꾸 항목 늘려... 본인들이 하지...
-
"주제분류 테마(Thema)"는 국제 표준 도서 주제 분류 시스템으로, 기존 시스템의 한계를 극복하기 위해 개발되었습니다. 세분화된 주제어와 수식자를 조합하여 도서의 주제를 상세히 표현하며, 국제적인 협력을 통해 지속적으로 업데이트됩니다. 도서 발견성 및 판매 향상을 목표로 하며, 메인 주제어와 여러 수식자를 조합하여 도서 정보를 효과적으로 전달하는 방법을 제시합니다. 다양한 분야의 도서에 적용 가능하도록 설계되었고, 키워드와의 상호 보완적 사용을 통해 도서 검색의 효율성을 높입니다.
테마(Thema) 분류 체계는 국제 비영리기구 에디터(EDItEUR) 내에 테마 국제운영 위원회가 주관하여 운영 및 관리되며, 국가별 대표 그룹이 자국 내 의견을 전달하여 테마 업데이트를 진행합니다. 테마 업데이트 과정에서 국가별 대표 그룹은 매년 런던과 프랑크푸르트 도서전에서 미팅을 갖고, 최신 업데이트된 내용을 자국에 전달하고 교육합니다. 참여 국가의 공조를 통해 주제분류가 풍성해지며, 국가별 제안은 회원국의 동의를 거쳐 테마에 반영됩니다. 테마는 최신 출판 트렌드를 반영하여 빠르게 코드가 추가되며, 2020년 6월 현재 1.4 버전까지 업데이트되었습니다.
국제 출판시장에서 테마와 국가별 표준을 함께 사용하는 추세이지만, 점차 국가별 표준을 없애고 테마를 사용하는 방향으로 나아가고 있습니다. 이는 국가별 표준 주제분류를 유지할 경우 비용 등이 발생하기 때문입니다. 국제 표준 테마는 국가별 특성과 시장 특성을 반영할 수 있으며, 국제적 합의가 필요 없는 6개의 수식자(장소, 언어, 시기, 교육관련, 흥미연령, 스타일)를 제공합니다.도서 카테고리별 분류 체계를 만들 프로그램을 개발하는 것은 흥미로운 프로젝트가 될 것입니다. 국제 표준 도서 주제 분류 체계인 테마(Thema)를 기반으로 프로그램을 개발하는 것을 추천합니다. 테마는 전 세계적으로 확산되고 있으며, 출판 콘텐츠의 주제를 잘 표현할 수 있도록 설계되었습니다.
테마는 구축형 구조로, 주제어와 수식자를 여러 개 조합하여 책의 주제를 상세하게 표현합니다. 예를 들어, 어린이 소설을 '학교 생활', '이민과 난민', '우정', '다양성과 포용' 등의 주제어와 '런던'과 같은 장소 수식자, '8세 이상'과 같은 흥미연령 수식자를 조합하여 분류할 수 있습니다.
프로그램 개발 시 다음과 같은 테마의 특징을 고려하는 것이 좋습니다.
20개의 대주제 분류(A-Y)와 6개의 수식자(장소, 언어, 시기, 교육관련, 흥미연령, 스타일)를 기반으로 다양한 도서 카테고리를 만들 수 있습니다.
국가별 특성과 시장 특성을 반영할 수 있도록, 국가별로 주제어 및 수식자를 추가하고 업데이트할 수 있는 기능을 포함하는 것이 좋습니다.
사용자가 주제어를 쉽게 이해하고 사용할 수 있도록 주제어에 대한 상세 설명, 사용 예시, 유의사항 등을 제공하는 것이 좋습니다.
테마는 키워드와 함께 사용되어 도서 발견성을 향상시킬 수 있습니다. 키워드 입력 기능을 추가하여 사용자가 책을 쉽고 빠르게 찾을 수 있도록 지원하는 것이 좋습니다.
하지만 테마는 완성형 구조가 아니기 때문에, 프로그램 개발 시 유연성을 확보하는 것이 중요합니다. 또한, 테마와 국가별 표준을 함께 사용하는 현재 국제 출판 시장의 상황을 고려하여 프로그램을 설계해야 합니다.
테마를 기반으로 도서 카테고리별 분류 체계를 만들 프로그램을 개발하면, 사용자들은 도서를 더욱 효율적으로 분류하고 검색할 수 있을 것입니다.어린이 학습 수학책을 테마(Thema) 분류 체계에 따라 중분류, 소분류까지 분류하면 다음과 같습니다.
메인 주제어는 어린이, 청소년, 학습(Y)을 선택하고, 그 하위 분류 중 어린이, 청소년: 학습(YP)를 선택합니다. YP는 학습서를 나타내는 코드이므로 어린이 학습 수학책에 적합합니다.
중분류: YP (어린이, 청소년, 학습/어린이, 청소년: 학습)
다음으로, 수학에 해당하는 소분류를 선택합니다.
소분류: YPM (어린이, 청소년, 학습/어린이, 청소년: 학습/수학)
어린이 학습 수학책은 반드시 대상 연령이나 교육 관련 수식자를 함께 사용해야 합니다.
흥미 수식자: 5AD (흥미 수식자/관심 연령, 수준/관심 연령: 4세 이상) - 예시.
교육관련 수식자: 4A (교육관련 수식자/교육단계/유아교육) - 예시.
따라서 어린이 학습 수학책의 분류는 'YP - YPM - 5AD - 4A' 와 같이 구성될 수 있습니다.
테마는 구축형 구조이므로, 필요에 따라 추가적인 주제어나 수식자를 조합하여 더욱 상세하게 분류할 수 있습니다. 예를 들어, 수학의 특정 분야(대수, 기하 등)나 학습 방식(게임, 퀴즈 등)에 대한 주제어나 수식자를 추가할 수 있습니다.CSV로 만든 도서 상세정보를 가지고 도서별 분류코드를 만드는 것은 가능합니다. 다만, 몇 가지 고려해야 할 사항이 있습니다.
제공되는 도서 상세정보: 도서 상세정보에 포함된 정보의 종류와 형식에 따라 테마 코드를 매핑하는 방법이 달라집니다. 예를 들어, 도서 제목, 저자, 출판사, ISBN, 키워드, 목차, 서지정보, 대상 독자, 책 소개 등 다양한 정보가 제공될 수 있습니다.
테마 코드 매핑: 도서 상세정보에 포함된 정보를 기반으로 테마 코드를 자동으로 매핑하는 알고리즘이나 규칙을 개발해야 합니다. 예를 들어, 특정 키워드나 목차 항목이 포함된 경우 해당하는 테마 코드를 자동으로 할당하는 규칙을 정의할 수 있습니다.
수동 검토 및 수정: 자동 매핑된 테마 코드는 오류 가능성이 있으므로, 수동으로 검토하고 수정하는 절차가 필요합니다. 전문가의 검수를 통해 코드의 정확성을 확보하는 것이 중요합니다.
어린이 학습 수학책을 예로 들어, CSV 파일에서 추출할 수 있는 정보와 이를 기반으로 테마 코드를 매핑하는 방법을 살펴보겠습니다.
CSV 필드
예시 데이터
테마 코드 매핑
제목
10살을 위한 덧셈과 뺄셈
YPM (어린이, 청소년, 학습/어린이, 청소년: 학습/수학)
키워드
초등 수학, 덧셈, 뺄셈, 수학 학습
YPM, 5AB (흥미 수식자/관심 연령, 수준/관심 연령: 8세 이상)
대상 독자
초등 3-4학년
5AC (흥미 수식자/관심 연령, 수준/관심 연령: 9세 이상), 4Z-KR-AED (대한민국교육과정/초 4학년)
책 소개
재미있는 그림과 게임으로 덧셈과 뺄셈을 쉽게 배우는 수학 학습서
YNVP (어린이, 청소년, 학습/어린이, 청소년 교양: 취미와 여가/퍼즐과 게임), YBG (어린이, 청소년, 학습/유아용 도서,그림책,활동북/유아,어린이 활동북)
위 예시와 같이, CSV 파일의 각 필드에 포함된 정보를 분석하여 해당하는 테마 코드를 매핑할 수 있습니다.
테마 분류 체계는 구축형 구조이므로, 필요에 따라 여러 개의 주제어와 수식자를 조합하여 책의 주제를 더욱 정확하게 표현할 수 있습니다.
주의할 점은, 테마 코드 매핑은 자동화와 전문가 검수를 병행하여 진행하는 것이 좋습니다. 자동화된 시스템은 효율성을 높일 수 있지만, 전문가의 검수를 통해 코드의 정확성을 확보하는 것이 중요합니다.Thema와 BISAC 분류의 가장 큰 차이점은 구조에 있습니다. BISAC은 완성형 구조, Thema는 구축형 구조를 사용합니다. 즉, BISAC은 하나의 완성된 주제어로 도서를 분류하는 반면, Thema는 여러 개의 주제어와 수식자를 조합하여 도서의 주제를 더욱 상세하게 표현합니다. 예를 들어, BISAC에서 '어린이 소설 - 학교 생활'은 하나의 주제어로 표현되지만, Thema에서는 '어린이, 청소년 소설', '학교 생활'과 같은 여러 주제어와 '런던'과 같은 장소 수식자, '8세 이상'과 같은 흥미연령 수식자를 조합하여 표현할 수 있습니다.
Thema의 구축형 구조는 다음과 같은 장점을 제공합니다.
표현의 유연성: 다양한 주제어와 수식자 조합을 통해 도서의 주제를 더욱 정확하고 풍부하게 표현할 수 있습니다.
발견성 향상: 세분화된 주제어를 통해 독자들이 원하는 책을 더욱 쉽게 찾을 수 있습니다.
추천 및 큐레이션 서비스 향상: 촘촘하게 연결된 주제어들을 기반으로 개인 맞춤형 도서 추천 및 큐레이션 서비스를 제공할 수 있습니다.
Thema는 BISAC의 단점을 극복하고 출판 콘텐츠의 주제를 더욱 효과적으로 표현하고 관리할 수 있도록 설계되었습니다.