テキスト抽出(PEG)
Web ページから取得したテキストは、HTML 構造が不十分だったり、余分な空白やラベルが混じっていたりします。Guida では通常の JavaScript/Lua/Janet 処理に加え、Janet の PEG(Parsing Expression Grammar)を使って、繰り返し使える抽出ルールを書けます。
いつ PEG を使うか
Section titled “いつ PEG を使うか”PEG は次のような場合に向いています。
- 同じ形式のテキストブロックから名前、価格、ID、日付などを取り出す
- 正規表現だけでは読みづらい複数段階の抽出を行う
- ページごとの「抽出ルール」をワークスペースに保存して再利用する
DOM の構造が安定している場合は、まず g.dom.getElements() や g.page.getDom() を使ってください。PEG は、DOM から取り出した後のテキスト整形に向いています。
基本的な流れ
Section titled “基本的な流れ”- ブラウザーからテキストを取得する
- 不要な空白やラベルを軽く整える
- PEG または通常の文字列処理で構造化する
- 結果を
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 を選ぶ理由
Section titled “Janet を選ぶ理由”Janet は組み込み PEG エンジンを持ち、構造化されていないテキストの抽出に強い言語です。Guida では JavaScript、Lua、Janet のどれでも同じブラウザー API を使えるため、ページ操作は JavaScript、複雑なテキスト抽出は Janet という使い分けもできます。
現実的な使い方
Section titled “現実的な使い方”最初から大きな grammar を作らず、次の順で進めると安定します。
- DOM セレクターで対象範囲をできるだけ狭める
- 1 つのテキストブロックに対して抽出ルールを作る
- 失敗した入力をワークスペースストアに保存する
- キューとワーカーで同じ抽出を大量のページへ適用する
関連ページ: