コンテンツにスキップ

テキスト抽出(PEG)

Web ページから取得したテキストは、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.storeg.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 セレクターで対象範囲をできるだけ狭める
  • 1 つのテキストブロックに対して抽出ルールを作る
  • 失敗した入力をワークスペースストアに保存する
  • キューとワーカーで同じ抽出を大量のページへ適用する

関連ページ: