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不要になりました。」参照)でメッセージを開くと、アドインの動作確認ができます。
「GetAddresses」「GetEmailAddresses」「GetPhoneNumbers」「GetUrls」ボタンを押していくと、それぞれ、住所、メールアドレス、電話番号、URLが抽出されるのを確認できます。
仕組みとしては、
- Office.initiatlizeイベントでMessage(Appointment)オブジェクトを取得。
- getEntitiesメソッドを呼び出し、Entitiesオブジェクトを取得。
- Entitiesオブジェクトの各プロパティの値を列挙。
上記のようなことを行っています。
また、「GetUrlsByType」ボタンを押したときに呼び出されるgetEntitiesByTypeメソッドを使えば、エンティティの型を指定して抽出することができます。
メッセージ内の住所や電話番号などを取得できれば様々な事に活用でき、とても便利そうなのですが、「Entities.addresses プロパティ (JavaScript API for Office)」に
住所として認識されるには、文字列に米国の住所 (少なくとも番地、通り名、都市名、州名、郵便番号の要素を含む) が含まれている必要があります。
エンティティの認識には、大量のデータの機械学習に基づいた自然言語認識を利用しています。エンティティの認識は決定論的ではなく、結果がアイテムの特定のコンテキストに左右されることがあります。
とあるように、基本的に日本の住所や電話番号には対応していません。
しかも“大量のデータの機械学習に基づいた自然言語認識を利用”しているため、確実に抽出できるとは限りません。
というわけで、(特に日本では)なかなか使いづらいgetEntitiesメソッドですが、メールアドレスやURLの抽出には便利なメソッドなので、覚えておいても損はないでしょう。
参考Webページ
- サンプル: Outlook アイテムからエンティティ文字列を抽出する
- https://msdn.microsoft.com/ja-jp/library/fp161071.aspx
- Message.getEntities メソッド (JavaScript API for Office)
- https://msdn.microsoft.com/ja-jp/library/fp142278.aspx
- Message.getEntitiesByType メソッド (JavaScript API for Office)
- https://msdn.microsoft.com/ja-jp/library/fp161176.aspx
- Entitiesオブジェクト (JavaScript API for Office)
- https://msdn.microsoft.com/ja-jp/library/fp160984.aspx
この記事へのコメントはありません。