Data parsing
============

EDB Postgres
AIは、HTMLやPDFを含むさまざまなデータ形式からテキストを解析および抽出するビルトイン機能を提供します。これらの機能は、さまざまな形式の複雑さを処理しながら、後続のパイプラインステップで簡単に処理できるクリーンで構造化されたテキスト出力を提供するように設計されています。

HTMLを解析する
--------------

``aidb.parse_html()``
ファンクションは、HTML文字列から可読テキストを抽出し、コンテンツの論理構造を保持しながらタグを削除します。

.. code:: sql

   SELECT * FROM aidb.parse_html(
       html =>
           <h1>Hello, world!</h1>
           <p>This is my first web page.</p>
           <p>
               It contains some <strong>bold text</strong>, some <em>italic test</em>, and a <a href="https://google.com" target="_blank">link</a>.
           </p>

           <img src="postgres_logo.png" alt="Postgres Logo Image">

           <ol>
               <li>List item</li>
               <li>List item</li>
               <li>List item</li>
           </ol>,
       options => {"method": "StructuredPlaintext"} -- Default
   );

   __OUTPUT__
                           parse_html
   - ----------------------------------------------------------
    Hello, world!                                            +
                                                             +
    This is my first web page.                               +
                                                             +
    It contains some bold text, some italic test, and a link.+
                                                             +
    Postgres Logo Image                                      +
    List item                                                +
    List item                                                +
    List item                                                +

   (1 row)

- ``method`` は、 HTMLを解析する方法を決定します。

  - ``StructuredPlaintext`` デフォルト
    —アルゴリズム的なアプローチを使用して、HTMLから生のテキストを抽出します。単純なデータの取り込みに最適です。

  - ``StructuredMarkdown`` —
    HTMLをMarkdownのようなテキストに変換します。これにより、重要な構文コンテキストヘッダーやリストなどが保持され、LLMがドキュメントの元の階層をより深く理解するのに役立ちます。

PDFを解析する
-------------

``aidb.parse_pdf()``
ファンクションは、バイナリPDFデータからテキストを抽出します。
PDFは構造的に複雑であることが多いため、このファンクションは堅牢なエラー処理を提供します。

.. code:: sql

   SELECT * FROM aidb.parse_pdf(
       bytes => decode(255044462d312e340a25b89a929d0a312030206f626a3c3c2f547970652f4361
                       74616c6f672f50616765732033203020523e3e0a656e646f626a0a322030206f
                       626a3c3c2f50726f64756365722847656d426f782047656d426f782e50646620
                       312e37202831372e302e33352e313034323b202e4e4554204672616d65776f72
                       6b29292f4372656174696f6e4461746528443a32303231313032383135313732
                       312b303227303027293e3e0a656e646f626a0a332030206f626a3c3c2f547970
                       652f50616765732f4b6964735b34203020525d2f436f756e7420312f4d656469
                       61426f785b302030203539352e3332203834312e39325d3e3e0a656e646f626a
                       0a342030206f626a3c3c2f547970652f506167652f506172656e742033203020
                       522f5265736f75726365733c3c2f466f6e743c3c2f46302036203020523e3e3e
                       3e2f436f6e74656e74732035203020523e3e0a656e646f626a0a352030206f62
                       6a3c3c2f4c656e6774682035393e3e73747265616d0a42540a2f463020313220
                       54660a3120302030203120313030203730322e3733363636363720546d0a2848
                       656c6c6f20576f726c642129546a0a45540a656e6473747265616d0a656e646f
                       626a0a362030206f626a3c3c2f547970652f466f6e742f537562747970652f54
                       797065312f42617365466f6e742f48656c7665746963612f4669727374436861
                       722033322f4c61737443686172203131342f5769647468732037203020522f46
                       6f6e7444657363726970746f722038203020523e3e0a656e646f626a0a372030
                       206f626a5b323738203237382030203020302030203020302030203020302030
                       2030203020302030203020302030203020302030203020302030203020302030
                       2030203020302030203020302030203020302030203020302037323220302030
                       2030203020302030203020302030203020302030203020302039343420302030
                       2030203020302030203020302030203020302030203535362035353620302030
                       203020302030203020323232203020302035353620302030203333335d0a656e
                       646f626a0a382030206f626a3c3c2f547970652f466f6e744465736372697074
                       6f722f466c6167732033322f466f6e744e616d652f48656c7665746963612f46
                       6f6e7446616d696c792848656c766574696361292f466f6e7457656967687420
                       3530302f4974616c6963416e676c6520302f466f6e7442426f785b2d31363620
                       2d3232352031303030203933315d2f436170486569676874203731382f584865
                       69676874203532332f417363656e74203731382f44657363656e74202d323037
                       2f5374656d482037362f5374656d562038383e3e0a656e646f626a0a78726566
                       0a3020390a303030303030303030302036353533352066200a30303030303030
                       303135203030303030206e200a30303030303030303539203030303030206e20
                       0a30303030303030313739203030303030206e200a3030303030303032353720
                       3030303030206e200a30303030303030333436203030303030206e200a303030
                       30303030343531203030303030206e200a303030303030303537332030303030
                       30206e200a30303030303030373733203030303030206e200a747261696c6572
                       0a3c3c2f526f6f742031203020522f49445b3c39333932413539463342453742
                       383430383035443632373436453841344632393e3c3933393241353946334245
                       3742383430383035443632373436453841344632393e5d2f496e666f20322030
                       20522f53697a6520393e3e0a7374617274787265660a3938380a2525454f460a, hex),
       options => {"method": "Structured", "allow_partial_parsing": true} -- Default
   );

   __OUTPUT__
    part_id |     text
   - --------+--------------
          0 | Hello World!+
            |
   (1 row)

- ``method`` は、PDFを解析する方法を決定します。

  - ``Structured``
    メソッドデフォルト標準のPDF仕様に依存して、テキストブロックを識別します。
    PDF仕様に依存する構造PDF解析は、特に複雑なまたは独自のエンコーディングとさまざまなフォントが含まれる場合、仕様に準拠していないPDFに苦戦する可能性があります。

  - ``allow_partial_parsing`` :
    次の場合にPDFの解析を続行するかどうかをシステムに指示する安全フラグパーサーは、1つ以上のページでエラーを検出しました。これを\ ``true``
    デフォルトに設定すると、非準拠または複雑なファイルからできるだけ多くのデータを取得できます。

- ページマッピング 結果の\ ``part_id``
  列は、テキストが抽出された特定のページインデックスに直接マップし、テキストを維持できます。
  AIパイプライン内の元のドキュメント参照。

..  Tip::
   どちらの解析操作もネスト解除を実行します。これは、単一の入力マルチページPDFのようなを複数行のデータに変換し、 `part_id` を自動的に生成してセグメントを正しい順序に保つことを意味します。
