最初に
Actions on Google と Alexa Skill では、ユーザーが発話した内容から、都道府県名や市区町村名を抽出でき利用できますが、同じ発話内容でも、Google Assistant と Amazon Alexa を通してアプリ側に伝わってくる情報に違いがあるのでまとめておきます。なお、2018年9月時点で確認した内容になります。
Google Assistant (Dialogflow) -> Actions on Google の場合
仕様
Google Assistant (Dialogflow) の場合は、都道府県と市区町村の情報が、'admin-area', 'subadmin-area', 'city' の3つのプロパティに分かれて取得でき、'admin-area' には都道府県の情報が、'subadmin-area' には区の情報が、'city' には市町村の情報が格納されています。
実際の挙動
各発話パターン別の実際の挙動になります。
発話 | 説明 | 認識結果 | 解説 |
---|---|---|---|
"東京都" | 都道府県名を発話 | {'admin-area': '東京都'} | 都道府県名として認識 |
"東京" | 都道府県名の "都" を省略して発話 (同名の市町村名が存在しない) | { "city": "東京" } | 市町村名として認識 |
"北海" | 都道府県名の "道" を省略して発話 (同名の市町村名が存在しない) | - | 認識不能 |
"京都" | 都道府県名の "府" を省略して発話 (同名の市町村名が存在する) | {'city': '京都'} | 市町村名として認識 |
"愛知" | 都道府県名の "県" を省略して発話 (同名の市町村名が存在しない) | - | 認識不能 |
"山口" | 都道府県名の "県" を省略して発話 (同名の市町村名が存在する) | {'city': '山口'} | 市町村名として認識 |
"アメリカ県" | 実在しない都道府県名を発話 | - | 認識不能 |
"東京都品川区" | 東京都と東京23区名を続けて発話 | {'admin-area': '東京都', 'subadmin-area': '品川区'} | 東京都と区名を両方認識 |
"品川区" | 東京23区名を発話 | {'subadmin-area': '品川区'} | 区名として認識 |
"品川" | 東京23区の "区" の部分を省略して発話 | {'subadmin-area': '品川区'} | 区名として認識、"区"が補完されている |
"神奈川県横浜市" | 都道府県名と市町村名を続けて発話 | {'admin-area': '神奈川県', 'city': '横浜市'} | 都道府県名と市町村名を両方認識 |
"横浜市" | 市名のみを発話 | {'city': '横浜市'} | 市名として認識 |
"横浜" | 市名のみを "市" の部分を省略して発話 | {'city': '横浜'} | 市名として認識 |
"アメリカ市" | 実在しない市名を発話 | - | 認識不能 |
"横浜市青葉区" | 政令指定都市の市名と区名をつなげて発話 | {'city': '横浜市'} | 市名のみ認識され、区名は認識されない |
"青葉区" | 政令指定都市の区名のみを発話 | {'subadmin-area': '青葉区'} | 区名として認識 |
"青葉" | 政令指定都市の区名のみを "区" の部分を省略して発話 | - | 認識不能 |
"アメリカ区" | 実在しない区名を発話 | - | 認識不能 |
まとめ(注意点)
- 都道府県名は、"都""道""府""県" まで含めて発話しないと都道府県名として認識されない
- "都""道""府""県" を省略した場合は、いくつかパターンがある
- 同名の市町村名が存在する場合は、市町村名として認識される(例:京都、大阪)
- 同名の市町村名が存在しない場合は、認識されない(例:愛知)
- "東京"は例外で、同名の市町村名が存在しないが、市町村名として認識される(謎)
- "都""道""府""県" を省略した場合は、いくつかパターンがある
- 政令指定都市の場合、"横浜市青葉区" のように、市と区を両方発話しても、市の情報しか取得できない。区の情報は捨てられる
- "東京都品川区" のように都道府県名と市区町村名を続けて発話した場合は、都道府県と市区町村の両方が情報が取得できる
- "青葉" のように、政令指定都市の "区" を省略して発話した場合は、認識されない
- "横浜" のように、"市" を省略して発話した場合は、市町村名として認識はされるが、"市" が補完されることなく、"横浜" の形で取得される
- 東京23区の場合は、"品川" のように "区" を省略した形で発話しても、"品川区" のように "区" が補完された形で取得できる
Amazon Alexa -> Alexa Skill の場合
仕様
Alexa の場合は、Google Assistant (Dialogflow) と違って、ユーザーが発話した内容が、何も識別・処理されず、単一の 'City' プロパティにそのまま格納されます。そのため、都道府県名なのか市区町村名なのかということは判別できず、それ以前に、実在しない都道府県名であったり市区町村名であったとしてもそのまま格納されてます。なので、それらの識別を全てスキル側でおこなう必要があります。
実際の挙動
前述のとおり、ユーザーが発話した内容がそのまま格納されるため、発話パターンによって挙動は変わりません。
まとめ(注意点)
Amazon Alexa 側では、ユーザーが発話した内容が、都道府県名なのか市区町村名なのかが識別されないため、スキル側で識別する必要があります。また、実在しない名前を発話した場合でも、そのまま格納されるので注意する必要があります。
Google Assistant (Dialogflow) と Amazon Alexa の比較
Google Assistant (Dialogflow) では、都道府県、市区町村の情報が識別された状態で取得できますが、Amazon Alexa では、ユーザーが発話した内容そのままなので、スキル側で識別する必要があります。この観点では、Google Assistant (Dialogflow) のほうが、使い勝手がいいかもしれません。
まとめ
同じ発話内容でも、Google Assistant (Dialogflow) と Amazon Alexa とで、アプリに伝わってくる情報に違いがあるので、アプリケーションロジックを実装したバックエンドを共通にする場合などは、これらの違いを吸収する工夫が必要になります。
また、これは、Google Assistant (Dialogflow) 、Amazon Alexa 共通の話ですが、"横浜市" といったように、"市" をつけてユーザーが発話した場合は、そのまま伝わってくる一方、"横浜" といったように、"市" を省略して発話した場合でも、"市" が補完されず、そのまま伝わってくるので、このようなユーザーによる微妙な発話の違いを吸収する仕組みが必要になるかと思います。