KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
If you suspect a man, don't employ him.
FrontPage › MakingDic
목적 : 일전에 ChoF님과 karnes님의 말씀에 따라서 TeXDataBase의 연동을 생각해 보았습니다.
  • 기능의 한계는 있지만(PDF 화일만들기는 안됩니다) 다음의 http://kbrobgy.linuxtop.co.kr/makingDic/main.html site에서 현재까지의 진행사항을 볼수 있습니다.
  • 전체적인 Dic의 data의 구성도입니다. 관계형 DB를 사용해서 할 예정입니다.
  • 전체적인 작업의 순서도입니다. main.html에서 입력,수정,찾아서보기(html),PDF만들기 입니다.

    makingDicflow.png


목차

1 APM설치(in linux)
2 mySQL database및 table만들기
3 문서 입력 form과 수정 form 및 보기 form 만들기
4 LaTeX로 조판하기
5 PDF화일 만들기
6 TeX4ht를 이용하여 html문서 만들기(optional)
7 전체 구성화일
8 대화

1 APM설치(in linux)

일단 이란은 비워 두겠습니다. 많은 책들을 활용하거나 http://www.phpschool.com 에 가시면 많은 문서들이 있으므로 거기를 적절히 참조하면 될것 같습니다. 나중에 이일이 끝나고 난후에 필요하다고 하시는 분들이 계시면 채워넣겠습니다.

2 mySQL database및 table만들기

06ObGyDic database에는 약 3개의 table이 필요할 것 같다.
  • Admission_Table : web에서 연결할때 admission id와 password를 가지고 있는 table
  • ObGyDic_main table : 주된 dic table이다. main_disease_id, 영어 질환명, 한글 질환명, 정의, 질환명 code, 각 질환과 관련된 procedure code가 들어 가게 된다.
  • ObGyDic_acce table : 질환명중에서 형용사(?)로 들어가는 부분을 처리하기 위한 table이다. 위의 ObGyDic_main과 같은 record가 들어가며, main_disease_id를 외래키(foreign key)로 사용할 생각이다.(우선은 optional로 두기로하겠다.)

1.우선 root사용자의 비밀번호를 만든다.
#> /usr/local/mysql/bin/mysql mysql 
.....
mysql>update user set password=password('******') where user='root';
mysql>flush privileges;
mysql>quit


1.그 후에 06ObGyDic database및 사용자 setting한다
#> /usr/local/mysql/bin/mysql -u root -p mysql
Enter password: ******
.....
mysql>create database TeXObGyDic;
....
mysql>insert into user (host,user,password) values('localhost','KTUG',password('KTUG1234'));
....
mysql>insert into db values ('localhost','TeXObGyDic','KTUG','y','y','y','y','y','y',
'n','y','y','y','y','y','y','y','y','y','y');
....
mysql>flush privileges;
mySQL 버전에 따라 db테이블이나 user테이블의 칼럼 수가 다르기 때문에, SQL문법 오류가 날 경우에는 desc db;명령을 사용하여 Type이 enum('N','Y')인 칼럼 수에 맞게 'y'의 갯수를 조정한다.

1. 그 후에 table생성한다.
#>/usr/local/mysql/bin/mysql -u KTUG -p TeXObGyDic
Enterpassword: KTUG1234
mysql>create table ObGyDic_main (
    -> main_disease_id int unsigned not null auto_increment primary key,
    -> Disease_En char(50) not null,
    -> Shortended_Word varchar(25) null,
    -> Disease_Ko char(50) null,
    -> Definition text null,
    -> Disease_Code varchar(250) null,
    -> Procedure_Code varchar(250) null,
    -> index idx1 (Disease_En) );
mysql>create table Admission_ObGyDic (
    -> name char(20) not null primary key,
    -> password char(20) not null );




1. 기존의 OpenOffice.calc로 만들어진 data를 mySQL로 집어넣기.
여러 가지 방법이 있을것 같습니다만 우선 http://www.phpschool.com 에서 가지고 온 방법들을 나열하겠습니다.
  • 우선 openoffice에서 csv저장(field구분은 ;로 하고 난후에 )-> mysql에서 load data infile './test.csv' into table test_table fields terminated by ';' (.....);
  • openoffice->excel->access->ODBC->mySQL
  • php로 만들어서 query한다. 정도일것입니다.
  • 저는 처음의 방법으로 하였습니다. 방법으로는 load data infile '/usr/local/apache2/htdocs/0607TeXObGyDic.csv' into table ObGyDic_main fields terminated by ';' (Disease_En,Shortended_Word,Disease_Ko,Definition,Disease_Code,Procedure_Code); 입니다.
  • openoffice에서 csv로 저장할때도 그렇고 mySQL에 집어넣을때도 그렇고 \는 무시를 하는 것 같습니다. 그래서 어쩔수 없이 \\집어 넣고 하니 원하는 결과는 나오는 군요. 새로운 첨부 "0603TeXObGyDic.csv"파일 업로드
  • 3 문서 입력 form과 수정 form 및 보기 form 만들기

    문서의 입력은 간단히 spreadsheet를 이용해서 만들어서 하면 간단할듯 싶지만, 나중의 유지보수를 위해서는 아무래도 web에서 문서를 받아오는 것이 더 현명할 것 같아서 php등을 이용해서 만들기로 했습니다.
    • DB_insert.php로 form으로 받아온 data를 hoze님의 WebTeX의 도움을 받아서 치환후에 집어 넣는 것입니다. @DB_insert.txt (1.08 KB) (*wiki특성상 php는 올라가지 않습니다.)

    수정 form입니다. 수정은 두개의 입력값을 가지고 작업을 했습니다. 거의 수정을 하는 사람은 제가 할것으로 생각이 되므로 main_disease_id를 가지고 작업을 하려고 하고 있습니다. 두개의 php 화일이 있습니다. 찾아서 보기폼은 source data를 그대로 보여주는 것과 html화 해서 보여주는 두개의 방법으로 하였습니다. html로 해서 보여주는 방법으로는 위의 preg_replace()함수를 이용했습니다. source 그대로 보기는 별다른 필요가 없을것 같고 html화 해서 보기만 php화일을 link합니다.
    • mySQL에 들어 있는 data중에서 \command된 부분을 적절히 html화 하기
      • mySQL의 data들은 직접 TeX로 직접 뽑아쓰기 위해서 몇가지 명령문이 들어가 있다. 명령문의 종류로는
      • \prefix{text} 접두어 --> html에서 변환은 text ~ 입니다.
      • \postfix{text} 접미사 --> html에서 변환은 ~ text 입니다.
      • \synonym{text} 비슷한말 --> html에서 변환은 슷한말 text 입니다.
      • \cnm{text} dhucs의 macro --> html에서 변환은 text
      • \dis_ref{text} --> html에서 변환은 text
      • \idxcnt --> html에서 변환은 특수문자 한개로 변환하면 될것 같음.
      • \ --> 없애기
        • 이 명령문은 Disease_Ko와 Definiton field에만 들어 있어서 이 두 field에서의 data를 print하기전에 미리 한번 php정규표현식을 이용해서 전처리하고 난후에 html view해준다.
      • 정규표현식의 표현으로는
     $search_regex = array ("/\\\prefix{(.*?)}/i","/\\\postfix{(.*?)}/i",
    "/\\\synonym{(.*?)}/i","/\\\cnm\{(.*?)}/i","/\\\dis_ref\{(.*?)}/i",
    "/\\\idxcnt/i","/&/i","/\\\/i");
    
    $replace_regex = array ("\\1 ~","~ \\1"
    ,"『비슷한말』 <span style=text-decoration:underline overline;>\\1</span>"
    ,"『\\1』","『참조』<span style=text-decoration:underline;> \\1</span>"
    ,"▶","&amp;","");
    $html_Disease_Ko = preg_replace($search_regex, $replace_regex, $search_result[Disease_Ko]);
    $search_regex = array ("/\\\prefix{(.*?)}/i","/\\\postfix{(.*?)}/i",
    "/\\\synonym{(.*?)}/i","/\\\cnm\{(.*?)}/i","/\\\dis_ref\{(.*?)}/i",
    "/\\\idxcnt/i","/&/i","/\\\/i");
    $replace_regex = array ("<span style=\"font-style: italic; font-weight: bold;\">\\1
     ~</span>","<span style=\"font-style: italic; font-weight: bold;\">~ \\1</span>",
    "<br>『비슷한말』 <span style=text-decoration:underline overline;>\\1</span>",
    "『\\1』","<br>『참조』<span style=text-decoration:underline;> \\1</span>",
    "<br>▷","&amp;","");
    $html_Definition = preg_replace($search_regex, $replace_regex, $search_result[Definition]);
    

    4 LaTeX로 조판하기

    현재까지 들어가 있는 data를 기준으로 해서 약식으로 만들어 보겠습니다.
  • mySQL에서 해야 할일은 data의 sorting과 순서적으로 추출하는 것입니다.
     SELECT Disease_En, Shortended_Word, Disease_Ko,Definition,Disease_Code,Procedure_Code
     INTO OUTFILE 'DicA.txt' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' FROM ObGyDic_main 
     WHERE Disease_En LIKE 'A%' ORDER BY Disease_En asc;
     
    • 위의 방법은 mySQL의 root password를 알야야만 가능합니다.
  • php에서 곧바로 tex 화일 만들기
  • 5 PDF화일 만들기

    도은이아버님의 명령으로 pdf화일 만드는 기능을 추가했습니다.
  • 우선 작업한것을 올려 두겠습니다. @makingPDF.txt (1.86 KB)
  • 현재 개별적인 항목마다 작동하는 PDF 자동만들기(실험은 Z,Y,U만 해보았습니다.)를 만들었습니다. 전체적으로 만드는 것도 가능할 것은 같은데, 제가 mySQL data입력하는데 실수가 있어서 아마도 제대로 작동은 하지 않을것 같습니다. 이것이야 어짜피 하나하나 만들어 보고 고치는 수밖에 없는 일이라서요.. 일단은 이것으로 마무리 할 생각입니다. 그런데 생각만큼 정규표현식을 php에서 쓰는 일이 쉬운일은 아니였습니다. @0618makingPDF.txt (3.27 KB)
  • 몇가지 것을 고치고 난후에 모두 제대로 작동하는 것을 확인하였습니다. 이제 좀 무엇이 되는듯 합니다. 거의 한달 가까이 해서 어렵사리 일을 끝낸것 같습니다. (PDF 화일 만드는 directory를 만드는 작업을 하면 될것 같습니다.) 조금 바꾸었습니다. @0619makingPDF.txt (3.4 KB)
  • 6 TeX4ht를 이용하여 html문서 만들기(optional)

    7 전체 구성화일

    8 대화

    많은 관심과 지도를 부탁드립니다. 용두사미가 되지 않게 해주십시요.
    이거 재미있겠네요. 기대가 큽니다. -- Karnes 2006-05-28 16:09:16
    감사합니다. 많이 도와주십시요 --synapse
    한가지 고민이 생겼습니다. PerlTeX예제에서 보듯이 perltex에서 mySQL로 직접연결은 실패했다고 했습니다. google에게 아무리 물어봐도, 별다른 내용도 나오지 않구요? 그렇다면 굳히 mySQL를 써서 data를 집어 넣을 필요가 있는가? 라는 것입니다. 물론 mySQL에 data를 집어 넣으면 여러모로 편리한 점이 있기는 하지만, 우리의 주제와 관련해서는 별다른 장점이 없어 보이기는 합니다. 그냥 perl이나 php에서 간단히 text 문서로 저장하고 거기서 data를 뽑아와서 작업을 해도 될것 같은데요? 아니면 glossary와 index에서 가끔씩 database를 사용하는 경우가 있다고 하던데, 이것을 source를 좀 구해서 살펴볼까요?(source를 구한다고 하더라도.. 까막눈이라 알수나 있을지 싶기는 합니다.) 오늘도 무엇인지 잘 모르면서 열심히 삽질하고 있습니다. --synapse
    제 생각은 이렇습니다. 말씀대로 굳이 mySQL까지 쓰는 것이 반드시 요구되는 것은 아니겠지요. 그러나, 사전이라는 물건의 특성상 한 사람의 입력만으로 모든 일이 끝난다고 보기는 어렵고 사전에서 가장 중요한 것이 엔트리들을 *입력*하는 것임을 생각할 때, 공동작업을 위해서, 그리고 방대한 대용량 데이터를 취급하기 위해서 SQL이 이상적이라고 보고 있습니다. 일단 사전은 1000페이지가 넘어가는 것은 우습지 않겠습니까? TeX 내에서 mySQL을 제어하는 [http]SQLTeX이라는 물건도 있습니다. 얼마나 도움이 될는지는 모르겠지만 간단한 SQL명령을 연동하는 것은 가능한 듯도 싶습니다. --Karnes2006-05-30 19:11:51
    감사합니다. 이래저래 공부할 것만 늘어가는군요.:) --synapse
    TeX에서 MySQL을 직접 물고 들어갈 필요가 있을까요? 저도 사전(?)과 비슷한 것을 만들어 보고 있는중입니다만 access.MDB를 delphi로 만든 간단한 프로그램으로 추출하여 tex을 만들고 있습니다. 현재 acess.MDB에 입력, 간단한 프로그램을 돌려 access에서 내용을 추출하여 tex화일 만듦, latex으로 compile, dvipdfmx으로 PDF로 만들기를 하여보고 있는데, HWP로 작업하는 것에 비하여 만족하고 있습니다. (저는 만족하지만, 다른 분들은 HWP의 직관적(?) interface를 아쉬워 하시더군요. X-( ) -- likesam
    할수만 있다면, MySQL를 직접물고 들어가는 것도 좋을것 같기는 합니다. 실제로 web에서의 문서는 그냥 print해서 볼 기회가 가끔씩 있는데, 이것 그냥 봐야해서 보는 거지... 정말로 보기가 어렵습니다. 하지만 mySQL에서 직접(?) 연결이 가능하다면, 휠씬 좋아질것 같기는 합니다. 특히 우리 ktug에서 만이라도 이러한 기능이 첨가 된다면 매우 좋을것 같다는 조그만한 소망이 있습니다. 뭐가 뭔 말인지 제가 읽어봐도 좀 그렇기는 합니다만,.. 쉽게 말해서, practical use의 어느 특정한 글타래를 좀더 보기 좋게 볼수도 있지 않을까? 하는 생각입니다.--synapse

    예전 직장에서 제가 했던 것은 1. 근무 일지를 매일 입력하고, 매달 말일에 그것을 출력하게 한다. 이때 데이터베이스 레코드를 텍으로 만들고 이를 다시 PDF로 만든다. 2. 사업 계획서 따위를 입력하고 이를 PDF로 만든다. 이 때 문제가 되었던 것은 1.데이터베이스의 인코딩과 텍 인코딩을 동일하게 해야 한다. 2. ampersand, backslash 등 php에서의 escape 문자와 텍에서의 escape 문자를 찾아서 처리한다. (이거 생각처럼 쉽지 않더군요.) 그럭저럭 잘 썼고 꽤 편했습니다. --hoze
    감사합니다. hoze님이 경험하신 내용을 좀 구체적으로 이야기 해주시면 감사하겠습니다.저의 경우에는 우선 mySQL에 입력하고 나서, 이 내용을 그냥 곧바로 TeX로 사용할것인지 아니면 text로 변환하여 쓸것인지는 고민중입니다만.. 어짜피 이것이야 mySQL과 TeX의 문제라고 생각이 됩니다. 그렇지만 이제 조금더 시간이 남고 여력이 남으면 mySQL data를 php로 불러들여서 web에서 list및 edit해야 할 일이 생길것 같기에 그럼니다. 감사합니다.--synapse

    이제 어느 정도의 php작업은 끝난것 같다는 생각입니다. 아주 초보적이지만 입력과 찾기 보기 기능이 가능해졌으니까요?(아직까지는 다 된것은 아니지만..) 이렇게 너무 php에만 머물러 있다가는 제가 하려고 하는 작업을 손을 못댈것 같아서요! 혹시라도 한번 구경을 하고 싶은신 분은 http://kbrobgy.nameip.net/main.html 에 접속해서 '찾아서 보기(html)' 란을 클릭해서 영어 질환명에서 a를 처보십시요. 그중에 하나를 선택하면 여태까지 한 결과가 나옵니다. --synapse

    @WebTeX.zip (1.49 KB) 이것은 입력 폼으로부터 받은 텍을 PDF로 만드는 간단한 프로그램입니다. 도움이 되길 바랍니다. --hoze
    감사합니다. --synapse

    잘 봤습니다. 성공한 것을 축하합니다. ^^ 이제 남은 것은, 웹 인터페이스에서 Generate PDF 메뉴를 하나 만들고 이것을 누르면 사전 문서를 생성해주는 것이겠군요. 제안을 하나 하자면, A, B, C 등 알파벳 문자별 PDF와 전체 PDF를 따로 생성할 수 있도록 하는 것이 좋겠고, 이 자동 생성을 위해서는 *수작업* 과정을 전부 스크립트 처리하는 것만이 남은 것 같습니다. 위에 소개하신 url이 잘 연결이 안 돼서 들어가보지 못하고 있는데... --Karnes
    일단 죄송하다는 말씀을 드리야 겠습니다. 저의 집의 computer를 커놓아야 되는데, 아직까지는 본격적으로 작업을 하지 않아서 켜놓지 않았습니다. 위에서 말씀하신 것은 한번 해보겠습니다... 내일은(6월15일) 제가 집에 있어서 계속 켜놓을 생각입니다. 그리고 제가 일전에 한번 말씀드린것 같이 저희 KTUG 어느 특정page를 pdf화 하는 것에 대한 것은 어떻게 생각하시는지요?
    관심을 가져주셔서 감사합니다. --synapse

    들어가서 보았습니다. 잘 되는 것 같습니다. 수고하셨습니다. 나중에 얼마든지 응용이 가능할 것 같네요. -- Karnes 2006-06-19 23:33:09
    우연히 들어와서 보게되었습니다. 두가지점이 놀랍습니다. 첫째는 시간에 놀라고(물론 저야 지금 당직중이라서 깨어 있는것이지만...) 둘째는 매번 이렇게 신경을 써주시는 것에 놀랐습니다. 그런데 이 시간까지 무엇하시는지요? 항상 보면 이 시간엔가 무엇인가르 하시는듯 하는데.... 정말로 놀랐습니다. :D 그리고 감사드립니다. --synapse


    ^
    Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2006-06-25 13:53:08
    Processing time 0.0880 sec