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ページ

関連記事

  1. Office アドイン

    [Office用アプリ]Google ドライブでアプリを公開する方法

    今回は先日登壇した第一回 Apps for Office 勉強会の中で…

  2. Office アドイン

    [Office用アプリ]任意の場所にデータを入力する。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  3. Office アドイン

    [Office用アプリ]User Agent他を調べてみました。

    ふと気になったので、Office 用アプリをローカル環境にインストール…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP