このプロジェクトでは、設計書などのドキュメントに含まれる曖昧な語句を自動検出するPythonアプリケーションを開発しました。
何百件、何千件とあるドキュメントから「予定」や「多分」などの曖昧な語句を見つけ出すことで、ドキュメントの品質向上を支援します。
設計書などのドキュメントに曖昧な語句「予定」や「多分」が含まれていると品質が下がる問題がありました。
しかし、何百件、何千件とあるドキュメントからそれらを一つ一つ見つけ出すのは砂漠から針を見つけるような作業でした。
そこで、Pythonを使用して、ファイル群を入れれば語句を見つけ出すアプリケーションの開発に着手しました。
自動化により、人的ミスを防ぎ、効率的な品質管理を実現することを目指しました。
以下のファイル形式に対応するよう設計しました:
- **Officeアプリケーション**: Excel, Word, PowerPoint
- **テキストファイル**: txtファイル
- **その他**: 将来的な拡張性も考慮
各ファイル形式ごとに読み込みクラスを分離し、条件分岐による柔軟な処理を実装しました。
**処理フロー:**
1. ファイル形式の判定(Excel、Word、PowerPoint、txt)
2. 各形式に応じた読み込みクラスの呼び出し
3. ドキュメントの1行1行または1セル1セルずつの読み込み
4. 検索メソッドによる語句の検出
5. 結果の整形と出力
それぞれのデータをPandasライブラリを使用して整形や結合を行いました。
目当ての語句を見つけたら、以下の情報を記録します:
- **語句の位置**: どのファイルの何行目(または何セル)
- **ファイル名**: 対象ファイルの特定
- **語句の内容**: 検出された曖昧な語句
- **ハイライト**: 赤文字での強調表示
検索結果をExcelファイルとして出力し、以下の情報を提供しました:
- 検出された語句の一覧
- ファイル名と行番号
- 語句の前後の文脈
- 視覚的なハイライト表示
最初の読み込み時間は、マシンにもよりますが5000ファイルに対して約10分かかっていました。
大量のファイル処理において、処理時間の短縮が重要な課題でした。
取り出したデータをset型で整理することで効率化を図りました。
その結果、処理時間を7分台にまで短縮することができました。
**なぜset型が高速なのか:**
```python
word_list = ['予定', '多分', 'おそらく', 'たぶん', '予定', '多分']
target_word = '予定'
for word in word_list:
if word == target_word:
print(f"見つかりました: {word}")
word_set = {'予定', '多分', 'おそらく', 'たぶん'}
target_word = '予定'
if target_word in word_set:
print(f"見つかりました: {target_word}")
```
**最適化の効果:**
- **リスト型**: 要素数に比例して検索時間が増加(O(n))
- **set型**: 要素数に関係なく一定時間で検索(O(1))
- **結果**: 大量データ処理時の劇的な高速化
各メソッドに対してPytestを使用したテストを実装しました。
**テスト項目:**
- ファイル読み込み機能のテスト
- 検索アルゴリズムのテスト
- データ整形機能のテスト
- 結果出力機能のテスト
- エラーハンドリングのテスト
社内ツールとして配布するため、Tkinterを使用して簡単なUIを設計しました。
**UI機能:**
- ファイル選択ダイアログ
- 検索語句の入力フィールド
- 処理進捗の表示
- 結果のプレビュー機能
- エクスポート機能
- **プログラミング言語**: Python
- **データ処理**: Pandas
- **テストフレームワーク**: Pytest
- **UI**: Tkinter
- **ファイル処理**: openpyxl, python-docx, python-pptx
大量のドキュメントから曖昧な語句を効率的に検出するシステムを構築できました。
set型による最適化により、処理時間を約30%短縮することができ、アルゴリズムの重要性を実感しました。
また、社内ツールとしての配布により、実際の業務での品質向上に貢献できました。
**技術的な学び:**
- データ構造の選択による性能への影響
- 大規模ファイル処理の最適化手法
- テスト駆動開発の重要性
- ユーザビリティを考慮したUI設計