単語抽出ツール(6):単語抽出ツールの追加説明
前の記事に続いて、単語抽出ツールの追加について説明します。
5. 単語抽出ツールの追加説明
5.1。 OLE Automationを使用する理由
OLE Aumationはウィキペディアに次のように定義されています。
Microsoft Windowsアプリケーションのプログラミングでは、OLEオートメーション(OLE Automation、後で単に自動化に名前が変更される[1] [2])は、Microsoftが開発したプロセス間通信(IPC)メカニズムです。コンポーネントオブジェクトモデル(COM)のサブセットに基づいており、スクリプト言語(もともとはビジュアルベーシック)を介して使用されるように設計されていますが、現在はウィンドウ内のさまざまな言語で使用できます。
ソース: https://ja.wikipedia.org/wiki/OLE_自動化
Pythonでは、win32comパッケージを使用してOLE Automationが可能です。 MS-Officeアプリケーションを制御して目的の機能を実行できます。
単語抽出ツールでは、次の理由でOLE Aumationを使用しました。
- MS-Word、PowerPointを読み書きできる次の専用パッケージがありますが、わざと使用しませんでした。
- MS-Word:python-docx、python-docx2txt
- PowerPoint: python-pptx
- Excel:openpyxl、xlsxwriter、pyxlsb
- ほとんどの企業環境はDRMソフトウェアのインストールを強制しており、文書ファイルは暗号化されています。
- 専用パッケージを使用すると、暗号化されたファイルを読み取ることができません。
- pywin32パッケージでOLE Automationメソッドを使用すると、Officeプログラムを介してファイルを読み取ることができます。
- OLE Automationを使用すると、パフォーマンスは少し損なわれますが、結果を保証できます。
MS-Word、PowerPoint、Excelを制御するPythonコードについては、次の記事を参照してください。
- MS-Word Automation: 4.3.1。 get_doc_text関数
- PowerPoint Automation: 4.3.2._get_ppt_text_関数
- Excel Automation: 4.3.4._get_db_comment_text_関数
5.2。 Textファイルエンコーディング関連(UTF-8のみサポート)
- 入力テキストファイルのエンコーディングはUTF-8のみをサポートするようになっています。
- 入力ファイルのうち、textファイルがANSIエンコーディングの場合、cp949で非Unicodeエンコーディングなので、次のエラーが発生します。
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 5: invalid start byte
- 実行時に同様のエラーが発生した場合は、textファイルをUTF-8として保存して再実行してください。
5.3。 multi processingの使用理由
前の記事単語抽出ツール(4):単語抽出ツールソースコード説明(1)「私はmulti processingを使ったコードについて説明しました。
4.2.3。 Multi processingでget_file_textを実行する
4.2.4。 Multi processingでget_word_listを実行する
最初にこのツールを作成したときは、テキスト抽出と単語抽出の両方がシングルプロセスでした。 2021年初頭にK社プロジェクトで初めて使用したとき、約16万個のcolumn commentから標準単語候補群を抽出する作業をノートパソコン(CPU i5、16GB Ram)で実行したとき、約20時間かかった。
テストを含む何度も繰り返し実行してみると、実行時間を短縮する必要が生じた。並列処理のためにスレッドを使用しようとグーリングをしてみると、PythonではGIL(Global Interpreter Lock)の概念があり、マルチスレッド化よりもマルチプロセス処理が適していると判断した。
少しのコード修正でテキスト抽出と単語抽出の両方にマルチプロセッシングを適用し、実行時に並列度を指定できる argument(multi_process_count) も作っておいた。
multi_process_countを8に指定して実行すると、20時間かかった作業が約40分程度に短縮され、十分に効果があった。
5.4。複合語抽出に関する注意事項
Mecabの主な機能のうち、nouns、pos、morphsの説明は次のとおりです。
機能 | 説明 |
nouns(text) | textを構文解析し、名詞(noun)のみを抽出してlistを返す |
pos(text) | textを構文解析し(型、品詞タグ)型のリストを返す |
morphs(text) | textを構文解析し、形態素のみを抽出してlistを返す |
各関数の実行結果は、以下の入力文字列の例と同じです。
*入力文字列:ユーザーは機能要件と非機能要件を定義します。
機能 | 実行結果 |
nouns(text) | [「使用」、「機能」、「要求」、「事項」、「機能」、「要求」、「事項」、「定義」] |
pos(text) | [('使用'、'NNG')、('文字'、'XSN')、('は'、'JX')、('機能'、'NNG')、('敵'、'XSN') 、('要求'、'NNG')、('事項'、'NNG')、('と'、'JC')、('非'、'XPN')、('機能'、'NNG') 、('敵'、'XSN')、('要求'、'NNG')、('事項'、'NNG')、('を'、'JKO')、('定義'、'NNG') , ('する', 'XSV+EF'), ('.', 'SF')] |
morphs(text) | [「使用」、「文字」、「は」、「機能」、「敵」、「要求」、「事項」、「課」、「非」、「機能」、「敵」、「要求」、「事項'、'を'、'定義'、'する'、'.'] |
*入力文字列:データの標準化は、データアーキテクチャの構築の重要な領域です。
機能 | 実行結果 |
nouns(text) | ['データ'、'標準'、'データ'、'アーキテクチャ'、'構築'、'重要'、'エリア'] |
pos(text) | [('データ', 'NNG'), ('標準', 'NNG'), ('火', 'XSN'), ('は', 'JX'), ('データ', 'NNG') , ('アーキテクチャ', 'NNG'), ('構築', 'NNG'), ('の', 'JKG'), ('重要', 'NNG'), ('韓', 'XSA+ETM ')、('エリア'、'NNG')、('イ'、'VCP')、('ダ'、'EF')、('.'、'SF')] |
morphs(text) | [「データ」、「標準」、「火」、「は」、「データ」、「アーキテクチャ」、「構築」、「の」、「重要」、「漢」、「領域」、「イ」、「すべて', '.'] |
単語抽出ツールは、nouns関数を直接使用せずにpos関数の結果に正規表現(Regula Expression)を適用して単語を抽出します。以下は正規表現のパターンの説明です。
正規表現の使用パターン: '(NNP/|NNG/)+(XSN/)*|(XPN/)+(NNP/|NNG/)+(XSN/)*|(SL/)+'
- このパターンは次の3つのうちの1つを見つけます。
- (NNP/|NNG/)+(XSN/)*:(固有名詞または一般名詞)1つ以上(必須)+名詞派生サフィックス0個以上(オプション)
- (XPN/)+(NNP/|NNG/)+(XSN/)*: 1つ以上の体言接頭辞 (必須)+ (固有名詞または一般名詞) 1 個以上 (必須) + 名詞派生サフィックス 0 個以上 (オプション) )
- (SL/)+: 外国語 1 つ以上 (必須)
nouns(text) を呼び出して名詞のみを抽出する場合と正規表現を適用して複合語をさらに抽出する場合の例は次のとおりです。
*入力文字列:ユーザーは機能要件と非機能要件を定義します。
機能 | 実行結果 |
名詞のみ抽出 nouns(text) | 使用、機能、ニーズ、事項、機能、ニーズ、事項、定義 |
正規表現の適用 | 使用、機能、要求、事項、機能、要求、事項、定義、ユーザー[複合語]、機能的[複合語]、要件[複合語]、非機能的[複合語]、要件[複合語] |
*入力文字列:データの標準化は、データアーキテクチャの構築の重要な領域です。
機能 | 実行結果 |
名詞のみ抽出 nouns(text) | データ、標準、データ、アーキテクチャ、構築、重要、領域 |
正規表現の適用 | データ、標準、データ、アーキテクチャ、構築、重要、領域、データ標準化[複合語]、データアーキテクチャ構築[複合語] |
複合語をさらに抽出する理由は、標準単語辞書構築初期に複合語を標準として登録するかを検討できるようにして、複合語が後で追加される場合の問題を予め防止するためである。
複合語が後で追加されると、その複合語を構成する個々の単語を使用する標準用語の物理名が変更される可能性があり、その標準用語を使用してすでにデータベースのテーブル名と列名まで変更する必要があります。
もちろん、すでに生成した標準用語の物理名は変更せず、今後生成する標準用語の物理名だけを変更する方法もあるが、標準用語論理名と物理名の一貫性を維持するために、すでに生成した標準用語の物理名を変更することが長期的な観点からお勧めします。
すでに作成した標準用語の物理名の変更は簡単に決定する問題ではありません。開発がすでに行われた時点であれば、名称が変更されたカラムを参照するソースコードへの変更まで進めなければならない。追加のスケジュールが必要であり、複数の利害関係者が参加するプロジェクトであれば責任素材を問うことができる。
変更されるソースコードの量が多ければプロジェクトに大きな影響を与えることになりかなり困難になる可能性があることを勘案すれば、標準辞書を構築する初期段階に複合語の検討は必ず必要な過程である。
その影響度をよく理解しながらも複合語候補群を識別する方法がなかったが、この単語抽出ツールが適切な方法を提供する。
最適ではないかもしれませんが、現時点では代替としては十分であると考えています。
5.5。形態素分析器 品詞種類
前の記事 単語抽出ツール(5):単語抽出ツールソースコード説明(2) の 4.4._get_word_list_関数 から次の内容があった。
- 行64:pos関数で形態素分析器の品詞タグ付けを実行します。品詞タギングに関する内容は別途整理する。
- 品詞タグ付け関数posは、入力文字列を品詞単位に分解し、各単位がどの品詞であるかを表示した文字列を返します。
- たとえば、textが「ユーザーは機能的要件と非機能的要件を定義します。」の場合、pos関数の実行結果は「[(「使用」、「NNG」)、 ')、('は'、'JX')、('機能'、'NNG')、('敵'、'XSN')、('要求'、'NNG')、('仕様'、'NNG ')、('と'、'JC')、('非'、'XPN')、('機能'、'NNG')、('敵'、'XSN')、('要求'、'NNG ')、('仕様'、'NNG')、('を'、'JKO')、('定義'、'NNG')、('する'、'XSV+EF')、('.', 'SF')]'だ。
- 上記の例でタグ付けされた品詞のうち、「NNG」は一般名詞、「XSN」は名詞派生接尾辞、「JX」はアシスタント、「JC」は接続調査、「XPN」は体言接頭辞、「JKO」は目的格調査、 XSV+EF'は動詞派生接尾辞+終結語、'SF'はピリオド/疑問符/感嘆符を意味する。
Mecabが提供する品詞タグは、次の文書にまとめられています。
上の文書内容を抜粋して以下にまとめておく。
実質の美有無 | 大分類(5言+その他) | 世宗品詞タグ | mecab-ko-dic 品詞タグ | ||
タグ | 説明 | タグ | 説明 | ||
実質形態 | 体言 | NNG | 一般名詞 | NNG | 一般名詞 |
NNP | 固有名詞 | NNP | 固有名詞 | ||
NNB | 依存名詞 | NNB | 依存名詞 | ||
NNBC | 単位を表す名詞 | ||||
NR | 調査 | NR | 調査 | ||
NP | 代名詞 | NP | 代名詞 | ||
龍言 | VV | 動詞 | VV | 動詞 | |
VA | 形容詞 | VA | 形容詞 | ||
VX | 補助用言 | VX | 補助用言 | ||
VCP | 肯定の指定 | VCP | 肯定の指定 | ||
VCN | 否定指定者 | VCN | 否定指定者 | ||
修飾言 | MM | 管状士 | MM | 管状士 | |
MAG | 一般副詞 | MAG | 一般副詞 | ||
MAJ | 接続副詞 | MAJ | 接続副詞 | ||
独立語 | IC | 感嘆者 | IC | 感嘆者 | |
形式形態 | 関係言 | JKS | 走撃調査 | JKS | 走撃調査 |
JKC | 保険調査 | JKC | 保険調査 | ||
JKG | 管型格調査 | JKG | 管型格調査 | ||
JKO | 目的格調査 | JKO | 目的格調査 | ||
JKB | 副射撃調査 | JKB | 副射撃調査 | ||
JKV | 呼撃調査 | JKV | 呼撃調査 | ||
JKQ | 引用調査 | JKQ | 引用調査 | ||
JX | アシスタント | JX | アシスタント | ||
JC | 接続調査 | JC | 接続調査 | ||
言葉の母語 | EP | 言葉の母語 | EP | 言葉の母語 | |
語句母 | EF | 終結母 | EF | 終結母 | |
EC | 接続母 | EC | 接続母 | ||
ETN | 名詞型全性母語 | ETN | 名詞型全性母語 | ||
ETM | 管状の全性マザー | ETM | 管状の全性マザー | ||
プレフィックス | XPN | チェオンプレフィックス | XPN | チェオンプレフィックス | |
サフィックス | XSN | 名詞派生サフィックス | XSN | 名詞派生サフィックス | |
XSV | 動詞派生サフィックス | XSV | 動詞派生サフィックス | ||
XSA | 形容詞派生サフィックス | XSA | 形容詞派生サフィックス | ||
語根 | XR | 語根 | XR | 語根 | |
サイン | SF | ピリオド, 疑問符, 感嘆符 | SF | ピリオド, 疑問符, 感嘆符 | |
SE | 省略記号 | SE | 省略記号 … | ||
SS | 引用符,かっこ,ストライプ | SSO | 開く括弧 (, [ | ||
SSC | 閉じ括弧 ), ] | ||||
SP | カンマ,ガウンデット,コロン,雨 | SC | 区切り文字 、・/: | ||
SO | 足跡(波,隠す,落ちる) | SY | |||
SW | その他記号 (論理数学記号,通貨記号) | ||||
ハングル以外 | SL | 外国語 | SL | 外国語 | |
SH | 漢字 | SH | 漢字 | ||
SN | 数字 | SN | 数字 |
以上で単語抽出ツールについての書き込みを完了します。機能を追加または改善すれば別の文を作成する予定だ。
<< 関連記事のリスト >>