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用アプリ]Office ストアのURLリスト

    Microsoft Office StoreのURLをリスト化しました…

  2. Office アドイン

    Office Scriptsってどんな機能?

    昨年の11月、Ignite 2019で発表されたオンライン版Excel…

  3. Office アドイン

    OneNote用Office アドインで画像やHTMLを挿入してみる。

    先日書いた記事で、OneNote OnlineでOffice アドイン…

  4. Office アドイン

    Build 2020で個人的に気になったOfficeやPower Automateの発表

    Microsoftの開発者向けイベント「Build 2020」がオンラ…

  5. Office アドイン

    Office 365でVisio JavaScript APIsを試してみました。

    昨年末にVisio Onlineの機能をJavaScriptで拡張する…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP