텍스트 처리: 목차 텍스트를 djvu 북마크 형식으로 변환하시겠습니까?

텍스트 처리: 목차 텍스트를 djvu 북마크 형식으로 변환하시겠습니까?

일반적으로 책의 목차에서 각 줄은 장이나 섹션을 나타내며 해당 페이지 번호로 끝납니다.

1 first chapter 10
1.1 first section 11
1.1.1 first subsection 12
1.2 second section 13
2 second chapter 14 
2.1 first section 16
2.2 second section 13

위의 예에서 djvu 파일의 북마크 형식은 다음과 같습니다.

(bookmarks
 ("1 first chapter" "#10" 
 ("1.1 first section" "#11" 
 ("1.1.1 first subsection" "#12" ))
 ("1.2 second section" "#13" ))
 ("2 second chapter" "#14" 
 ("2.1 first section" "#16" )
 ("2.2 second section" "#13" ))
)

요점은 섹션과 장의 트리형 구성을 달성하기 위한 왼쪽 및 오른쪽 대괄호 쌍, 각 북마크 항목에 대한 큰따옴표, #북마크 텍스트 파일의 수동 보기 및 편집을 용이하게 하기 위해 각 페이지 번호 앞에 .line 분리를 사용하는 것입니다. 그것은 전혀 중요하지 않습니다.

내 질문은 다음과 같습니다

  1. 디렉터리의 일반 텍스트 파일을 djvu 책갈피 형식으로 변환하여 수동 처리를 최대한 줄이는 편리한 방법이 있는지 궁금합니다. 이는 텍스트 처리 응용 프로그램이나 프로그래밍 언어로 프로그래밍하거나 둘의 조합을 통해 수행할 수 있습니다.
  2. 제안대로관련 답변통과데니스 윌리엄슨,

    당신이 하고 있는 일은 약간 XML처럼 보이기 시작했습니다. 어쩌면 실물을 사용하고 적절한 도구를 사용하여 조작해야 할 수도 있습니다.

    빠른 Google 검색으로 djvuxml이 표시됩니다. XML 파일은 적절한 Python 또는 Perl 모듈이나 xmlstarlet과 같은 쉘 유틸리티를 사용하여 쉽게 조작할 수 있습니다.

    djvu 북마크 형식이 XML 형식과 비슷한지 궁금합니다(아직 XML에 익숙하지 않다는 점은 인정하지만 여기서 도움이 된다면 기꺼이 배우고 싶습니다). XML 도구를 사용하여 목차 텍스트 파일을 djvu 책갈피 형식으로 변환할 수 있습니까?

답변1

이것은 적절한 들여쓰기를 생성하려고 시도하는 awk 스크립트입니다. 입력이 올바른 형식이라고 가정합니다(예: 앞의 줄은 또는 3.2.2이어야 하고 가 아니어야 합니다 ).3.13.1.something3

#! /usr/bin/awk -f
BEGIN { printf "(bookmarks"; depth = 1; }
{
    level = split($1, s, ".");
    while (level < depth) {--depth; printf ")";}
    print "";
    depth = level + 1;
    gsub(/[\\"]/, "\\&");
    page = $NF;
    sub(/ +[^ ]*$/,"");
    for (i in s) printf " ";
    printf "(\"%s\" \"#%s\"", $0, page;
}
END { while (depth-- > 0) printf ")"; print ""; }

DJVU 구문은 XML과 관련이 없습니다.s-표현.

답변2

모든 프로그래밍 언어는 입력을 구문 분석할 수 있습니다.옳은.

프로그래밍 언어를 선택하고 입력을 구문 분석한 후 먼저 "."로 구분합니다. 첫 번째는 " "이고 그 다음은 " "입니다.

저는 Perl을 사용하겠지만, 개발자에게 가장 익숙한 언어는 무엇이든 잘 작동할 것입니다.

자동 솔루션은 입력이 엄격한 구문을 따르는 경우에만 작동한다는 점을 기억하세요. 이것이 알려진 표준이 아닌 이상 이를 XML이나 djvu로 변환하기 위한 사전 구축된 도구가 없습니다.

관련 정보