WASABI MARU Logo
WASABI MARU Logo

Python検索ツール開発

Python検索ツール開発

Python検索ツール開発プロジェクト


このプロジェクトでは、設計書などのドキュメントに含まれる曖昧な語句を自動検出するPythonアプリケーションを開発しました。

何百件、何千件とあるドキュメントから「予定」や「多分」などの曖昧な語句を見つけ出すことで、ドキュメントの品質向上を支援します。


プロジェクトの背景


課題の特定

設計書などのドキュメントに曖昧な語句「予定」や「多分」が含まれていると品質が下がる問題がありました。

しかし、何百件、何千件とあるドキュメントからそれらを一つ一つ見つけ出すのは砂漠から針を見つけるような作業でした。


解決策の提案

そこで、Pythonを使用して、ファイル群を入れれば語句を見つけ出すアプリケーションの開発に着手しました。

自動化により、人的ミスを防ぎ、効率的な品質管理を実現することを目指しました。


システム設計


対象ファイル形式

以下のファイル形式に対応するよう設計しました:


- **Officeアプリケーション**: Excel, Word, PowerPoint

- **テキストファイル**: txtファイル

- **その他**: 将来的な拡張性も考慮


アーキテクチャ設計

各ファイル形式ごとに読み込みクラスを分離し、条件分岐による柔軟な処理を実装しました。


**処理フロー:**

1. ファイル形式の判定(Excel、Word、PowerPoint、txt)

2. 各形式に応じた読み込みクラスの呼び出し

3. ドキュメントの1行1行または1セル1セルずつの読み込み

4. 検索メソッドによる語句の検出

5. 結果の整形と出力


技術的な実装


データ処理とPandasライブラリの活用

それぞれのデータをPandasライブラリを使用して整形や結合を行いました。

目当ての語句を見つけたら、以下の情報を記録します:


- **語句の位置**: どのファイルの何行目(または何セル)

- **ファイル名**: 対象ファイルの特定

- **語句の内容**: 検出された曖昧な語句

- **ハイライト**: 赤文字での強調表示


結果出力

検索結果をExcelファイルとして出力し、以下の情報を提供しました:


- 検出された語句の一覧

- ファイル名と行番号

- 語句の前後の文脈

- 視覚的なハイライト表示


パフォーマンス最適化


初期の課題

最初の読み込み時間は、マシンにもよりますが5000ファイルに対して約10分かかっていました。

大量のファイル処理において、処理時間の短縮が重要な課題でした。


最適化の実装

取り出したデータをset型で整理することで効率化を図りました。

その結果、処理時間を7分台にまで短縮することができました。


set型による最適化の仕組み


**なぜset型が高速なのか:**


```python

リスト型での検索(遅い)

word_list = ['予定', '多分', 'おそらく', 'たぶん', '予定', '多分']

target_word = '予定'


線形検索:O(n)の時間計算量

for word in word_list:

if word == target_word:

print(f"見つかりました: {word}")


set型での検索(高速)

word_set = {'予定', '多分', 'おそらく', 'たぶん'}

target_word = '予定'


ハッシュ検索:O(1)の時間計算量

if target_word in word_set:

print(f"見つかりました: {target_word}")

```


**最適化の効果:**

- **リスト型**: 要素数に比例して検索時間が増加(O(n))

- **set型**: 要素数に関係なく一定時間で検索(O(1))

- **結果**: 大量データ処理時の劇的な高速化


テスト実装


Pytestを使用したテスト設計

各メソッドに対してPytestを使用したテストを実装しました。


**テスト項目:**

- ファイル読み込み機能のテスト

- 検索アルゴリズムのテスト

- データ整形機能のテスト

- 結果出力機能のテスト

- エラーハンドリングのテスト


ユーザーインターフェース


TkinterによるUI設計

社内ツールとして配布するため、Tkinterを使用して簡単なUIを設計しました。


**UI機能:**

- ファイル選択ダイアログ

- 検索語句の入力フィールド

- 処理進捗の表示

- 結果のプレビュー機能

- エクスポート機能


使用技術

- **プログラミング言語**: Python

- **データ処理**: Pandas

- **テストフレームワーク**: Pytest

- **UI**: Tkinter

- **ファイル処理**: openpyxl, python-docx, python-pptx


成果と学び

大量のドキュメントから曖昧な語句を効率的に検出するシステムを構築できました。

set型による最適化により、処理時間を約30%短縮することができ、アルゴリズムの重要性を実感しました。

また、社内ツールとしての配布により、実際の業務での品質向上に貢献できました。


**技術的な学び:**

- データ構造の選択による性能への影響

- 大規模ファイル処理の最適化手法

- テスト駆動開発の重要性

- ユーザビリティを考慮したUI設計