【秋学期】
単語類似度を用いた病名検索の最終回(7回目)です。今回は、クイックソート関数 qsort を作成して病名集クラス CDic の most_similar() メソッドに組み込み、引数に指定した病名と類似度の高い順に病名を抽出する機能を完成させました。さらに、これを使って引数に指定した病名と類似度の高い順にコンボボックスを設定するメソッド setCombo() を作成しました。これで必要なクラスを一通り作り終えたので、最後に類似度検索ツールを作成しました。
![]() |
類似病名検索ツール |
単語類似度を用いた病名検索の6回目です。今回は、前回作成した病名クラスのコレクションを管理する病名集クラス(あるいは病名辞書クラス) CDic を作成しました。まず、コンストラクタ Class_Initialize() を作成し、次いで引数に指定した病名表記をコレクションに追加する add() メソッドを作成し、それを部品として使って指定したレンジオブジェクトから一気に病名をコレクションに追加する addFromRange() メソッドを作成しました。その後、引数に指定した病名と類似度の高い順に病名を抽出する most_similar() メソッドを作成する途中で時間切れになりました。このメソッドは、病名オブジェクトと類似度ペアを格納する病名構造体 sortElement の配列を返すようにしたいのですが、まだ並べ替えるロジックが実装されていません。次回はクイックソートを使って類似度の降順に病名を並べ替える処理を実現します。
単語類似度を用いた病名検索の5回目です。今回は、前回から作り始めた病名クラス CDisease を完成させました。まず、オブジェクトの文字列化を行う toString() メソッドを作成し、次いでベクトルの長さを計算して返す norm() メソッド、引数に指定された文字の頻度を求める freq() メソッド、引数に指定された病名オブジェクトとの内積を計算する dot() メソッド、そして、引数に指定された病名オブジェクトとのコサイン類似度を計算する similarity() メソッドを作成しました。最後に、2つの病名表記を引数にとってそれらのコサイン類似度を計算する関数「コサイン類似度」を作成し、それを用いてワークシート「病名分解」に入力した検索用語と各病名の類似度を計算し、ピボットテーブルで求めたものと比較しました。
単語類似度を用いた病名検索の4回目です。前回まではExcelのシートを利用して単語類似度を用いた病名検索を行ってきましたが、今回からシートは使用せず、VBAのプログラムだけで同じ機能を実装します。そのために、VBAでオブジェクト指向プログラミングを行います。作成するクラスは病名クラス(CDisease)と病名集(病名辞書)クラス(CDic)の2つです。今回は、病名クラス(CDisease)をVBAのクラスモジュールで作成し、属性定義とinit()メソッドを実装したところで時間切れになりました。次回は、残りのメソッドを実装し、引き続き病名集(病名辞書)クラス(CDic)を作成していきます。
単語類似度を用いた病名検索の3回目です。今回は、前回の続きで、病名をコサイン類似度の降順(大きい順)に並べ替えて一覧表示するプログラムを作成しました。ピボットテーブルはソートできないので、類似度、病名表記、ICD11を転記し、それをExcelのソート機能を利用して類似度の大きい順に並べ替えました。なお、並べ替えのプログラムはExcelのマクロ自動記録機能を使って作成しました。そして最後に病名データベースに病名を追加されても対応できるようにしました。
単語類似度を用いた病名検索の2回目です。今日は、前回やった極端なケースを一般化します。前回は、病名の文字分解を手作業で行いましたが、それをVBAでプログラミングします。ただし、病名ベクトルのノルムや内積、コサイン類似度の計算部分は前回同様にExcelの関数を使います。今日は時間の関係でコサイン類似度の計算までしかできませんでした。次回は、病名をコサイン類似度の降順(大きい順)に並べ替え、検索語に似ている順に病名を一覧表示するプログラムを作成します。
今日から単語類似度を用いた病名検索に入りました。まずは、その考え方を理解するために、病名が「胸肋関節挫傷」、「胸骨部打撲挫傷」、「肋骨部打撲」の3つしかない極端なケースを考えて、検索語として「胸肋関節部打撲」で検索して類似度の高い順に3つの病名を並べ替える例題を実際にExcelを操作してやってみました。
今回は、前回に引き続き、正規表現を用いた病名検索プログラムを完成させました。その際、コンボボックスに表示した病名とデータベース上の行番号の対応をコレクションオブジェクトによって管理しました。また、プロシージャにまたがって使う変数はグローバル変数として宣言しなければならないことも学習しました。
正規表現を使って検索パターンにマッチした病名をコンボボックスに入れて、コンボボックスをクリックすると、選択された病名と、そのコンボボックス上の位置(何番目か?)を表示することができた。次回は、それらの情報をもとに選択された病名のICD11コードやその他の属性を取得するコードを作成する。(ヒント:行番号リストをコレクションオブジェクトを使って作成する)
【春学期】
ウェブアプリケーションの作成とスプレッドシートへの書き込みをやりました。これでスクレイピングは終了です。
スクレイピングの5回目です。前回はリスト10の手前までやりましたので、この回はスクレイピングで抽出した情報をJSON形式のデータ(リスト9)に編集加工するプログラムを作成します。リスト11まで作成しました。
0 件のコメント:
コメントを投稿