メインコンテンツへスキップ
見出し画像

【Pythonチャレンジ#6】社内版Googleを作りたい!共有フォルダのPDFを“中身まで検索”できるようにしてみた!

    みなさん、こんにちは!iです。

    今、Pythonに興味があり、

    「AIを使いながら、思いついたものを実際に作ってみる」

    というチャレンジをしています。

    そして、チャレンジしたことはnoteに載せていきます。

    前回までは、会社の仕訳日記帳PDFを検索できるWebアプリを作っていました。

    そして今回、ふと思いました。

    「これ、仕訳日記帳だけじゃなくて、社内のデータ全部検索できたら便利じゃない?」

    ……ということで。

    今回のPythonチャレンジは、

    「社内版Google」を作ってみる。

    です。

    いや、急に話がデカい。

    でも、とりあえず作ってみます。

    画像
    今回の記事、これが全てです!

    ちなみに、風まかせ文芸部初の、ショートショートコンテスト開催中です!大賞の方には、2,000円分のnoteサポートを贈ります!参加費は500円で、その中の100円は、世界の子供達に本を届けるために使います!ぜひ覗いてみてください!

    あと、こんな物語集も発売しているので、気になる方はぜひ!!↓



    社内の「あの資料どこだっけ?」をなくしたい

    会社で仕事をしていると、こんなことがあります。

    「あの見積書、どこにあったっけ?」

    「前に作った点検資料ってどこ?」

    「共有フォルダのどこかにあるはずなんだけど……」

    「Google Driveだったかな?」

    そしてフォルダを開く。

    またフォルダを開く。

    さらにフォルダを開く。

    ない。

    戻る。

    違うフォルダを開く。

    ない。

    これ、地味に時間がかかります。

    だったら、

    社内にある資料を、Google検索みたいに一発で探せないのか?

    と思いました。

    さらに最終的には、

    「○○施設の空調設備について、過去の資料を探して」

    とAIに聞いたら、

    「このPDFに書いてあります」

    「このExcelにも関連情報があります」

    「PDFの1ページ目です」

    みたいに答えてくれたら最高です。

    ということで、ChatGPT(チャッピー)に相談。

    すると、

    「できます」

    とのこと。

    よし。

    作ろう。

    最近このパターンが増えてきました。


    まずは新しいプロジェクトを作る

    今回は、これまで作っていた仕訳日記帳検索アプリとは別物として作ることにしました。

    新しく、

    company-ai-search

    というフォルダを作成。

    さらに、その中に、

    backend

    を作りました。

    構成としては、

    Desktop
    ├─ diary-app
    │  └─ 仕訳日記帳検索アプリ
    │
    └─ company-ai-search
       └─ 今回の社内検索AI

    という感じです。

    仕訳検索アプリを壊したら泣くので、ちゃんと分けます。

    Pythonの仮想環境も作成。

    python -m venv .venv

    そしてFastAPIなどをインストール。

    今回も、

    Python + FastAPI

    を中心に作っていきます。


    とりあえず「社内検索AI 起動成功!」

    まずは、ものすごくシンプルな main.py を作りました。

    そして、

    uvicorn main:app --reload --port 8001

    で起動。

    ブラウザを開くと……

    「社内検索AI 起動成功!」

    出た!!

    まだ何も検索できない。

    AIでもない。

    でも、

    名前だけはめちゃくちゃ強そうです。


    共有フォルダを検索してみる

    次はいよいよ、会社の共有フォルダにつなぎます。

    ただし、いきなり会社の巨大な共有フォルダ全部を検索すると、かなり時間がかかりそう。

    そこで、テスト用の小さな共有フォルダを作って試すことにしました。

    最初に考えたのは、

    検索するたびに共有フォルダの中を全部探せばいいんじゃない?

    という方法。

    でも、これはダメそう。

    会社の共有フォルダには大量のデータがあります。

    毎回、

    検索!
    ↓
    共有フォルダ全部確認!
    ↓
    PDF確認!
    ↓
    Excel確認!
    ↓
    Word確認!
    ↓
    ……

    なんてやっていたら、

    検索結果が出る頃にはコーヒーが冷めてしまいます。

    そこで登場したのが、

    「インデックス」

    です。


    先にファイル情報を覚えておく

    考え方はシンプルです。

    共有フォルダを毎回探すのではなく、

    最初に一度調べて、検索用データベースを作っておく。

    今回はSQLiteを使いました。

    イメージは、

    社内共有フォルダ
          ↓
    最初にスキャン
          ↓
    検索用データベース
          ↓
    検索!
          ↓
    一瞬で結果を返す

    という感じ。

    build_index.py を作って実行すると……

    インデックス作成完了!
    登録ファイル数: 1
    エラー数: 0

    出た!

    まずは共有フォルダに置いていた、

    テスト.txt

    というファイルを認識してくれました。

    そして、

    「テスト」

    と検索。

    結果は、

    count: 1

    成功!

    共有フォルダにあるファイルを、Pythonから検索できました。


    でも、ファイル名だけ検索できても面白くない

    ここで次の欲が出ます。

    例えば、

    テスト.txt

    というファイル。

    これを「空調設備」で検索しても、ファイル名には「空調設備」と書いてありません。

    当然、普通のファイル名検索では見つかりません。

    そこで、

    ファイルの“中身”まで検索できるようにします。

    テストファイルの中に、

    これは社内検索AIのテストです。
    空調設備の更新を検討しています。
    来年度に見積書を作成する予定です。

    と書きました。

    そしてPython側を改造。

    ファイルの本文もSQLiteに登録します。

    結果……

    登録: テスト.txt
    本文: 52文字

    よし。

    そして、

    「空調設備」

    で検索。

    すると……

    テスト.txtが出てきた!!

    しかも、

    「空調設備の更新を検討しています。来年度に見積書を……」

    と、検索した言葉の周辺文章まで表示されました。

    これはちょっと感動。

    ファイル名ではなく、

    「中に何が書いてあるか」で探せるようになりました。


    次はPDFだ!

    TXTができたので、次は本命。

    PDFです。

    会社の資料ってPDFが多い。

    そこで今回は、テスト用に「AI業務導入 要件定義・ヒアリングシート」というPDFを共有フォルダへ入れました。

    このPDFには、

    • 業務の現状と課題

    • AIへの期待と役割

    • 入力と出力

    • 制約・リスク・セキュリティ

    などの項目があります。 AI要件定義ヒアリングシート

    Pythonに pypdf を追加して、PDFの文章を読み取れるようにしました。

    さらに今回は、

    「PDFの何ページに書いてあったのか」

    まで記録することにしました。

    将来的にAIが、

    「この回答の根拠は○○資料の3ページ目です」

    と言えるようにするためです。

    そしてインデックスを作り直すと……

    インデックス作成完了!
    登録ファイル数: 2
    本文登録数: 2
    エラー数: 0

    きた。


    「顧客機密データ」で検索してみる

    ここで実験です。

    PDFのファイル名は、

    「AI要件定義ヒアリングシート」

    です。

    つまり、ファイル名に、

    「顧客機密データ」

    なんて言葉は入っていません。

    でもPDF本文には、「個人情報や顧客機密データが含まれる」という項目があります。 AI要件定義ヒアリングシート

    そこで、

    「顧客機密データ」

    で検索!

    結果は……

    1件!!

    そして、

    AI要件定義ヒアリングシート.pdf
    
    1ページ
    
    「扱うデータの機密性:
    公開情報のみ
    社外秘情報が含まれる
    個人情報や顧客機密データが含まれる……」

    と表示されました。

    できた!!!

    これはもう、単純なファイル名検索ではありません。

    共有フォルダ内のPDFを、中に書かれている文章から検索できています。


    今回できたもの

    まだ見た目は開発用の画面です。

    でも裏側では、

    社内共有フォルダ
          ↓
    Pythonでファイルを取得
          ↓
    PDF・TXTから文章を抽出
          ↓
    SQLiteにインデックス化
          ↓
    FastAPI
          ↓
    キーワード検索
          ↓
    該当ファイル
    +
    ページ番号
    +
    該当文章

    というところまで動きました。

    これ……

    ちゃんと育てたら結構すごいものになるんじゃないか?

    と思っています。


    ここから「社内版Google」に近づけていく

    もちろん、まだまだです。

    今はTXTとPDFだけ。

    これから、

    Word、Excel、PowerPoint

    なども検索できるようにしたい。

    さらに、

    Google Drive

    も検索対象にしたい。

    そして最終的には、ただキーワードを検索するだけではなく、

    「空調設備の更新を検討している案件を探して」

    とか、

    「○○について過去にどんな提案をしている?」

    みたいに普通の文章でAIに質問する。

    するとAIが社内資料を探して、

    「関連する資料が3件あります。」

    「○○PDFの5ページに更新推奨の記載があります。」

    「こちらのExcelには見積情報があります。」

    と答えてくれる。

    そして、

    元ファイルをクリックして確認できる。

    ここまで作れたら面白い。


    「探す仕事」をAIに任せたい

    今回作っていて思ったのは、

    AIって文章を書いたり画像を作ったりするだけじゃなくて、

    「会社の中にすでにある情報を見つける」

    という使い方も、かなり大きいんじゃないかということです。

    新しい情報を作る前に、

    そもそも会社の中に答えがある。

    でも、

    どこにあるのか分からない。

    だったらAIに探してもらえばいい。

    そんなものを作ってみたいと思います。

    ということで今回は、

    共有フォルダのPDFを“本文から検索する”ところまで成功!

    次回は、

    Word・Excel・PowerPointにも手を伸ばしてみようと思います。

    社内版Google……

    本当に作れるのか。

    まだまだ続きます。

    #Python
    #Python初心者
    #Pythonチャレンジ
    #プログラミング
    #AI
    #生成AI
    #ChatGPT
    #バイブコーディング
    #業務改善
    #DX
    #社内AI
    #社内検索
    #AI活用
    #個人開発

     
     

    i

     
     
    「余白づくり」をテーマに発信。時間の整え方、AI活用、創作の試行錯誤を通して、やりたいことに集中できる暮らしを探っています。AIと創作と珈琲。

    あなたへのおすすめ