HTMLからタグを外しただけだと、1件あたり306字が取れました。ところが本文は36字です。
残りは案内、広告、脚注、スクリプトです。500件すべてにノイズが混ざりました。
抽出の仕方を4通り変えて測りました。取り出す範囲を絞らないと、本文よりノイズのほうが多くなります。
ドキュメントローダで抽出の仕方を変えると何が起きるのかを、実際に走らせて測りました。用意したのは社内ポータルを模したページ500件です。
各ページには本文のほかに、案内・パンくず・広告・脚注・スクリプト・見た目の指定を入れました。実際の社内サイトに近い形です。
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);
}
抽出の仕方 取り出した文字数 本文が残った ノイズが混ざった タグを全部外すだけ 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割近くがそれ以外です。
【タグを全部外すだけ】
社内規程 .nav{color:#333}.footer{font-size:11px} var ga=1;function track(){console.log("view")…
【script と style を先に落とす】
社内規程 ホーム | 規程集 | 申請様式 | よくある質問 | 問い合わせ | サイトマップ ホーム > 規程集 > 出張旅費 出張旅費規程 宿泊費の上限は1泊120…
【main の中だけを取る】
出張旅費規程 宿泊費の上限は1泊12000円とする。超過分は自己負担とする。(第1条) 分からない点は総務課(内線1989)まで。
1つ目には見た目の指定とスクリプトがそのまま入っています。検索の対象としては雑音でしかありません。
2つ目でそれらは消えますが、案内の並びとパンくずが残ります。500件すべてに同じ語が入るので、検索の邪魔になります。
本文の範囲を示す要素だけを取ると、62字になりました。ノイズの混入は500件から0件です。
残った62字には、本文36字に加えて見出しと問い合わせ先が入っています。本文と一緒に取りたい情報なので、これは残して構いません。
取り出す範囲を絞らないと、本文より雑音が多くなる。
Load content from a PDF, then split it into smaller chunks before indexing.原文Docs by LangChain「Knowledge base」 この内容の有効期限2027-02-18
いろいろな形式の文書を読み込んで、文字と付随情報の形にそろえます。取り込みの最初の段です。
ドキュメントローダは、文書を読み込んで文字にそろえる処理です。PDF、HTML、表計算、電子メールなど、形式ごとに別々の読み取りが要ります。
読み込んだ結果は決まった形にそろえます。LangChainの説明では、文書の対象が持つ属性は本文・付随情報・任意の識別子の三つだと整理されています。
つまり本文だけでなく、どこから来たかも一緒に持ちます。あとから出典を示すときに使う情報です。
3番目について、同じ説明は関係する箇所が周りの文に薄められないよう、ページをさらに分けると述べています。2番目を飛ばすと、雑音ごと索引に入ります。
4番目については、分割のたびに元の文字位置を付随情報として残す設定が用意されています。あとから元の場所に戻れるようにするためです。
使ったページは式で作った人工のHTMLです。実際のページはもっと崩れており、本文の範囲を示す要素がない場合もあります。ここで見せているのは、範囲を絞るかどうかで雑音がどれだけ変わるかという関係です。塊への切り方はチャンク分割の記事で扱っています。
Split pages further so relevant passages are not diluted by surrounding text.原文Docs by LangChain「Knowledge base」 この内容の有効期限2027-02-18
表をそのまま文字にすると、行と列の対応が消えます。どの値がどの項目のものか分からなくなります。
ドキュメントローダで社内文書を読み込むと、表が多く含まれます。表は文字にした時点で構造が失われやすいので、別に扱う必要があります。
LangChainの説明はページ単位は検索には粗すぎることが多いと述べています。表を丸ごと1つとして扱うと、この状態になります。
【タグを外すだけ】 区分 上限 備考 宿泊費 12000円 1泊あたり 日当 2000円 1日あたり 備品 5000円 事前承認が必要 【行と列を保つ】 区分 | 上限 | 備考 宿泊費 | 12000円 | 1泊あたり 日当 | 2000円 | 1日あたり 備品 | 5000円 | 事前承認が必要 【項目名と値を組にする】 区分=宿泊費、上限=12000円、備考=1泊あたり 区分=日当、上限=2000円、備考=1日あたり 区分=備品、上限=5000円、備考=事前承認が必要
1つ目を見てください。表全体が1行になっています。人が読めば分かりますが、機械には区切りが見えません。
取り出し方 取れた行の文字数 含まれる金額の数 正しい答えだけか タグを外すだけ 57字 3個 いいえ 行と列を保つ 18字 1個 はい 項目名と値を組にする 23字 1個 はい
タグを外すだけの場合、取れた1行に金額が3個入っていました。12000円も5000円も一緒に付いてきます。
これを渡すと、どれが日当の上限なのかを答える側が判断することになります。間違える余地を残す形です。
行と列を保てば18字、項目名と値を組にすれば23字で、どちらも金額は1個だけです。
組にする形は少し長くなりますが、1行だけ切り出しても項目名が残ります。塊に分けたときに強くなります。
表は文字にした時点で、行と列の対応が消える。
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る