解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

メール処理の自動化のカタチ




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。




この記事の目次




目的


メールの処理が苦痛です。(正確には苦痛でした。)
前の職場では1日に250通くらいのメールを受信していました。
今は1日に10通も受信しない日があるくらいで、逆にメールを確認しなさ過ぎてうっかり頼まれごとを忘れる(というか気づいていない)事も有ったり…

動作単位でボタンを作成して、わずらわしい操作を無くしていきたいと思います。
メール転送とフォルダ移動のボタン作成します。




メール処理の自動化のカタチ

メール処理の自動化を最初に考えた時は、色々考えました。

タスクになりそうなものを自動抽出…
スレッド機能から自然言語処理

しかし、難しいばかりか、プログラム実行後の後処理として今までなかった操作の発生など、どうしても複雑化していってしまい、どれも成功とは言えませんでした。

そこで、ボタンが増えるというのを我慢して、あえてボタン1つの動作を小さい範囲の動作として、どのボタンをクリックするかは判断する方向のカスタマイズを行い、少なからず、完全自動化を目指した時よりは成功に近づいたと思っています。
一例としてメール転送とフォルダ移動のボタン作成とソースコードを載せます。

まず、図1のVBE画面からソースコードを書いていきます。

図1 VBE 画面


メール転送

私のメーラーMicrosoft Outlook です。
メール転送は『Ctrl + F』のショートカットキーが割り当てられています。
しかし、メール転送で1番メンドウと感じている操作は E-Mail Address の入力欄をマウスでクリックする事と E-Mail Address の入力だと思っています。

ソースコード
〜メール転送〜

このソースコードはグループメンバーに展開する必要のあるメールを見つけた時に、ボタン1つで転送することを想定したプログラムです。

GrMemberという変数でE-Mail Addressを指定しています。
ここは書き換えて使ってください。

転送本文という変数でメール本文を指定しています。
だいぶ素っ気ないので、ここも書き換えて使ってください。

『.Send』のところはPCの設定上、Microsoft Outlook から警告ダイアログが表示されると思いますが、 VBA セキュリティの設定を変更すると警告無く動作するかと思います。

ですが、セキュリティ設定変更は推奨しないので、コメントアウトして、転送メールが表示された後、『Alt + S』で送信することをオススメ致します。


Public Const GrMember = "**********@****.co.jp; **********@****.co.jp; **********@****.co.jp; **********@****.co.jp"
Public Const 転送本文 = "各位" & vbNewLine & vbNewLine & "転送します。確認ください。"
 
Sub メール転送()
    
    ' 選択アイテム数の取得
    選択アイテム数 = Application.ActiveExplorer.Selection.Count
   
    ' 選択アイテムの処理
    For i = 1 To 選択アイテム数
       
        ' アイテムの取得
        Set olItem = Application.ActiveExplorer.Selection.Item(i)
       
        ' アイテム種類の取得
        アイテム種類 = TypeName(olItem)
       
        ' アイテム種類がメールなら
        If アイテム種類 = "MailItem" Then
           
            Set Fw = olItem.Forward
               
            With Fw
               
                .Display
                .To = GrMember
                .Body = 転送本文 & vbNewLine & .Body
                .Send
               
            End With
           
        End If
       
    Next i
   
End Sub

フォルダ移動

Microsoft Outlook でメールをフォルダ移動する時は、移動させたいメールを選択して、移動先のフォルダにドラッグ & ドロップするとメールのフォルダ移動が出来ます。
私はこの操作が嫌いです。
ドラッグ距離が長く、たまに全然違うフォルダに移動させてしまうからです。

ソースコード
〜フォルダ移動〜

このソースコード②はソースコード①で書いたプログラムで転送した後に実行することを想定しています。

フォルダ移動はメンドウですが、フォルダ1つに対して1プログラムとしてます。

以下の2つを変更すれば移動させるフォルダを変更できます。
"作成日:2017-10-02" (データファイル名)
"周知事項" (データファイル内、フォルダ名)


Sub 周知事項フォルダへ移動()
   
    ' 選択アイテム数の取得
    選択アイテム数 = Application.ActiveExplorer.Selection.Count
   
    ' 選択アイテムの処理
    For i = 1 To 選択アイテム数
       
        ' アイテムの取得
        Set olItem = Application.ActiveExplorer.Selection.Item(i)
       
        ' アイテム種類の取得
        アイテム種類 = TypeName(olItem)
       
        ' アイテム種類がメールなら
        If アイテム種類 = "MailItem" Then
           
            Set 移動先フォルダ = Application.Session.Folders("作成日:2017-10-02").Folders("周知事項")
            olItem.Move 移動先フォルダ
           
        End If
       
    Next i
   
End Sub

ボタンの作成

Microsoft Outlook ではツールバーをユーザーが作成出来ます。

作り方を順番に説明します。

①まずは言わずと知れた Microsoft Outlook の画面です。


②メニューバーの空いているところで右クリックします。


③右クリックで開いたプルダウンメニューの『ユーザー設定』をクリックします。


④ユーザー設定ダイアログが表示されたら『新規作成』ボタンをクリックします。


ツールバーの名前を入力して、『OK』ボタンをクリックします。


⑥ユーザー設定ダイアログに戻ったら、ユーザー設定ダイアログの『コマンド』タブをクリックし、ダイアログ左側にある『分類』という列の『マクロ』をクリックします。


⑦作成したマクロが表示されます。


⑧表示されているマクロをツールバーにドラッグ&ドロップします。


⑨このままだとツールバーを見失ってりするので、画面上にドッキングします。


⑩あとは⑧の作業をツールバーに登録したいプログラムの数だけ繰り返してツールバー作成完了です。




コメント

日常のメール処理を振り返って、ボタンを増やしていけば、後は反射神経勝負になります。
リズムよくボタンを押して、メールを片付けていきましょう。




以上

解析の実行を自動化!!その2




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。




この記事の目次




目的


サーバーにアクセスして、何か作業をする時、普段使っているパソコンが Windows OS だという人には気の毒な事にサーバーの OS は LinuxUnix 場合が多く、コマンドライン操作が必要になってきたりします。
私も会社のパソコンが Windows OS で、構造解析などを行うときは Unix がインストールされている計算サーバーで行います。
その時は TeraTerm というターミナルソフトを使って Windows から操作します。
正直、気分じゃ無い時の方が多いです。
なので、自動化しましょう。




サーバー作業の自動化

TeraTerm マクロ

いきなりですが、ソースコードを示します。

書き直しを考え中である部分がありますが、作業内容によって変わってくる部分なので、書き直し方を検討しています。

私も手探りで作成したので、コメントで解説を入れて分かりやすくしたつもりです。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TTLによる計算サーバーへのlog in
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermからサーバーへの接続はconnectコマンドを使用します。
;     サーバー情報と接続方法
;          サーバーIP:192.168.1.1
;          サーバー接続Port:22
;          接続方法:秘密鍵接続
;          ユーザー名:test_name
;          パスワード:test_pass
;          秘密鍵パス:C:\Sample\prvtKey
connect '192.168.1.1:22 /ssh /2 /auth=publickey /user=test_name /passwd=test_pass /keyfile="C:\Sample\prvtKey"'



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermが入力待ちになるまで待機
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermの待機はwaitコマンドを使用します。
wait "$"



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermからディレクトリ移動
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermからサーバーのディレクトリ移動はsendlnコマンドでcdコマンドをサーバーへ送ります。
;     サーバー情報
;          作業パス:/data/calc
sendln "cd /data/calc"



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermが入力待ちになるまで待機
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermの待機はwaitコマンドを使用します。
wait "$"



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 計算サーバーに新規フォルダを作成
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermから計算サーバーでの新規フォルダの作成はsendlnコマンドでmkdirコマンドを実行します。
;     サーバー情報と引数
;          カレントディレクトリ:/data/calc
;          今日の日付:2017年11月29日
:          今の時刻:14:28:12
;          param2:modelA
getdate datetime '_%y%m%d-%H%M%S'
makeDir = "mkdir "
strconcat makeDir param2
strconcat makeDir datetime
; makeDir=modelA_20171129-142812
sendln makeDir



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermが入力待ちになるまで待機
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermの待機はwaitコマンドを使用します。
wait "$"



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermからディレクトリ移動
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
currentDir = "/data/calc"
strconcat currentDir "/"
strconcat currentDir param2
strconcat currentDir datetime
; currentDir="/data/calc/modelA_20171129-142812"

moveToFoler ="cd "
strconcat moveToFoler currentDir
; moveToFoler="cd /data/calc/modelA_20171129-142812"

sendln moveToFoler



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermが入力待ちになるまで待機
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermの待機はwaitコマンドを使用します。
wait "$"



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 解析に必要な設定ファイルのアップロード
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermから計算サーバーへのファイル送信はscpsendコマンドを実行します。
; scpsend '転送したいファイル名' '転送先ディレクトリ'
;     引数
;          param3:C:\job\modelA\
;          param4:AnalysisInput.dat
;          param5:RunShell
sendFileA = param3
strconcat sendFileA param4
scpsend sendFileA currentDir

sendFileB = param3
strconcat sendFileB param5
scpsend sendFileB currentDir



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ファイルの送信完了を確認する
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; もうこれは呪文ということで…
do
              mpause 5000
              sendln 'ps -ef |grep -v grep |grep -c scp'
              waitln '0' '1'
loop while result != 1



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 計算シェルの実行
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sendln "sh RunShell"



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermが入力待ちになるまで待機
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermの待機はwaitコマンドを使用します。
wait "$"



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermを休止
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermを8000ミリ秒休止する。
; psコマンドとgrepで書き直すことを検討中です。
mpause 8000
 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 解析結果のファイルのダウンロード
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermで計算サーバーからのファイル受信はscprecvコマンドを実行します。
; scprecv '受信したいファイル名' '受信先ディレクトリ'
;     引数
;          param3:C:\job\modelA\
;          param5:AnalysisOutput.dat
wantFile = currentDir
strconcat wantFile "/"
strconcat wantFile param5
 
receiveDir = param3
strconcat receiveDir param5
 
scprecv wantFile receiveDir
 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 計算したファイルのあるフォルダパスをテキストファイルでレポートとしてローカルに保存する。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; テキストファイルの作成、書き込み、保存はそれぞれfilecreate、filewriteln、filecloseコマンドを実行します。
;     引数
;          param3:C:\job\modelA\
;          param5:AnalysisOutput.dat
outputFile = param3
strconcat outputFile "Report.txt"
 
strMSG = "/data/calc"
strconcat strMSG "/"
strconcat strMSG param2
strconcat strMSG datetime

filecreate fh outputFile
filewriteln fh strMSG
fileclose fh
 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermを休止
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermを5000ミリ秒休止する。
; psコマンドとgrepで書き直すことを検討中です。
mpause 5000



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTerm の終了
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TeraTermと計算サーバーの接続の終了はsendlnコマンドでexitコマンドを実行します。
sendln "exit"




コメント

サーバーでの作業は定型的なものが多い印象ですので、 Windows OS を使っている人なら TeraTermTTL を少し使えるだけで、色々な自動化が出来そうだと思います。




以上

ゴールデンウィーク期間中に予定を立てる




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次




目的


この記事では自動化を忘れます。

皆さまこんな経験があるんでは無いでしょうか?

ゴールデンウィークにテーマパークやイベントへ行く予定をしていたけども、恋人やお子さんなどの体調不良などで急な看病!!!

そして、体調が回復した後のゴールデンウィークの予定変更!!!

看病だけならまだしも、ゴールデンウィーク期間中に入ってからの予定変更は至難の技です。

ゴールデンウィーク期間中の今からでも間に合うイベントを調べて行きます。




どんなイベントが有るのか

ワークショップ

一緒に何かを体験するというイベントです。
アクセサリやもっと簡単な物の製作なんかのイベントをイメージする方が多いかと思います。
子供向けから大人向けまで様々なワークショップが開かれています。
急な予定計画にオススメなワークショップをリストアップしておきます。

  1. 東急ハンズ
  2. ゴールデンウィークに限らず、ワークショップを定期的に開催していて、ホームページにもワークショップスケジュールが掲載されています。
    子供向けから大人向けな様々なワークショップがある印象!
    予約も Web から出来るのが便利!!

    Web 検索も『東急ハンズ (地域)』で検索すれば、すぐにワークショップの情報もピックアップ出来ます!

    例)
    東急ハンズ 梅田
    東急ハンズ 町田
    東急ハンズ 横浜

  3. 各種科学館・博物館
  4. ワークショップを開催していなくても、科学館・博物館なので、色々な展示物などがあります。
    体験型イベントを開催している科学館・博物館が数多くあるので、大変助かります。

    下の①〜②はメーカーが運営しているので、大きくて面白いです。
    ①三菱みなとみらい技術館
    東芝未来科学館

  5. LOFT
  6. ゴールデンウィークに限らず、ワークショップを定期的に開催していて、ホームページにもワークショップスケジュールが掲載されています。
    子供向けから大人向けな様々なワークショップがある印象!
    ただ、あまり Web からワークショップの情報にアクセス出来ないので、今、開催しているワークショップが大人向けなのか子供向けなのか分かりづらいのと、全国的にどこの LOFT でも開催されているわけでは無いようです。

    Web 検索も『(地域) ロフト』で検索すれば、各地域のロフトのホームページにアクセス出来ます。ワークショップの情報にたどり着かなくてもイベントなどの情報をピックアップ出来ます!

    例)
    渋谷 ロフト
    横浜 ロフト


テーマパーク

テーマパークは混雑が予想されますが、チケットさえ買えば参加できると言う点がなんとも都合がいいですね。

  1. 動物園
  2. 水族館
  3. 遊園地

Web 検索も『(地域) 動物園』などで検索すれば、各地域のテーマパークのホームページにアクセス出来ます。

例)
東京 動物園
横浜 遊園地


もはやこれは伝家の宝刀です。
お子さんがいる場合は砂遊びなどで楽しんでください!

Web 検索も『(地域) 海』などで検索すれば、各地域の海のランキングサイトなどにアクセス出来ます。




コメント

私もワークショップに助けられました。

デートに困った時なんかにも覚えておいて損は無いかも!




以上

災害袋の中身と使いどき




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次




目的


自動化とは全く関係無いんですが、凄く気にしているので、災害時のためのに用意する物を調べておきます。




災害時に必要な物

まず必要

地震などの災害時にまず最初に使うであろう物をリストアップします。
まず身につけましょう。

  1. ヘルメット、防災ずきん
  2. レスキュービーコン

応急処置

地震津波、火事などから逃れて落ち着ける場所を見つけたら、使う物をリストアップします。
ケガなどの確認をして、ケガしていれば処置しましょう。

  1. 救急用品(ばんそうこう、包帯、消毒液、常備薬、マスクなど)
  2. 毛布、タオル

生存のために

次に考える事はやっぱり寝る所とトイレです。
近くの小学校などが避難所となる事があると思いますので、場所を覚えておきましょう。
結局自分の身は自分で守るしかない!という状況下であった場合に必要な物をリストアップします。

  1. テント
  2. 携帯トイレ
  3. 飲料水
  4. 軍手
  5. スーパーデリオス(浄水器
  6. ソーヤーミニ(浄水器
  7. サランラップ
  8. 非常食(カップめん、缶詰、ビスケット、チョコ、シリアルバーなど)
  9. 携帯ラジオ、予備電池
  10. 携帯電話の充電器
  11. ティッシュとウェットティッシュ
  12. 使い捨てカイロ
  13. 歯磨き、コップ、タオル、シャンプー、コンディショナー、石鹸、化粧水
  14. 懐中電灯
  15. メガネ or コンタクト
  16. 衣類
  17. 下着

災害時の緊急事態のために

もし、山や動物園、水族館の近くに住んでいたら…
身の危険がせまる状況におちいる可能性があるので、必要な物をリストアップします。

  1. OCガススプレー(ペッパーガス、唐辛子ガス)
  2. ガスマスク

その他

無いと困る物をリストアップします。

  1. 貴重品(預金通帳、印鑑、現金、健康保険証など)
  2. メモ帳
  3. 紙おむつ、哺乳ビン、ミルク
  4. 生理用品
  5. アゴ




コメント

災害時に必要なものは多いですね。

これらを持って移動するのも大変ですが、使う時も出し入れなどが大変ですね。




以上

WinPython と OpenCV のインストール




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。




この記事の目次




目的


WindowsPython を使いたくなりました。

というか、家の PC には WinPython を入れてあります。

しかし、会社の PC にはインストールしていなかったので、インストールしておこうと思ったのですが、なんか色々ハマったので、記事にまとめておきます。




WinPython

バージョン

WinPython はバージョン 3.4.4 をインストールしました。

Web 検索

インターネットで WinPython がダウンロード出来る Web サイトを検索します。
【検索ワード】を検索すれば、 WinPython のダウンロードが出来るサイトがヒットするはずです。

【検索ワード】
WinPython-64bit-3.4.4.6Qt5

Web サイトを表示

【検索ワード】を検索して、 Web サイトを表示させます。
【WEBサイト】にたどり着いているはずなのですが…

【WEBサイト】
https://sourceforge.net/projects/winpython/files/WinPython_3.4/3.4.4.6/

ダウンロード

【WEBサイト】の中に【ダウンロードリンク】があるはずなので、クリックしてダウンロードします。

【ダウンロードリンク】
WinPython-64bit-3.4.4.6Qt5.exe

インストーラ

【ダウンロードファイル】がダウンロードするときに選択したフォルダにダウンロードされます。

【ダウンロードファイル】
WinPython-64bit-3.4.4.6Qt5.exe




OpenCV

バージョン

OpenCV はバージョン 3.1.0 をインストールしました。

Web 検索

インターネットで OpenCV がダウンロード出来る Web サイトを検索します。
【検索ワード】を検索すれば、 OpenCV のダウンロードが出来るサイトがヒットするはずです。

【検索ワード】
opencv_python‑3.1.0‑cp34‑cp34m‑win_amd64.whl

Web サイトを表示

【検索ワード】を検索して、 Web サイトを表示させます。
【WEBサイト】にたどり着いているはずなのですが…

【WEBサイト】
https://pypi.python.org/pypi/opencv-python/3.1.0.1#downloads

ダウンロード

【WEBサイト】の中に【ダウンロードリンク】があるはずなので、クリックしてダウンロードします。

【ダウンロードリンク】
opencv_python-3.1.0.1-cp35-cp35m-win_amd64.whl (md5)

インストーラ

【ダウンロードファイル】がダウンロードするときに選択したフォルダにダウンロードされます。

【ダウンロードファイル】
opencv_python-3.1.0.1-cp35-cp35m-win_amd64.whl



コメント

2018年4月にインストールした時の情報です。




以上

文字列の類似性




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。




この記事の目次




目的


機械学習ディープラーニングがトレンドなのに今さらですが、レーベンシュタイン距離を使う機会があったので、まとめておきます。
というかレーベンシュタイン距離の方が良い精度だったものでレーベンシュタイン距離を使いました。




関数

ソースコード
〜レーベンシュタイン距離〜

レーベンシュタイン距離を簡単に言うと『何回編集すると同じ文字列になるか』で、編集回数を求めます。

Function LevenshteinDistance(strA, strB)
   
    x = Len(strA)
    y = Len(strB)
    ReDim d(x, y)
    ReDim str1(x)
    ReDim str2(y)
   
    For n = 1 To x
        str1(n - 1) = Mid(strA, n, 1)
    Next n
   
    For n = 1 To y
        str2(n - 1) = Mid(strB, n, 1)
    Next n
   
    For i = 0 To x
        d(i, 0) = i
        For j = 1 To y
            d(i, j) = 0
        Next j
    Next i
   
    For j = 0 To y
        d(0, j) = j
    Next j
   
    cost = 0
    For i = 1 To x
        For j = 1 To y
            If str1(i - 1) = str2(j - 1) Then
                cost = 0
            Else
                cost = 1
            End If
            d(i, j) = WorksheetFunction.Min(d(i - 1, j) + 1, d(i, j - 1) + 1, d(i - 1, j - 1) + cost)
        Next j
    Next i
   
    LevenshteinDistance = d(x, y)
   
End Function

使い方

実際にレーベンシュタイン距離を算出してみます。

Sub 使い方()
   
    str1 = "今日は晴れですね"
    str2 = "今日は曇りだよね"
   
    MsgBox LevenshteinDistance(str1, str2)
   
End Sub
上記の使い方では最後のMsgBoxで『4』と表示されます。




コメント

とても短い文の類似度、 DNA の類似度なんかはレーベンシュタイン距離が適していると思います。

とても短い文は単語などのトレンドが出来るほど文が長くないので、他の類似度計算方法だと微妙な場合もあります。
また、構文的に似ているかどうかもレーベンシュタイン距離には影響するので、短い文には適しているものと思います。

DNA の類似度については編集距離そのものがまさに類似度なので、レーベンシュタイン距離を適用する事もあるようです。




以上

Excel で全角英数を半角英数に統一する




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。




この記事の目次




目的


Excel でデータベースの様な資料を作成していた時、急いで作っていた事もあって、英数文字が全角と半角の混合状態になってしまいました。
かっこ悪いし、何より私自身が気持ち悪くて仕方ない。
そこで、 VBA でサクッと最後に修正してやろうと思って全角英数文字を半角英数文字に変換する VBA を作成します。




関数

ソースコード

全角英数文字を半角英数文字に変換したいシートを表示させている状態でマクロを起動すると、全角英数文字を半角英数文字に変換されます。

Sub 全角英数2半角英数()
  
   ' 使用済みレンジの取得
   Set rng使用済 = ThisWorkbook.ActiveSheet.UsedRange
  
   ' 全角英数を半角英数に変換する
   For Each セル In rng使用済
     
      ' 文字列取得
      調査対象 = セル.Value
     
      ' セルが空では無いなら
      If Len(調査対象) > 0 Then
        
         ' 調査対象を1文字ずつ調べていく
         返却文字列 = ""
         For i = 1 To Len(調査対象)
           
            ' 文字の抽出
            文字 = Mid(調査対象, i, 1)
           
            ' 全角英数なら
            If ("0" <= 文字 And 文字 <= "9") Or ("A" <= 文字 And 文字 <= "Z") Or ("a" <= 文字 And 文字 <= "z") Then
              
               If 返却文字列 = "" Then
                  返却文字列 = StrConv(文字, vbNarrow)
               Else
                  返却文字列 = 返却文字列 & StrConv(文字, vbNarrow)
               End If
              
            ' 全角英数以外なら
            Else
              
               返却文字列 = 返却文字列 & 文字
              
            End If
           
         Next i
        
         セル.Value = 返却文字列
        
      End If
      
   Next
  
   ' サブルーチン完了
   MsgBox "全角英数2半角英数が完了しました。"
  
End Sub

使い方

全角英数文字を入力した Excel を図1に示します。

また、マクロを選択・実行する状態の Excel を図2に示します。

最後にマクロを実行して全角英数文字が半角英数文字に変換された状態の Excel を図3に示します。

図1 全角英数

図2 全角英数

図3 全角英数




コメント

このマクロがあれば Excel で全角英数と半角英数を気にする必要がなくなります。
よりスピード重視の資料作成が出来そうです。




以上