データ標準チェックツール_4。
データ標準チェックツール別添内容だ。属性名の数字Suffixに対する処理、標準単語辞書Simulation方法、標準チェック対象属性の参照情報、ライセンス、VBAコードに関する内容を確認することができる。前の記事で続く内容だ。
4. データ標準チェックツール 別添
4.1。属性名の数字Suffixの処理
属性名に数字Suffix(後位数字)がある場合、その数字を除いて標準用語辞書または標準単語辞書を探索する。数字Suffixは、検索された標準用語または標準単語の組み合わせの結果の後に追加されます。
上の図では、属性「個人対象かどうか1」の物理名は「PERSN_TGT_YN1」として生成されます。属性名終端語は正常に「不在」と識別した。
属性名の数字Suffixの処理ロジックは次のとおりです。
- 点検対象属性名の後から連続した数字(a)のみ探して保管し、その数字を削除して点検
- 点検結果「標準単語論理名の組み合わせ」、「標準単語物理名の組み合わせ」に保管した数字aを右側に付ける
4.2。標準単語辞書シミュレーション方法
単語物理名が決まっていない状態で入力属性名に対する単語の組み合わせが成功するか、つまり標準用語で登録できるかを確認するために、「標準単語辞書」シートに論理名を登録し、物理名は「(」+論理名+ “)”で構成してシミュレーションすることができる。この場合、標準点検結果の「標準単語物理名の組み合わせ」項目は緑色で表示される。
標準点検結果で「単語辞書に追加」ボタンをクリックすると、「追加候補単語」全体に対して、各単語の物理名を「(」+論理名+「)」にして単語辞書に追加する。すでに登録されている単語は追加しません。
ちなみに、単語の物理名の略語を自動的に生成するには、このVBAプロジェクトに含まれるユーザー関数「略語生成」を使うことができる。関数のソースコードは次のとおりです。
Public Function 약어생성(aFullName As String, Optional aMaxSize = 4) As String Dim sFullName As String, sAbbName As String Dim i As Integer '영문 Full Name 중에 포함된 '-' 는 공백으로 변경하여 처리한다. sFullName = Trim(Replace(aFullName, "-", " ")) '/* 영문 Full Name이 숫자로 시작하는 경우 단어 순서를 변경한다. (첫번째, 두번째 단어 순서만 변경) */ Select Case Mid(sFullName, 1, 1) Case "0" To "9" sFullName = Trim(단어순서변경(sFullName)) End Select sFullName = StrConv(sFullName, vbProperCase) sFullName = Replace(sFullName, "A ", "") sFullName = Replace(sFullName, "An ", "") sFullName = Replace(sFullName, "The ", "") If InStr(1, sFullName, " ") = 0 Then '/* 영문FullName이 하나의 단어일 경우*/ If Len(sFullName) <= 4 Then '/* 영문FullName의 길이가 4 이하 일 경우 */ sAbbName = sFullName Else '/* 영문FullName의 4자 이후 단어들이 모두 모음인 경우 - 앞 4자리 단어를 축약어로 사용 */ If 모음제거(Mid(sFullName, 5)) = "" Then sAbbName = Mid(sFullName, 1, 4) Else sAbbName = Mid(sFullName, 1, 1) + 모음제거(Mid(sFullName, 2)) '-- 모음시작 단어 첫모음 살림 '/* 축약 결과 길이제한 : 최대 aMaxSize 자리까지 */ If Len(sAbbName) > aMaxSize Then sAbbName = Mid(sAbbName, 1, aMaxSize) End If End If End If Else '/* 영문FullName이 여러 단어로 구성되어 있을 경우 */ Dim iBlankCnt As Integer iBlankCnt = Len(sFullName) - Len(Replace(sFullName, " ", "")) '각 단어 첫글자 sAbbName = sFullName Dim iPos As Integer, sChar As String, sAbbTmp As String If iBlankCnt = 1 Then '/* 단어수가 2개인 경우 - 각 단어의 시작 2글자 조합으로 생성 */ sAbbName = 모음제거(sAbbName) i = InStr(1, sAbbName, " ") + 1 sAbbName = UCase(Left(sAbbName, 2) + Mid(sAbbName, i, 2)) ElseIf iBlankCnt <= 4 Then '/* 단어수가 4개 이하인 경우 - 첫글자 조합으로 생성 */ For iPos = 1 To Len(sAbbName) sChar = Mid(sAbbName, iPos, 1) If (sChar >= "A" And sChar <= "Z") Or (sChar >= "0" And sChar <= "9") Then sAbbTmp = sAbbTmp + sChar End If If Len(sAbbTmp) >= aMaxSize Then GoTo Exit_For1 Next iPos Exit_For1: sAbbName = sAbbTmp Else '/* 단어의 길이가 최대 허용자리수 이하인 경우 - 그대로 사용 */ If Len(Replace(sFullName, " ", "")) <= aMaxSize Then sAbbName = UCase(Replace(sFullName, " ", "")) Else Dim sInText As String sInText = 등위접속사정리(UCase(sFullName)) '/* 등위접속사가 존재하면 첫글자들로 구성 */ If sInText <> sFullName Then sAbbName = 모음제거(sInText) For iPos = 1 To Len(sAbbName) sChar = Mid(sAbbName, iPos, 1) If (sChar >= "A" And sChar <= "Z") Or (sChar >= "0" And sChar <= "9") Then sAbbTmp = sAbbTmp + sChar End If If Len(sAbbTmp) >= aMaxSize Then GoTo Exit_For2 Next iPos Exit_For2: sAbbName = sAbbTmp Else '/* 두단어로 구성된 경우, 각각의 단어에서 앞 2자리 문자를 가지고 약어 생성 */ Dim iUnitLen As Integer, aWordArray() As String, sWord As String iUnitLen = 2 aWordArray = Split(sFullName) For iPos = 0 To UBound(aWordArray) sWord = aWordArray(iPos) If Len(sWord) = iUnitLen Then sAbbTmp = sAbbTmp + sWord Else If 모음제거(Mid(sWord, iUnitLen + 1)) = "" Then sAbbTmp = sAbbTmp + Mid(sWord, 1, iUnitLen) Else sAbbTmp = sAbbTmp + Mid(Mid(sWord, 1, 1) + 모음제거(이중자음정리(Mid(sWord, 2))), 1, iUnitLen) End If End If Next sAbbName = sAbbTmp End If End If End If End If 약어생성 = UCase(sAbbName) End Function
4.3。標準チェック対象属性の参考情報説明
標準化作業中に属性名を変更したり、データタイプ/長さが変更される。変更前属性名、列名、データタイプ/長さなどの参照情報や標準化作業中のメモなどを管理する項目が必要である。
「属性名の標準化」 sheet 標準点検結果右側に標準点検結果追加情報と各属性名に必要な追加参照情報を管理できる項目を作っておいた。参照情報は、ユーザが必要とする項目を追加することができる。
▼標準チェック追加情報
- 物理名Length:標準チェック結果で生成された物理名の長さ。物理名の最大長 このオプションの設定に応じて、条件付き書式で最大長(例:26)を超えるセルの背景色を赤で表示
- 単語数:標準点検結果で生成された物理名の組み合わせ単語数
- _個数:標準チェック結果で生成された物理名の「_」文字数
- 属性名CNT:入力した属性名の数(重複入力した属性名がある場合、つまり属性名CNTが2以上の場合、Cellの背景色を赤色で表示)
▼追加参考情報
- 変更前属性名:属性名を標準チェックする前に最初に入力した属性名。
- 自動的に設定されず、属性名のリストを作成してから、ユーザーが直接コピー&ペーストして設定。
- 標準チェックを複数回実行しながら属性名を変更する場合に、元々入力した属性名が何であるかを確認するための用途であり、なるべく使用を推奨する
- 変更後の属性名:現在の属性名(式で自動設定)
- As-Is属性名:入力した属性名のAs-Is属性名(As-Is追跡に必要)
- As-Is列名:入力した属性名のAs-Is列名(As-Isトレースに必要)
- As-Is DataType: 入力した属性名の As-Is Data Type (As-Is トレースに必要)
- 属性名変更可:変更前属性名と変更後属性名を比較して変更された場合に「O」と表示
- 確認必要事項:標準点検作業中に確認必要事項等を自由に記録して活用
- その他(必要に応じて追加):「確認必要事項」右側に列を追加して必要な項目を管理
4.4。ライセンス
この標準チェックツールを必要とし、使用したい利用者に制約を置かない。ライセンス内容は、BSD-2ライセンスを準用して簡単に作成した。
- 著者:イ・ヨンミン
- Eメール: leeyoungmin@gmail.com
- ブログ: https://prodskill.com/
- github: https://github.com/DAToolset
- ライセンスの内容:デフォルトでは、github Repositoryで指定されているBSD-2ライセンスに従います。指定された内容がない場合は、以下の内容に従います
- 1. 著作権者の表記: 著作権者名、電子メールアドレス、ブログアドレス、githubリポジトリアドレスは変更なくそのまま使用する必要があります。ソースコードを変更して使用する場合、二次作者関連内容は追加できます。
- 2. 保証の否認:このソースコードとツールを使用することにより、いかなる問題が発生しても著作権者に責任を問うことはできません。
- 上記の条件を満たしていれば、学習・活用など個人的な用途、会社で業務にこのツールを活用したり、ソースコードを変更して商用製品に含める用途など、あらゆる用途に許可されます。
- このライセンスの内容は削除できません。
- 立ち上がる
- 二次著作物のソースコードを公開する必要はありません。ただ、問題にならないならどんな二次著作物に使ったのか私に教えてほしいですね。メールでお送りいただくか、ブログコメントで残してください。
- ツールの機能上のエラーまたは改善の要件、ガイド文書のエラーまたは改善の要件なども、電子メールまたはブログのコメントでお知らせください。
参考までに、公開するツールのライセンスは以下のブログ記事で知られていた。
https://prodtool.tistory.com/notice/19
#ToDo: リンクの変更
4.5。 VBAコードの設定
WorkSheet、UserForm、Module、Classのリスト。このツールのVBAコードは、再利用性とメンテナンス性を向上させるためにModuleとClassで構成されており、MVCデザインパターンに応じてM(Model)はClass、V(View)はExcel UI、C(Control)はModuleとして適用した。
▼ Worksheet オブジェクト
- プログラム Sheet: shtRun (属性名標準化): 属性名標準チェックのための機能と属性リストを管理する Sheet
- データシート:プログラムで参照されるシート:標準単語辞書、標準用語辞典、標準ドメイン辞書
▼フォームオブジェクト
- frmAbout: “About… ”ボタンをクリックしたときに表示されるフォーム。ガイドフレーズを含む
▼ モジュールオブジェクト
- modControlStd:標準チェック結果の生成、候補単語の追加など標準チェック関連機能
- modTest: Test コード
- modUtil:共通機能(ロギング、書式設定、Suffixの削除など)
- mod略語の生成:単語の英文Full Nameと略語の最大桁数を入力として略語を生成する
▼クラスモジュールオブジェクト
- CDBConnectionUnit: 標準 Repository DB から標準単語/用語/ドメインを更新するために DB 接続、SQL 実行および結果生成機能などを提供するクラス
- CStdDomain: 標準ドメイン 1 個単位のクラス
- CStdDomainDic
- 標準ドメインのリストを Dictionary 構造 (Key-Value) で探索するためのクラス
- Key:ドメイン分類名
- Value: そのドメイン分類名のドメイン Collection
- CStdTerm: 標準用語 1 個単位のクラス
- CStdTermDic
- 標準用語リストを辞書構造(Key-Value)に移動するためのクラス
- Key:用語論理名
- Value: CStdTerm クラスの instance
- 標準用語辞書を読んで、Dictionary構造でmemoryに積載
- CStdWord:標準単語1個単位のクラス
- CStdWordCol:1つの標準単語の同音異義語リストを管理するためのクラス
- CStdWordDic
- 標準単語リストをDictionary構造(Key-Value)で探索するためのクラス
- Key:単語論理名
- Value: CStdWord クラスの instance collection (CStdWordCol オブジェクト)
- 内部的に単語物理名を Key とする Dictionary をさらに管理する
- 標準単語辞書を読み、辞書でメモリに積み込む過程で重複論理名と重複物理名を確認する
4.6。主なVBAクラスの説明と完全なロジックフローの概要
主なクラスは、標準単語辞書を管理する「CStdWordDic」、標準用語辞典を管理する「CStdTermDic」、標準ドメイン辞書を管理する「CStdDomainDic」である。ロジック全体は、「modControlStd」モジュールの「標準チェック」プロシージャで処理されます。
まとめて見てみると次のようになる。
4.6.1. CStdWordDicクラス
CStdWordDicクラスは、Dictionary typeメンバ変数を使用して各標準単語のリストを管理します。 Keyは単語名(単語論理名)であり、Valueは一般的に1つの単語オブジェクト(CStdWord type)を持つ。単語論理名に重複を許可する場合、つまり同音異義語が許可されている場合、Valueは複数の単語オブジェクト(CStdWord type)を保持するコレクションオブジェクトです。内部的には、単語物理名をKeyとし、単語オブジェクトをValueとするDictionaryをさらに管理する。
同音異義語があることを判断するために Value オブジェクトの type で区切るか、Value オブジェクトは Collection で等しくし、 Collection の item count が 1 か 2 以上かで区分するか悩んでいるが、すでに実装されているコードの変更を最小化しようとするtypeで区切るようにした。
したがって、「modControlStd」モジュールの「標準チェック」プロシージャには、次の形式のコードがいくつかあります。
If TypeOf oStdWordObj Is CStdWord Then '논리명이 유일한 경우 Set oStdWord = oStdWordObj sToken = oStdWord.m_s단어논리명 ... ElseIf TypeOf oStdWordObj Is CStdWordCol Then '동음이의어가 있어 논리명이 2개 이상인 경우 b동음이의어Matched = True ... End If
Dictionary typeについては、次の内容を参考にしてください。
- Excel VBAのDictionary typeはKey、Valueで構成されたHashMap構造を持っています。
- デフォルトで提供されるタイプではなく、「Microsoft Scripting Runtime」ライブラリを参照した後に使用するか、Object typeとして宣言してCreateObject(「Scripting.Dictionary」)でintanceを生成して使用する。
4.6.2。 CStdTermDic クラス
CStdTermDicクラスは、辞書タイプのメンバー変数を使用して各標準用語のリストを管理します。 Keyは用語論理名、Valueは用語オブジェクト(CStdTerm type)です。属性標準チェック時に用語単位一致かどうかを判別するロジックに使用する。
4.6.3。 CStdDomainDic クラス
CStdDomainDicクラスは、Dictionary typeメンバ変数を使用して各標準ドメインのリストを管理します。 Keyはドメイン分類名、Valueはドメインコレクションです。 Domain CollectionのitemはCStdDomain typeドメインオブジェクトです。
4.6.4。全体ロジックフローの概要
完全なロジックは、モジュールmodControlの「標準チェック」プロシージャに実装されています。処理過程を簡単にまとめると次のようになる。
- 標準語/用語/ドメイン各辞書シートからデータを読み込み、各クラスタイプの変数として生成します。各クラスタイプの Load() プロシージャに実装されている。
- チェック対象の属性リストを読み、Variant arrayに保存します。
- チェック対象属性のそれぞれについて標準辞書キー値構造を用いて探索し、チェック結果をVariant type配列に格納する。処理が終了すると、Variant typeに保存されたチェック結果をsheetに出力します。
これまでのデータ標準チェックツールの説明を完了します。気になる点はコメントで残してほしい。
データ標準チェックツールは以下のgithubリポジトリで確認できます。
https://github.com/DAToolset/ToolsForDataStandard
<< 関連記事のリスト >>