• ベストアンサー

メッセージをパターンに分類する機能

メッセージ(文章)をパターンに分類する機能(ライブラリ、ロジック)を探しています。 例えば、“こんにちは[$1]さん”というメッセージパターンを事前に登録しておきます。 そして、“こんにちは田中さん”が入力されたら、 それが“こんにちは[$1]さん”というメッセージパターンであり、[$1]は“田中”である、という判定をさせたいです。 この機能を他のシステムに組み込みたいため、 ライブラリとして呼び出せるようなソースコードorモジュールはあるでしょうか? 言語はExcelVBAだと嬉しいですが、他の言語でも情報が欲しいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

完全な回答ではないが、参考に。 課題の一部を、WordVBAで処理したものです。 正規表現というものを、使おうとしています。 メイルメッセージの(多分本文だろうが)のテキストをワードの文書に貼り付ける(今回は手動で行う)。テストデータとして使います。 私の場合は「こんにちは田中さん」「こんにちは東野さん」の2文を、適宜の場所に挿入コピー貼り付けしました。またMsgboxは確認用です。本来不要。 ーー ワードのVBEの標準モジュールに Sub RegExpSample3() Dim regEx As Object, Matches As Object, Match As Object ActiveDocument.Range(0, 0).Select Selection.WholeStory Set regEx = CreateObject("VBScript.RegExp") txt = Selection.Text MsgBox txt With regEx .Pattern = "こんにちは..さん" ' パターンを設定します。 ワイルドカードの??は「..」です。2文字を挟むの意味。 .IgnoreCase = False ' 大文字と小文字を区別しないように設定します。 .Global = True ' 文字列全体を検索 End With Set Matches = regEx.Execute(txt) ' Executeメソッドで正規表現にマッチした箇所を取得できます 'MsgBox Matches.Item(0).Value '' → @hugafuga ,マッチしたものの一つ目の要素の値を出力。マッチするものがなければエラー MsgBox "該当Count: " & Matches.Count '' Countメソッドで値が取得できます。 For Each Match In Matches '' ForEachでMatches内の要素を出力できます。 msg = Match.Value MsgBox msg MsgBox Replace(Replace(msg, "こんにちは", ""), "さん", "") Next Match End Sub を貼り付け。(上記はWEB記事を一部修正したもの) 実行。 「鈴木」と「東野」が表示されると思う。 == メイル受信ソフトが何なのか質問以書いてない。マイクロソフト系のOutlookなどならOutlookVBAがあるので、上記を多少の修正で使えるかも。 ーー 名前が見つかった(「鈴木」と「東野」(「などの)後は、特定のフォルダーにでも移すなどのコードが必要だが、これはVBAの範疇でしょう。 Google系のものだと、JavaScriptで扱うところのVBA的なものがあるかもしれない。そこには正規表現が使える可能性は多い。 正規表現はUNIX系統のソフトが出自。 ーー ただし「Pattern=」のところのワイルドカードは、VBAと違い、「こんにちは*さん」や「こんにちは??さん」になると思うので、注意。このほうが本家筋の書き方。 後方参照の「For Each Match In Matches」以下は、VBScriptではできるが、その他の処理系では別の書き方になる可能性が多い。 == お勧め 上記のようにややこしいので (1)この目的に特化したフリーソフトを探すか (2)メイルソフトにメイル文の一部で、仕分けができるような機能がないか 勉強してください。

fxgame1224
質問者

お礼

ありがとうございます。 やはりパターンを1つずつループを回さなければいけないのですね。 参考にします。

fxgame1224
質問者

補足

入力データはメールではなく、システムから吐き出されるログ(.txt)です。出力はExcelかAccessの予定です。 パターンは1000種類程です。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

#1です。補足の >やはりパターンを1つずつループを回さなければいけないのですね。 私は、そうとは言っていません。 質問例の挙げ方が、控えめで、実態が分からない。 データもLOGデータだとも、質問に、当初書いてない。 正規表現を使うなら、Patternが、少数で済むものでないかを、勉強すべきで、 早々と自己流にまとめないこと。 私は質問表現に疑問を持ちながら、事例の実態をよくわからずに回答している面はあるので。 INSTR関数利用やLike演算子の利用も頭に上るが、世界の学者が考えた正規表現が、一番Powerfullだと思う。 それにマイクロソフト系のものは、とりあえず、該当集団を捉えた後に、それを個々にForEachで扱えるので、その時に色々判別や作業ができるのがよいところと思う。 ーー 質問の表現を、出来るだけ、本番に即して、実例を上げて、別質問したら。

fxgame1224
質問者

お礼

ありがとうございました。 できるだけ知りたい要素だけに絞って質問しましたが、 問題の背景や扱うデータによって最適解が変わってくるものなのですね。 質問が良くなかったようです。 >世界の学者が考えた正規表現が、一番Powerfullだと思う。 納得です。

関連するQ&A

  • 突然エラーメッセージ?がでます。

    CRITICALからERROR!へのメッセージ warning! the windows registry may be corrupt or have CRITICAL errors. please visit http://www.***-***.com to scan and repair the system registry. のようなメッセージが突然出るようになりました。 他にもいろいろなパターンがあるのですがどこかおかしいのでしょうか? 作業をしていても最前面に出てきてこまります。分かる方いたらよろしくおねがいします。

  • プログラミングパターンの基礎を知りたい

    基本書などで文法そのものは多少理解したのですが、 実際に作ってみると気になる点がいろいろあります。 プログラムのベストプラクティスや、基本マナーというようなものを 学びたいのですが 平易な本やwebをご存じないでしょうか? デザインパターンなどは少し高度というか、 マナーを超えているのでもっと基礎的なものを イメージしています。 例えばwebの入力チェックするプログラムでは、 入力文字サイズや、禁止文字のチェックをする必要がありますが、 if size check if ngword check のようにどんどんネストが深くなっていきます。 こういうものなのか?もっとよい書き方があるのか?など気になってます。 入力チェック後にチェックをクリアした変数に 実際の処理を加えようとするとインデントがかなり深くなってしまうケースがあります。 他にも変数が空なのか確認するのもis nullでチェックするのか、 is not nullでチェックするのかなど気になります。 想定言語は主要な言語で構いませんが、 当方で勉強したことがあるのはperl,php,pythonです。 こなれたライブラリのコードを読むなどが良いという気もしますが、 手軽に学びたく、解説の付いている書籍やwebが 希望となっております。

    • 締切済み
    • PHP
  • VB6でトグルボタンを使いたい

    VB6でトグルボタンを使いたいのですが、プロジェクト-コンポーネント-コントロールで Microsoft Forms 2.0 Obeject Libraryにチェックを入れて使えるようになりました。 しかし、他のソフトで同じことをすると 「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。」という メッセージが出てしまいます。 対処策はあるのでしょうか?

  • C言語の勉強が必要?

    私は入社時に1ヶ月C言語の研修を受けましたが、 実際にプロジェクトとして大きなプログラムを組んだ経験はありません。 その後1~2年Visual Basic、ロータスノーツなどでアプリケーション 作成に携わりましたので、ロジックについては理解しているつもりです。 現在はTurbo Linux上でApache + TOMCAT + PostgreSQLで Webアプリケーション作成の一部を担当しています。 CUIでの操作、ソースからApacheなどのインストール・設定は できるのですが、では ./Configure → make → make install が一体何をしているのかと云うと、 「Makefileを作って、コンパイルして、インストールして」 程度の言葉しか理解しかしていません。 Linuxではこれらの作業をするのが当たり前ですが、 私はマニュアルに書かれた手順どおりに操作するだけで、 実際にコンパイル・(共有)ライブラリ・シンボル・モジュール…、 これらがどのように関わり合って動いているかよく分かっていません。 上記についてしっかり理解するためには C言語の勉強をするべきなのではないか、と思うのですが、 どんな本・サイトを使って勉強するのが良いでしょうか?

  • 別表参照の関数

    IF関数についての質問です A1を顧客名としB1を受注数量とし、単価を200円とします。 =B1*200 下に挙げる2つのパターンについて 別で作ったプライス表を参照し、計算する式を作りたいのですが 上手くできずに困っています… パターン 1  A1=山田さま or 田中さま @150円  A1=鈴木さま @180円  A1=その他顧客 @200円 パターン 2  A1=山田さま or 田中さま @150円  A1=鈴木さま @180円  A1=その他顧客  注文数100個以下 @200円  注文数100個以上 @160円 VLOOKUP?を使用した表を初めて作ってみたいのですが 詳しく教えて頂けませんでしょうか。 お願い致します。

  • WordVBA入門に適した書籍、webページ

    仕事で使うことを目的としてWordVBAを勉強しようと考えています。 (1) ExcelVBAについては簡単なマクロを作ることはできますが、他の言語の経験はありません。 (2)マクロ以外の一般的なwordの機能については、ある程度習熟しています。 入門に適した書籍、webページなどありましたらご教授ください。 よろしくお願いします。

  • セルに誤って入力した時のメッセージ表示

     いつもお世話になっております。  セルに誤って入力した時に、メッセージを表示する方法をご教示ください。  誤って入力した場合を具体的に説明しますと、休日なのに平日の算定区分で入力した場合、その逆で平日なのに休日の算定区分で入力した場合の2パターンがあります。  誤り確認フラグとしてF列セルに「休日なのに平日の算定区分で入力した場合」は1を、「平日なのに休日の算定区分で入力した場合」は2を、正しい場合は0が入るように関数設定をしました。  入力するセルは約200あり、誤って入力した場合即座にメッセージで「誤っています」と表示させたいと考えています。  入力規則でもできそうな感じはしますが、モジュールで設定したいと考えています。モジュールで設定したいのは、他の作業に応用したいためです。  ご教示をどうぞよろしくお願いいたします。

  • 言語解析ライブラリ

    この前OS9.04がクラッシュしたので、新規にインストールしたのですが、 またもトラブルです。これまでも何度か有ったのですが、「言語解析ライブラリが見つかりません」というダイアログが出て、漢字変換が出来なくなるんです。 記憶してるだけで4回めです。以前は機能拡張の言語解析ライブラリだけで無くその他言語関係の機能拡張を入れなおせばよかったのですが、今回はダメです。 何度もなるのでどうも納得いかないんです。 新規インストールから2週間も経っていない。 Mac G4 Cube 450MHz OS9.04/9.1+X。メモリー320MB

    • 締切済み
    • Mac
  • 定義、設定、参照されている変数をリスト化したい

    質問させて頂きます。 C言語で書かれたソース(約100ファイル)で使われている膨大な変数情報をリスト化したく、最適なツールが無いか探しています。 やりたい事は変数名の抽出、定義モジュール・値が設定されるモジュール・参照されるモジュールの抽出です。 このような作業が出来るツールやソフトがあるとは思うのですが、見つける事が出来ず困っています。 エクセルのVBAで上記機能を持つマクロを作成したのですが、信頼性に少し疑問があります。 信頼性があるもので、このようなツールやソフトをご存知なら教えて頂けないでしょうか? よろしくお願いいたします。

  • C言語からjavaを呼び出したい

    C言語からjavaを呼び出したいのでjniを使うことにしました。 各言語のソースはWebで見つけたサンプルを見ながら何とか作成し、各々コンパイルまで終わったのですが、javaのオブジェクト(?)をどこに置いたら良いのかさっぱりわかりません。 java使いの人達には常識の話だと思いますがjavaはサーブレットしか作ったことが無くどうしたものかと困っています。 分からないのは次の2点です。 1.classファイルのままでも良いのかjarにしないといけないのか? 2.どこに設置したら良いのか? これまでやったこと 1.javaのソースを作成しコンパイルしました(classファイルのままです) 2./etc/profileに次のコマンドを追加しました。 LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/java/jdk1.7.0_03/jre/lib/amd64/server export LD_LIBRARY_PATH 3.C言語のソースを次のコマンドでコンパイルしました。 % gcc -I/usr/java/jdk1.7.0_03/include/ -I/usr/java/jdk1.7.0_03/include/linux -L/usr/java/jdk1.7.0_03/jre/lib/amd64/server -ljvm -lpthread jnitest.c -o jnitest 4.javaモジュールの設置←これがわかりません 初歩的な質問で申し訳ありませんがご教示下さい。

    • ベストアンサー
    • Java

専門家に質問してみよう