Office アドイン

[Officeアドイン]メッセージに含まれる住所や電話番号を抽出する。

Office アドイン(旧Office 用アプリ)のメール アドインには、メッセージに含まれる住所や電話番号といった特定のエンティティを抽出するメソッドがあります。

それがgetEntitiesメソッドです。

・マニフェストファイル

※ アプリ本体の場所(SourceLocation要素のDefaultValue属性の値)は適当に変更してください。

<?xml version="1.0" encoding="UTF-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MailApp">
  <Id>fa20350d-58b9-411f-b35c-1aa0bac768c4</Id>
  <Version>1.0</Version>
  <ProviderName>kinuasa</ProviderName>
  <DefaultLocale>ja-jp</DefaultLocale>
  <DisplayName DefaultValue="エンティティ文字列取得" />
  <Description DefaultValue="テスト(エンティティ文字列取得)用のメール アドインです。"/>
  <Hosts>
    <Host Name="Mailbox" />
  </Hosts>
  <Requirements>
    <Sets>
      <Set Name="MailBox" MinVersion="1.1" />
    </Sets>
  </Requirements>
  <FormSettings>
    <Form xsi:type="ItemRead">
      <DesktopSettings>
        <SourceLocation DefaultValue="https://(WebServer)/Sample_getEntities.html" />
        <RequestedHeight>150</RequestedHeight>
      </DesktopSettings>
    </Form>
  </FormSettings>
  <Permissions>ReadItem</Permissions>
  <Rule xsi:type="RuleCollection" Mode="Or">
    <Rule xsi:type="ItemIs" ItemType="Message" FormType="Read" />
  </Rule>
  <DisableEntityHighlighting>false</DisableEntityHighlighting>
</OfficeApp>

・アプリ本体(Sample_getEntities.html)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <title>テスト用メール アドイン</title>
    <script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"></script>
    <script>
      var _Item;
      var _Entities;
      Office.initialize = function(reason){
        _Item = Office.context.mailbox.item;
        _Entities = _Item.getEntities();
        $(document).ready(function(){
          $("#btnGetAddresses").click(function(){
            $("#results").empty();
            getAddresses();
          });
          
          $("#btnGetEmailAddresses").click(function(){
            $("#results").empty();
            getEmailAddresses();
          });
          
          $("#btnGetPhoneNumbers").click(function(){
            $("#results").empty();
            getPhoneNumbers();
          });
          
          $("#btnGetUrls").click(function(){
            $("#results").empty();
            getUrls();
          });
          
          //型を指定してエンティティ取得
          //getEntitiesByTypeメソッド使用
          $("#btnGetUrlsByType").click(function(){
            $("#results").empty();
            var aryUrls = _Item.getEntitiesByType(Office.MailboxEnums.EntityType.Url);
            $.each(aryUrls, function(i, value) {
              $("#results").append("<li>URL " + (i + 1) + ":" + value + "</li>");
            });
          });
        });
      }
      
      //住所取得
      function getAddresses() {
        var aryAddresses = _Entities.addresses;
        $.each(aryAddresses, function(i, value) {
          $("#results").append("<li>Addr " + (i + 1) + ":" + value + "</li>");
        });
      }
      
      //メールアドレス取得
      function getEmailAddresses() {
        var aryEmailAddresses = _Entities.emailAddresses;
        $.each(aryEmailAddresses, function(i, value) {
          $("#results").append("<li>Email " + (i + 1) + ":" + value + "</li>");
        });
      }
      
      //電話番号取得
      function getPhoneNumbers() {
        var aryPhoneNumbers = _Entities.phoneNumbers;
        $.each(aryPhoneNumbers, function(i, value) {
          $("#results").append("<li>PhoneNumber " + (i + 1) + ":" + value.originalPhoneString + "</li>");
        });
      }
      
      //URL取得
      function getUrls() {
        var aryUrls = _Entities.urls;
        $.each(aryUrls, function(i, value) {
          $("#results").append("<li>URL " + (i + 1) + ":" + value + "</li>");
        });
      }
    </script>
  </head>
  <body>
    <h4>■ 動作確認用メールアプリ</h4>
    <table>
      <tr>
        <td><button id="btnGetAddresses">GetAddresses</button></td>
        <td><button id="btnGetEmailAddresses">GetEmailAddresses</button></td>
        <td><button id="btnGetPhoneNumbers">GetPhoneNumbers</button></td>
        <td><button id="btnGetUrls">GetUrls</button></td>
      </tr>
      <tr>
        <td><button id="btnGetUrlsByType">GetUrlsByType</button></td>
      </tr>
    </table>
    <ul id="results"></ul>
  </body>
</html>

上記アドインをインストールした状態(アドインのインストール方法は「[Officeアドイン]メールアドイン(旧メールアプリ)がExchange不要になりました。」参照)でメッセージを開くと、アドインの動作確認ができます。

Mail_Add-ins_getEntities_01

「GetAddresses」「GetEmailAddresses」「GetPhoneNumbers」「GetUrls」ボタンを押していくと、それぞれ、住所、メールアドレス、電話番号、URLが抽出されるのを確認できます。

仕組みとしては、

  1. Office.initiatlizeイベントでMessage(Appointment)オブジェクトを取得。
  2. getEntitiesメソッドを呼び出し、Entitiesオブジェクトを取得。
  3. Entitiesオブジェクトの各プロパティの値を列挙。

上記のようなことを行っています。
また、「GetUrlsByType」ボタンを押したときに呼び出されるgetEntitiesByTypeメソッドを使えば、エンティティの型を指定して抽出することができます。

メッセージ内の住所や電話番号などを取得できれば様々な事に活用でき、とても便利そうなのですが、「Entities.addresses プロパティ (JavaScript API for Office)」に

住所として認識されるには、文字列に米国の住所 (少なくとも番地、通り名、都市名、州名、郵便番号の要素を含む) が含まれている必要があります。

エンティティの認識には、大量のデータの機械学習に基づいた自然言語認識を利用しています。エンティティの認識は決定論的ではなく、結果がアイテムの特定のコンテキストに左右されることがあります。

とあるように、基本的に日本の住所や電話番号には対応していません。

しかも“大量のデータの機械学習に基づいた自然言語認識を利用”しているため、確実に抽出できるとは限りません。

というわけで、(特に日本では)なかなか使いづらいgetEntitiesメソッドですが、メールアドレスやURLの抽出には便利なメソッドなので、覚えておいても損はないでしょう。

参考Webページ

パスワードに使えそうなランダムな文字列を作成するVBScript前のページ

Word マクロ参考本の私的感想&評価まとめ次のページ

関連記事

  1. Office アドイン

    Office 2016で進化したOffice アドイン

    今日OfficeDevを眺めていて気が付いたのが「OfficeJS S…

  2. Office アドイン

    [Officeアドイン]アドイン コマンド(Add-In Commands)の紹介(2)

    昨年末に書いた記事で「アドイン コマンド」を紹介しているのですが、知ら…

  3. Office アドイン

    Office アドイン開発をはじめよう!(2016年10月版)

    私がずっと追いかけている「Office アドイン(旧名:Office …

  4. Office アドイン

    Office 用アプリの開発資料(日本語)が公開されました。

    Office 用アプリの開発資料(日本語)が公開されました。・…

  5. Office アドイン

    [Office用アプリ]コピー&ペースト用マニフェストファイル

    Office 用アプリを作るとき、過去に作ったアプリのマニフェストファ…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP