RAG・検索基盤

ドキュメントローダとは|タグを外すだけだと、306字のうち本文は36字だった

ドキュメントローダとは何をするのか抽出の仕方で何が変わるのか表はどう扱えばよいのか

HTMLからタグを外しただけだと、1件あたり306字が取れました。ところが本文は36字です。

残りは案内、広告、脚注、スクリプトです。500件すべてにノイズが混ざりました

この記事の要点

  • タグを外すだけだと306字で本文は36字
  • スクリプトを落としても219字
  • 本文の範囲だけ取れば62字
  • ノイズの混入は500件から0件

タグを外すだけだと、306字のうち本文は36字だった

抽出の仕方を4通り変えて測りました。取り出す範囲を絞らないと、本文よりノイズのほうが多くなります。

ドキュメントローダで抽出の仕方を変えると何が起きるのかを、実際に走らせて測りました。用意したのは社内ポータルを模したページ500件です。

各ページには本文のほかに、案内・パンくず・広告・脚注・スクリプト・見た目の指定を入れました。実際の社内サイトに近い形です。

javascript
const stripTags = (h) => h.replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim();

// タグを全部外すだけ
(h) => stripTags(h)

// 本文の範囲だけを取る
(h) => {
  const m = h.match(/<main[\s\S]*?<\/main>/i);
  return m ? stripTags(m[0]) : stripTags(h);
}
text
抽出の仕方                    取り出した文字数  本文が残った  ノイズが混ざった
タグを全部外すだけ                             306字     500 / 500         500 / 500
script と style を先に落とす                 219字     500 / 500         500 / 500
main の中だけを取る                           62字     500 / 500           0 / 500
main を取り、見出しも残す                        64字     500 / 500           0 / 500

本文そのものの長さ: 36字

上の表を見てください。タグを外すだけだと306字が取れます。本文は36字なので、9割近くがそれ以外です。

何が混ざっているか

text
  【タグを全部外すだけ】
    社内規程 .nav{color:#333}.footer{font-size:11px} var ga=1;function track(){console.log("view")…
  【script と style を先に落とす】
    社内規程 ホーム | 規程集 | 申請様式 | よくある質問 | 問い合わせ | サイトマップ ホーム &gt; 規程集 &gt; 出張旅費 出張旅費規程 宿泊費の上限は1泊120…
  【main の中だけを取る】
    出張旅費規程 宿泊費の上限は1泊12000円とする。超過分は自己負担とする。(第1条) 分からない点は総務課(内線1989)まで。

1つ目には見た目の指定とスクリプトがそのまま入っています。検索の対象としては雑音でしかありません。

2つ目でそれらは消えますが、案内の並びとパンくずが残ります。500件すべてに同じ語が入るので、検索の邪魔になります。

範囲を絞ると消える

本文の範囲を示す要素だけを取ると、62字になりました。ノイズの混入は500件から0件です。

残った62字には、本文36字に加えて見出しと問い合わせ先が入っています。本文と一緒に取りたい情報なので、これは残して構いません。

取り出す範囲を絞らないと、本文より雑音が多くなる。

タグを外すだけ本文36それ以外270306字スクリプトを落とす36183219字本文の範囲だけ362662字ページ500件での実測。ノイズが混ざったページ数は500件・500件・0件だった。
図1 ── 抽出の仕方ごとの文字数
出典Docs by LangChain「Knowledge base」2026-08-18 確認
Load content from a PDF, then split it into smaller chunks before indexing.
原文Docs by LangChain「Knowledge base」 この内容の有効期限2027-02-18

ドキュメントローダとは何をするのか

いろいろな形式の文書を読み込んで、文字と付随情報の形にそろえます。取り込みの最初の段です。

ドキュメントローダは、文書を読み込んで文字にそろえる処理です。PDF、HTML、表計算、電子メールなど、形式ごとに別々の読み取りが要ります。

そろえる先の形

読み込んだ結果は決まった形にそろえます。LangChainの説明では、文書の対象が持つ属性は本文・付随情報・任意の識別子の三つだと整理されています。

つまり本文だけでなく、どこから来たかも一緒に持ちます。あとから出典を示すときに使う情報です。

取り込みの順番

  1. 読み込む。形式ごとの読み取り
  2. 本文を取り出す。前の節で測った部分
  3. 塊に切る。検索できる大きさに分ける
  4. 索引に入れる。検索できる形にする

3番目について、同じ説明は関係する箇所が周りの文に薄められないよう、ページをさらに分けると述べています。2番目を飛ばすと、雑音ごと索引に入ります。

何を付随情報として持つか

  1. 出典。ファイル名、URL、ページ番号
  2. 更新日。古い文書を後回しにできる
  3. 公開の範囲。誰に見せてよい文書か
  4. 元の位置。塊が元文書のどこから来たか

4番目については、分割のたびに元の文字位置を付随情報として残す設定が用意されています。あとから元の場所に戻れるようにするためです。

余談 この計測での注意

使ったページは式で作った人工のHTMLです。実際のページはもっと崩れており、本文の範囲を示す要素がない場合もあります。ここで見せているのは、範囲を絞るかどうかで雑音がどれだけ変わるかという関係です。塊への切り方はチャンク分割の記事で扱っています。

出典Docs by LangChain「Knowledge base」2026-08-18 確認
Split pages further so relevant passages are not diluted by surrounding text.
原文Docs by LangChain「Knowledge base」 この内容の有効期限2027-02-18

表を含む文書は崩れやすい

表をそのまま文字にすると、行と列の対応が消えます。どの値がどの項目のものか分からなくなります。

ドキュメントローダで社内文書を読み込むと、表が多く含まれます。表は文字にした時点で構造が失われやすいので、別に扱う必要があります。

LangChainの説明はページ単位は検索には粗すぎることが多いと述べています。表を丸ごと1つとして扱うと、この状態になります。

text
【タグを外すだけ】
  区分 上限 備考 宿泊費 12000円 1泊あたり 日当 2000円 1日あたり 備品 5000円 事前承認が必要

【行と列を保つ】
  区分 | 上限 | 備考
  宿泊費 | 12000円 | 1泊あたり
  日当 | 2000円 | 1日あたり
  備品 | 5000円 | 事前承認が必要

【項目名と値を組にする】
  区分=宿泊費、上限=12000円、備考=1泊あたり
  区分=日当、上限=2000円、備考=1日あたり
  区分=備品、上限=5000円、備考=事前承認が必要

1つ目を見てください。表全体が1行になっています。人が読めば分かりますが、機械には区切りが見えません。

検索したときに何が起きるか

text
取り出し方              取れた行の文字数  含まれる金額の数  正しい答えだけか
タグを外すだけ                        57字              3個             いいえ
行と列を保つ                         18字              1個              はい
項目名と値を組にする                     23字              1個              はい

タグを外すだけの場合、取れた1行に金額が3個入っていました。12000円も5000円も一緒に付いてきます。

これを渡すと、どれが日当の上限なのかを答える側が判断することになります。間違える余地を残す形です。

構造を残す

行と列を保てば18字、項目名と値を組にすれば23字で、どちらも金額は1個だけです。

組にする形は少し長くなりますが、1行だけ切り出しても項目名が残ります。塊に分けたときに強くなります。

表は文字にした時点で、行と列の対応が消える。

充足 2 / 4本文の範囲を絞って取り出している絞らないと306字のうち本文は36字で、500件すべてに雑音が混ざる表の行と列を保っている1行にまとめると、日当を引いたのに金額が3個付いてくる取り込んだ文字列を目で見ていない見た目の指定やスクリプトが混ざっていても、件数だけでは気づけない出典や更新日を持たせていないあとから根拠を示せず、古い文書も見分けられないページ500件での実測にもとづく。本文の範囲だけを取ると、雑音の混入は0件になった。
図2 ── 取り込みで確かめる点検項目
出典Docs by LangChain「Knowledge base」2026-08-18 確認
A page is often too coarse for retrieval.
原文Docs by LangChain「Knowledge base」 この内容の有効期限2027-02-18

よくある質問

タグを外すだけでは駄目ですか
駄目です。この計測では500件すべてに案内や脚注が混ざり、1件あたり306字のうち本文は36字でした。
スクリプトを落とせば十分ですか
足りません。219字まで減りましたが、案内や広告や脚注は残り、ノイズの混入は500件のままでした。
どうすればよいのですか
本文の範囲を示す要素だけを取り出します。この計測ではノイズの混入が0件になりました。
表はどう扱えばよいですか
行と列を保ちます。タグを外すだけだと表全体が1行になり、他の区分の金額まで一緒に付いてきました。

まとめ

  • 文書を読み込んで文字にする処理
  • タグを外すだけだと本文は1割強
  • 本文の範囲を絞るとノイズが0件
  • 表は行と列を保つ

今日から始められること

  1. 実際に取り込んだ文字列を10件、目で見る
  2. 本文以外が何割を占めるか数える
  3. 本文の範囲を示す要素があるか確かめる
  4. 表を含む文書で、行が崩れていないか見る

実務で組んだドキュメントローダのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る