単語抽出ツール(6):単語抽出ツールの追加説明

前の記事に続いて、単語抽出ツールの追加について説明します。

単語抽出ツール(5):単語抽出ツールソースコード説明(2)

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 Automation using Python win32com package
OLE Automation using Python win32com package

単語抽出ツールでは、次の理由で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コードについては、次の記事を参照してください。

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が提供する品詞タグは、次の文書にまとめられています。

https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-nXeRF6D80udfcwY/edit#gid=589544265

上の文書内容を抜粋して以下にまとめておく。

実質の美有無大分類(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数字

以上で単語抽出ツールについての書き込みを完了します。機能を追加または改善すれば別の文を作成する予定だ。


<< 関連記事のリスト >>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ja日本語