Appleはどのように電子メールの日付、時刻、アドレスを見つけますか?


128

iOSメールクライアントでは、メールに日付、時刻、場所が含まれている場合、テキストがハイパーリンクになり、リンクをタップするだけで予定を作成したり、地図を見たりすることができます。英語のメールだけでなく、他の言語でも機能します。私はこの機能が大好きで、彼らがそれをどのように行うかを理解したいと思います。

これを行う素朴な方法は、多くの正規表現を用意してそれらをすべて実行することです。ただし、これはあまりスケールできず、特定の言語や日付形式でのみ機能します。Appleは、エンティティを抽出するために機械学習の概念を使用している必要があると思います(8:00 PM、8PM、8:00、 0800、20:00、20h、20h00、2000など)。

Appleがどのようにして電子メールクライアントでエンティティを非常に迅速に抽出できるかについてのアイデアはありますか?どのような機械学習アルゴリズムを適用して、このようなタスクを達成しますか?


5
これについても、特に正規表現のトリックについて考えました。私は彼らがそれに特許を持っていることを知っているので、たぶんあなたはそれを検索してみることができます。しかし、私もそれに非常に興味があります。+1
Thomas Jungblut

15
実際、正規表現のトリックは、おそらくエラー率が非常に低い99%のケースをキャッチします。正規表現を適切に最適化すると、超高速になります。だから、それが実際に正規表現のセットだけだったとしても、私は驚かないでしょう。
QUITあり-Anony-Mousse 2012年

回答:


153

彼らはおそらくこれに情報抽出技術を使用します。

以下は、スタンフォード大学のSUTimeツールのデモです。

http://nlp.stanford.edu:8080/sutime/process

ドキュメント内のNグラム(連続する単語)に関する属性を抽出します。

  • numberOfLetters
  • numberOfSymbols
  • 長さ
  • previousWord
  • nextWord
  • nextWordNumberOfSymbols
    ...

次に、分類アルゴリズムを使用して、ポジティブとネガティブの例をフィードします。

Observation  nLetters  nSymbols  length  prevWord  nextWord isPartOfDate  
"Feb."       3         1         4       "Wed"     "29th"   TRUE  
"DEC"        3         0         3       "company" "went"   FALSE  
...

あなたはそれぞれの50の例でうまくいくかもしれませんが、より多くの陽気です。次に、アルゴリズムはそれらの例に基づいて学習し、これまでに見たことのない将来の例に適用できます。

それは次のようなルールを学ぶかもしれません

  • 前の単語が文字のみで、おそらくピリオドの場合...
  • 現在の単語は「2月」、「3月」、「the」です...
  • 次の単語は「12番目」、any_number ...
  • 次に日付です

これは、このテーマに関するGoogleエンジニアによるまともなビデオです


4
面白い!そんな風に思ったことはない。エルチーフありがとう。
マーティン、

2
elチーフ、あなたの意見では、どのようなモデルがそのために最適でしょうか?ベイジアン?
マーチン、

5
私は、そのようなアプローチが、例えば、f-measureのおよそより良く機能しないと確信しています。0.9。(注意、これは単なる感想です。私は間違っているかもしれません)。一方、私はすべての一般的な形式をエンコードするというナイーブなアプローチを除いて、パフォーマンスを向上させ(最も頻繁な形式が失われないことを考えると、おそらく0.99以上)、実行時に+を実装する方が高速です。
b.buchhold

@ b.buchholdかもしれませんが、私の解決策は一般的ですが、次の言語と次の言語で同じ量の作業を行う必要があります。
ニール・マクギガン

@ニール・マクギガン、そうだね。ただし、これらのすべての形式/言語のトレーニングデータを大量に提供する必要があるため、作業量が多くなります。
b.buchhold

110

これは、Appleが実際に開発した非常に昔の技術と呼ばれていApple Data Detectorsます。あなたはここでそれについてもっと読むことができます:

http://www.miramontes.com/writing/add-cacm/

基本的に、テキストを解析し、特定のデータを表すパターンを検出してから、OSコンテキストアクションをそれに適用します。きちんとしている。


24
これが正解です。他の答えはあなたがそれを行う方法をあなたに教えるかもしれませんが、これはApple それをどのように行うかをあなたに教えます。
LaC、2012

2
もう少し詳細を書いてもらえますか?単一のリンクエントリはそれほど追加されません
重田

14
ああ、これが私のウェブサイトでのすべてのヒットがここから来た場所です:) FWIW、私はATGの時代のApple Data Detectorsのプロジェクトリーダーでした。ここで追加できるのは、これはOS 8と9のテクノロジのみでした-OS Xへのジャンプはありませんでした。OSXとIOSで同様のことが起こっていることは明らかです。とはいえ、アーキテクチャが少し異なっていても驚くことはありません。それにもかかわらず、ある種の文法/パーサーシステムがまだその中心にあると思います。最近のコンピューターは高速で、単純な文法はかなり安価です。
ジム・ミラー

18

これは、時間表現の識別と解析と呼ばれます。開始するためのいくつかのGoogle検索を以下に示します。

https://www.google.com/#hl=en&safe=off&sclient=psy-ab&q=timebank+timeml+timex

https://www.google.com/#hl=en&safe=off&sclient=psy-ab&q=temporal+expression+tagger


+1は、「時間を参照する表現を識別する」の名前が一部または多くの文献にどのようなものであるかを言う
arturomp

5

パズルの一部はNSDataDetectorクラスかもしれません。電話番号などのいくつかの標準タイプを認識するために使用されます。


2
このNSDataDetectorクラスは、Appleがこれを実装するために費やした努力の結果のようです。問題は、クラスが内部でどのように機能するかです。
Ole Begemann、2012

3
これはNSRegularExpression.hにあるため、指摘されたように、単なる正規表現のセットである可能性は十分にあります。
riffraff

2

私はかつて、pyparsingを使用してこれを行うためのパーサーを作成しました。それは本当に非常に簡単です、あなたはすべての異なる方法を正しくする必要があるだけですが、それほど多くはありません。ほんの数時間でかなり高速でした。


Miramontesからの抜粋「URLなどのアトミック構造の認識機能をハードコードすることは難しくありませんが、複雑な構造を作成するプロセスを開くアーキテクチャを作成するには、かなりの作業が必要です。」
レミー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.