콘텐츠로 이동

텍스트 추출(PEG)

웹 페이지에서 얻은 텍스트는 HTML 구조가 부족하거나, 불필요한 공백과 라벨이 섞여 있는 경우가 많습니다. Guida에서는 일반 JavaScript/Lua/Janet 처리에 더해 Janet의 PEG(Parsing Expression Grammar)를 사용해 반복 가능한 추출 규칙을 작성할 수 있습니다.

PEG는 다음과 같은 경우에 적합합니다.

  • 같은 형식의 텍스트 블록에서 이름, 가격, ID, 날짜 등을 추출
  • 정규식만으로는 읽기 어려운 여러 단계 추출 수행
  • 페이지별 “추출 규칙”을 워크스페이스에 저장해 재사용

DOM 구조가 안정적이라면 먼저 g.dom.getElements()g.page.getDom()을 사용하세요. PEG는 DOM에서 가져온 뒤의 텍스트 정리에 적합합니다.

  1. 브라우저에서 텍스트 가져오기
  2. 불필요한 공백이나 라벨을 가볍게 정리
  3. PEG 또는 일반 문자열 처리로 구조화
  4. 결과를 g.store, g.queue, 외부 데이터베이스에 저장
await g.dom.waitForDomStable();
const rows = await g.dom.getElements(".product", ["innerText"]);
for (const row of rows) {
g.store.put("raw-products", crypto.randomUUID(), {
text: row.innerText,
capturedAt: new Date().toISOString(),
});
}

Janet은 내장 PEG 엔진을 갖고 있으며 구조화되지 않은 텍스트 추출에 강한 언어입니다. Guida에서는 JavaScript, Lua, Janet 모두 같은 브라우저 API를 사용할 수 있으므로, 페이지 조작은 JavaScript로 하고 복잡한 텍스트 추출은 Janet으로 나누어 사용할 수도 있습니다.

처음부터 큰 grammar를 만들지 말고 다음 순서로 진행하면 안정적입니다.

  • DOM 셀렉터로 대상 범위를 최대한 좁히기
  • 하나의 텍스트 블록에 대한 추출 규칙 만들기
  • 실패한 입력을 워크스페이스 저장소에 저장하기
  • 큐와 워커로 같은 추출을 많은 페이지에 적용하기

관련 페이지: