Skip to content

Latest commit

ย 

History

History
74 lines (54 loc) ยท 6.77 KB

improvement.md

File metadata and controls

74 lines (54 loc) ยท 6.77 KB

๋ณ€ํ™˜ ํ’ˆ์งˆ ๊ฐœ์„ 

ํ’ˆ์งˆ์ด๋ž€

์˜๋ฏธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ณ  ๊น”๋”ํ•œ HTML์ด ๋งŒ๋“ค์–ด์ ธ์•ผ ํ•œ๋‹ค.

  • PDF์˜ ์›๋ž˜ ๋ ˆ์ด์•„์›ƒ์ด 2๋‹จ์ด์—ˆ์–ด๋„ HTML์€ 1๋‹จ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค(PDF reflow).
  • ์˜๋ฏธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ HTML์ด ๋งŒ๋“ค์–ด์งˆ ๊ฒƒ. ๋…ผ๋ฌธ์˜ ์ œ๋ชฉ์€ h1, ์ค‘๊ฐ„ ์ œ๋ชฉ์€ ์œ„๊ณ„์— ๋”ฐ๋ผ h2-h6, ๋ชฉ๋ก์€ ul/li, ๋‹จ๋ฝ์€ p, ์ฝ”๋“œ ๋ธ”๋Ÿญ์€ pre/code, ํ‘œ๋Š” table ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ณธ๋ฌธ์˜ ๊ตต์€ ๊ธ€์”จ์ฒด๋Š” strong, ๊ธฐ์šธ์ž„ ๊ธ€์”จ์ฒด๋Š” em, ์ทจ์†Œ์„ ์€ s, ๋ฐ‘์ค„์€ u๋ฅผ ์“ด๋‹ค.
  • ๋‚ด๋ถ€ ๋งํฌ๋‚˜ ์ฐธ์กฐ๋Š” a ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฐ ํŽ˜์ด์ง€์˜ ๊ฐ์ฃผ๋Š” ๋ฌธ์„œ ์ œ์ผ ๋งˆ์ง€๋ง‰์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

ํ’ˆ์งˆ ๋ชฉํ‘œ

์„ธ๊ณ„ ์ตœ๊ณ  ์ˆ˜์ค€์˜ pdf2html ๋ณ€ํ™˜๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์ ๋‹นํžˆ ํ•˜์ง€ ๋งˆ์„ธ์š”.

  • PDF ํŒŒ์ผ์˜ ํ˜•์‹์„ ๊นŠ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์„ธ์š”.
  • PDF ํŒŒ์ผ์˜ ํ…์ŠคํŠธ bbox ์ขŒํ‘œ, ๊ธ€๊ผด, ๊ธ€์ž ํฌ๊ธฐ ๋“ฑ PDF ํŒŒ์ผ์— ๋‹ด๊ธด ๋ชจ๋“  ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์„œ์˜ ์ „์ฒด์ ์ธ ๋ ˆ์ด์•„์›ƒ, ํ…์ŠคํŠธ์˜ ์œ„์น˜ ๋“ฑ์„ ํŒŒ์•…ํ•˜๊ณ  ๊ฒŒ์ŠˆํƒˆํŠธ ์›๋ฆฌ, ํŽธ์ง‘ ๋””์ž์ธ ๋“ฑ ๋ชจ๋“  ์ง€์‹์„ ํ™œ์šฉํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ๋ณ€ํ™˜์— ํ™œ์šฉํ•˜์„ธ์š”.
  • Machine Vision, ๋””์ž์ธ, ํ†ต๊ณ„ํ•™, ์ „์‚ฐํ•™, ์ˆ˜ํ•™ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์˜ ์•„์ด๋””์–ด๋ฅผ ์ฐธ์‹ ํ•˜๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ์‹œ๋„ํ•˜์„ธ์š”. ์„ธ๊ณ„ ์ตœ๊ณ  ์ˆ˜์ค€์˜ ๋ณ€ํ™˜๊ธฐ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๊ธฐ์กด์˜ ๋ป”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ํœด๋ฆฌ์Šคํ‹ฑ๋งŒ์œผ๋กœ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํœด๋ฆฌ์Šคํ‹ฑ๊ณผ AI๋ฅผ ์•„์ฃผ ์˜๋ฆฌํ•˜๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๋น ๋ฅด๋ฉด์„œ๋„ ํ’ˆ์งˆ์ด ์ตœ๊ณ ๋กœ ์ข‹์€ ๋ณ€ํ™˜๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์กด ์ฝ”๋“œ์˜ ๋ฐฉํ–ฅ์„ฑ์— ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด ๊ณผ๊ฐํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜์„ธ์š”.

์šฐ์„ ์ˆœ์œ„

  • ๊ฐ•์ œ ์ค„๋ฐ”๊ฟˆ์œผ๋กœ ๋Š์–ด์ง„ paragraph ์ด์–ด์ฃผ๊ธฐ
  • ์ž˜๋ชป ์ด์–ด์ง„ paragraph ๋‚˜๋ˆ ์ฃผ๊ธฐ
  • ํ…์ŠคํŠธ bbox ์ •๋ณด์— ๊ธฐ๋ฐ˜ํ•œ 1๋‹จ, 2๋‹จ ๋ ˆ์ด์•„์›ƒ ๊ฒ€์ถœ
  • ํ…์ŠคํŠธ bbox ์ •๋ณด์— ๊ธฐ๋ฐ˜ํ•œ paragraph ๊ฒ€์ถœ
  • ์ด๋ฏธ์ง€ ์ถ”์ถœ
  • ๋‚ด๋ถ€ ๋งํฌ ์ฒ˜๋ฆฌ

ํžŒํŠธ

  • ๋ฌธ์„œ ๋‚ด์˜ ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ž์—ด์„ ํƒ์ง€ํ•˜๋Š” ์‹์˜ ์ ‘๊ทผ์„ ํ”ผํ•˜์„ธ์š”. ์ •๋ง ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ธ ๊ฒฝ์šฐ์— ํ•œํ•˜์—ฌ, ๋งค์šฐ ์ผ๋ฐ˜ํ™” ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ํ…์ŠคํŠธ ํŒจํ„ด์„ ํƒ์ง€ํ•˜๋Š” ๊ฑด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  • ํ…์ŠคํŠธ์™€ ๋‹ค๋ฅธ ํ…์ŠคํŠธ๊ฐ€ ๋†“์ธ ์ƒ๋Œ€์  ์œ„์น˜, ์ „์ฒด์ ์ธ ๋ ˆ์ด์•„์›ƒ ์•ˆ์—์„œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ, ํฐํŠธ์˜ ํฌ๊ธฐ ๋“ฑ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•˜์—ฌ ํ…์ŠคํŠธ์˜ ์—ญํ• ๊ณผ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜์„ธ์š”. ๋งˆ์น˜ ์‚ฌ๋žŒ์ด ๋ˆˆ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ.
  • ๊ธฐ์กด ์ฝ”๋“œ์˜ ๋ฐฉํ–ฅ์„ฑ์— ์˜์ง€ํ•˜์ง€ ๋ง๊ณ  ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ์„ธ์š”.

ํ’ˆ์งˆ ๊ฐœ์„  ์ ˆ์ฐจ

๋ณ€ํ™˜ ํ’ˆ์งˆ์„ ๊ฐœ์„ ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ ์ง„ํ–‰ํ•˜๋ฉฐ, ํ•œ ๋ฒˆ์— ํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ์ผ์— ์ง‘์ค‘ํ•œ๋‹ค. ์•„๋ž˜ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฅด๋ฉด ํ•œ ๋ฌธ์„œ์˜ ํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ์—๋งŒ ์ง‘์ค‘ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ฌธ์„œ๊ฐ€ ๋™์‹œ์— ์ข‹์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.

  1. ๊ฐ ๋ฌธ์„œ์˜ ํŽ˜์ด์ง€ PNG ์ด๋ฏธ์ง€๋Š” data/work/png/{๋ฌธ์„œ๋ช…}/์— ์žˆ๋‹ค. (์˜ˆ: data/work/png/attention/) ์›๋ณธ PDF์™€ ๋Œ€์กฐํ•  ๋•Œ ์ฐธ๊ณ ํ•  ๊ฒƒ.
  2. data์˜ ๊ฐ ๋ฌธ์„œ๋ฅผ html๋กœ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
    • ๋ช…๋ น: node src/cli.ts pdf2html <pdfPath> <baselineHtmlPath>
    • ์ถœ๋ ฅ ์œ„์น˜: data/work/before/{๋ฌธ์„œ๋ช…}.html (์˜ˆ: data/work/before/attention.html)
  3. ๋ณ€ํ™˜๋œ HTML ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์„œ๋ฅผ ์ง‘์ค‘ํ•˜์—ฌ ์‚ดํŽด๋ณด๋ฉฐ ์ž˜๋ชป ๋ณ€ํ™˜๋œ ๊ฒƒ์œผ๋กœ ์ถ”์ •๋˜๋Š” ๋ฌธ์ œ์˜ ์œ ํ˜•์„ ์ฐพ๋Š”๋‹ค. ์ œ๋ชฉ์ด ์•„๋‹Œ๋ฐ h1-h6 ํƒœ๊ทธ๊ฐ€ ์“ฐ์˜€๊ฑฐ๋‚˜, ๋ชฉ๋ก์ธ๋ฐ li๊ฐ€ ์“ฐ์ด์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ํ•˜๋‚˜์˜ ๋‹จ๋ฝ์ธ๋ฐ ์—ฌ๋Ÿฌ p ํƒœ๊ทธ๊ฐ€ ์“ฐ์˜€๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ๋‹จ๋ž€์ธ๋ฐ ํ•˜๋‚˜์˜ p ํƒœ๊ทธ๊ฐ€ ์“ฐ์˜€๊ฑฐ๋‚˜, ํ…์ŠคํŠธ ์ถ”์ถœ์ด ์ž˜๋ชป๋œ ๋“ฏ ํ…์ŠคํŠธ์˜ ๋‚ด์šฉ์ด ์ด์ƒํ•˜๊ฒŒ ์ ํ˜€ ์žˆ๊ฑฐ๋‚˜(์˜ˆ๋ฅผ ๋“ค์–ด 2๋‹จ ๋ ˆ์ด์•„์›ƒ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ด์„œ ํ…์ŠคํŠธ๊ฐ€ ์„ž์ด๋Š” ๊ฒฝ์šฐ), ๋‚ด๋ถ€ ๋งํฌ๊ฐ€ ๊ฑธ๋ ค์•ผ ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ๋“ฑ์˜ ๋ฌธ์ œ๋ฅผ ์ฐพ๋Š”๋‹ค.
  4. ํ•ด๋‹น ๋ฌธ์ œ๋กœ ์ธํ•ด์„œ ๊นจ์ง€๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ํŒŒ์ผ์€ ์†Œ์Šค์ฝ”๋“œ์™€ co-locateํ•œ๋‹ค. (์˜ˆ: src/foo.ts์˜ ํ…Œ์ŠคํŠธ๋Š” src/foo.test.ts)
  5. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. ์ด ๋•Œ, ํŠน์ • ๋ฌธ์„œ์˜ ํŠน์ • ํ˜„์ƒ๋งŒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ผผ์ˆ˜๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋˜๋Š” ํœด๋ฆฌ์Šคํ‹ฑ์„ ๋งŒ๋“ ๋‹ค. ์ƒˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ธํ•ด ๊ธฐ์กด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๊ฐ€์žฅ ์ข‹๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ํœด๋ฆฌ์Šคํ‹ฑ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ํ•œํ•˜์—ฌ OpenAI API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. .env์— OPENAI_API_KEY๊ฐ€ ์žˆ์œผ๋‹ˆ ์ด๊ฑธ ํ™œ์šฉํ•˜์—ฌ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ๊ฒƒ. gpt-5-mini-2025-08-07 ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๊ฒƒ.
  6. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ „์ฒด ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š” ๊ฑธ ํ™•์ธํ•œ๋‹ค. ์ƒˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ๊ธฐ์กด์˜ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๋“ค์ด ๊นจ์ง€๋ฉด ๊ฐ๊ฐ์˜ ๋‚ด์šฉ์„ ๋ฉด๋ฐ€ํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ณ  regression์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค. ๋ฐ˜๋ฉด, HTML์ด ๋” ๋ฐ”๋žŒ์งํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๋ณ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง„ ๊ฒƒ์ด๋ฉด ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค. ๊ธฐ์กด ํ…Œ์ŠคํŠธ๊ฐ€ ๋งŽ์ด ๊นจ์ง„๋‹ค๊ณ  ํ•ด์„œ ๋ฐ˜๋“œ์‹œ regression์ด๋ผ๊ณ  ๋‹จ์ •ํ•˜์ง€ ๋ง๊ณ  ๋‚ด์šฉ์„ ์ž˜ ์‚ดํŽด๋ณผ ๊ฒƒ.
  7. data์˜ ๊ฐ ๋ฌธ์„œ๋ฅผ html๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
    • ๋ช…๋ น: node src/cli.ts pdf2html <pdfPath> <afterHtmlPath>
    • ์ถœ๋ ฅ ์œ„์น˜: data/work/after/{๋ฌธ์„œ๋ช…}.html (์˜ˆ: data/work/after/attention.html)
  8. 2๋‹จ๊ณ„์—์„œ ๋ณ€ํ™˜ํ•œ html๊ณผ 7๋‹จ๊ณ„์—์„œ ๋ณ€ํ™˜ํ•œ diff๋ฅผ ํ•˜์—ฌ ํ…Œ์ŠคํŠธ์— ์žกํžˆ์ง€ ์•Š์€ regression์ด ์—†๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. regression์ด ์žˆ๋‹ค๋ฉด 5๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ„๋‹ค.
  9. 7๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“  HTML์„ data/{๋ฌธ์„œ๋ช…}.html ํŒŒ์ผ๋กœ ์ €์žฅํ•œ๋‹ค. (์˜ˆ: data/attention.html)
  10. ์ปค๋ฐ‹ํ•œ๋‹ค.

ํŠน์ • ๋ฌธ์„œ์˜ ํŠน์ • ๋ฌธ์ œ๋งŒ ๊ฐœ์„ ์„ ํ•˜๋ ค๊ณ  ํ•˜๋”๋ผ๋„ ์œ„ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์„œ ๋‚˜๋จธ์ง€ ๋ฌธ์„œ๋“ค์—๋„ regression์ด ์—†๋Š”์ง€ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ๋ชจ๋“  ๋ณ€ํ™”๊ฐ€ regression์€ ์•„๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋˜๋Š” ํœด๋ฆฌ์Šคํ‹ฑ์„ ์ผ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฌธ์„œ๋“ค๋„ ๋ฉ๋‹ฌ์•„ ๊ฐœ์„ ๋  ๊ฒƒ์ด๋‹ค. diff ๊ฒฐ๊ณผ๋ฅผ ๋ฉด๋ฐ€ํ•˜๊ฒŒ ์‚ดํ”ผ๋ฉฐ regression์ธ์ง€ ์•„๋‹Œ์ง€ ์ž˜ ํŒ๋‹จํ•  ๊ฒƒ.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ ์š”๋ น

  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” data ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์‹ค์ œ ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•˜์„ธ์š”.
  • ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐ ๋ณ€ํ™˜์€ beforeAll()์—์„œ ํ•œ ๋ฒˆ์— ํ•˜์„ธ์š”.

CLI ๋ช…๋ น

์ด ์ €์žฅ์†Œ์—์„œ ๋ณ€ํ™˜์— ์‚ฌ์šฉํ•˜๋Š” CLI ์„œ๋ธŒ ๋ช…๋ น์€ ์•„๋ž˜ 2๊ฐœ๋‹ค.

  • node src/cli.ts pdf2png <pdfPath> <outputDir>
  • node src/cli.ts pdf2html <pdfPath> <outputHtmlPath>

์˜ˆ์‹œ:

  • node src/cli.ts pdf2png data/sample.pdf data/work/png/sample
  • node src/cli.ts pdf2html data/sample.pdf data/work/before/sample.html
  • node src/cli.ts pdf2html data/sample.pdf data/work/after/sample.html