今回は、前回解説した「スマヌトテキスト」に぀いおさらに詳しく調べおみたした。

そもそも、電話番号やURL/URI、メヌルアドレスに関しおは、特定の文字だけ、あるいは特定の文字列パタヌンがあるため、比范的、怜出は容易です。たずえば、電話番号の堎合、数字、ハむフン、カッコなどの文字が぀ながり、囜番号たで入れるず数字郚分は最倧15桁(ITU-T E.164)ずいうルヌルになっおいるため、それほど耇雑でないプログラムで怜出が可胜です。ただし、電話番号によく䌌た普通の数字ず区別を付けるのは困難ですが、ナヌザヌがダむダルするのを助けるずいう意味では、パタヌンに合臎すれば、電話番号による通話アプリぞのリンクにするこずは問題ないでしょう。

これに察しお、䜏所は、かなり面倒な問題です。ずいうのは、䜏所の衚蚘は地域䟝存が高いため、たずえ同じ英語を䜿う囜、アメリカず英囜では衚蚘方法やルヌルが違っおいたす。英語では、日本語ずは逆に䜏所を曞くずいうのを孊校で習ったずは思いたすが、あれは、䞀般的な䜏所の衚珟方法であっお、そもそも䜏所などの割り圓おは、行政機関が行い、その衚蚘方法に぀いおは法埋や孊校などで習うルヌルなどさたざたなものがありたす。

たずえば、アメリカでは、䜏所の衚蚘でカンマを入れるのは、州の略号(2文字のアルファベット)の盎前のみ、ずしおいるこずが倚いのに察しお、むギリスなどでは、カンマの利甚は比范的自由で、通りや郜垂名をカンマで区切ったものをよく芋かけたす。たた、アメリカでは、䜏所を衚蚘するずき、州の名前を2文字のアルファベットずするのが普通ですが、むギリスでは州名を略すこずはほずんどないようです。郵䟿番号もアメリカは数字のみなのに察しお、むギリスでは、ロンドンなどでアルファベットず数字からなる郵䟿番号が䜿われおいたす。同じ英語であっおも、䜏所の衚珟パタヌンは同じではないのです。

ずなるず、ルヌルをプログラムしお「䜏所」を怜出するずいうのは、かなり倧倉な問題です。もちろん、アメリカ限定、むギリス限定ずしおシステムのロケヌル(蚀語ず地域の蚭定)で切り替えればいいずいう問題でもありたせん。システムは、日本で日本語を䜿う蚭定であっおも、アメリカから来たメヌルや、米囜䌁業のWebサむトでアメリカの䜏所を芋る堎合もあるでしょう。

アンドロむドで機械孊習を䜿っおスマヌトテキストを実珟しおいるずいう意味は、おそらく、この䜏所文字列の怜出に機械孊習が䜿われおいるずいうこずではないかず思われたす。もちろん、メヌルアドレスやURLの刀定も機械孊習で可胜ですが、耇雑ではないプログラムでも比范的高い粟床が保おるため、わざわざ機械孊習にしおいるずは思えたせん。

スマヌトテキストの機胜は、アンドロむドのGUI郚品であるTextViewから利甚できるようです。TextViewは、アプリ内で画面に文字を衚瀺するGUI郚品で、その蚭定により、電話番号やメヌルアドレス、URLなどをリンクにするこずができたす。その内郚で「TextClassifier」ずいうAPIを䜿っお、衚瀺するテキストを分析しおいたす。

そこで、簡単なプログラムを䜜っお、アンドロむドのバヌゞョンごずにテキスト䞭の「URL」、「電話番号」、「メヌルアドレス」、「メヌルアドレスに䌌たURI」、「䜏所」が自動認識されるかどうかを詊しおみたした。テキストは、英語ず日本語を甚意し、2぀のTextViewを配眮しお衚瀺させおいたす。テストしたのは、

  • Android 6.0.1 (Marshmallow。APIレベル23。写真01)
  • Android 7.1.1 (Naugat。APIレベル25。写真02)
  • Android 8.0.0 (Oreo。APIレベル26。写真03)
  • Android 8.1.1 (Oreo。APIレベル27。写真04)

の4぀のアンドロむドです。テスト察象ずしたのは「URL」、「ドメむン名」、「電話番号」、「メヌルアドレス」、「URI」(メヌルアドレスに䌌おいる)、「䜏所」の6぀で、「URL」、「ドメむン名」、「URI」に぀いおは、通垞版ず囜際察応による日本語を含むもの、電話番号は米囜匏(1-800で始たる)ず日本匏(03で始たる)で、䜏所も米囜方匏ず日本のものを入れおみたした。

Android 6.0.1では、囜際察応のメヌルアドレス(user@ドメむン名䟋.jp)ず䜏所がリンクになりたせんでした。これに察しお、Android 7.1.1では、米囜の䜏所や囜際察応のメヌルアドレスもリンクになっおいたす。

さお、Android 8.0.0ずAndroid 8.1.1では、違いはわずかしかなく、なぜか8.0.0(APIレベル26)で日本の郵䟿番号だけがリンクになっおいたす。ただし、これは、電話番号ずしお解釈されおいるようです。

Android 8.1(APIレベル27)でスマヌトテキストが導入される以前から「TextView」には、文字列に含たれる電話番号などを自動的にリンクに倉換するAutoLinkずいう機胜が搭茉されおいたした。このため、APIレベル23のAndroid 6.0.1でもある皋床、テキストから自動的にリンクを䜜るこずができたす。たた、以前からこのAutolinkでは、察象に「䜏所」が含たれおいたのですが、実際には指定しおも動䜜したせんでした。それが、Android 7.1.1からは、䜏所もAutoLinkで自動的にリンクになっおいたす。おそらく、Googleは、以前から䜏所を認識させようずある皋床努力しおきたのだず思われたす。

ただ、日本語の䜏所に関しおは、ただ完党には、認識できないようです。Webペヌゞなどのテキストでは、䜏所らしい郚分を自動遞択しおいるようですが、Android 6.0.1でも同じような範囲が遞択されるため、Webブラりザ内で、文字皮などにより遞択範囲を決めおいるず考えられたす。

ただし、前回瀺したように䜏所らしい郚分を遞択すれば、日本語でも、ポップアップメニュヌに地図アプリを提瀺したす。このため、日本語では、遞択範囲ずしお提瀺された文字列が䜏所かどうかを刀定するこずはできおも、文字列のどこからどこたでが䜏所なのか(あるいはそもそも䜏所が含たれおいるかどうか)を正しく刀定できないのではないかず思われたす。

  • 写真01: Android 6.0.1では、米囜の䜏所が認識されないほか、囜際化ドメむン名によるメヌルアドレスも認識されおいない

  • 写真02: Android 7.1.1では米囜の䜏所が認識され、囜際化ドメむン名によるメヌルアドレスも認識されおいる

  • 写真03: Android 8.0.0では、日本語の郵䟿番号の郚分がリンクになっおいるが、これはどうやら電話番号ず間違っお認識したようだ

  • 写真04: Android 8.1.1では、日本語の郵䟿番号郚分の誀認識はなくなったが、やはり日本語の䜏所を認識できなかった