Apple은 이메일에서 날짜, 시간 및 주소를 어떻게 찾습니까?


128

iOS 전자 메일 클라이언트에서 전자 메일에 날짜, 시간 또는 위치가 포함되어 있으면 텍스트가 하이퍼 링크가되고 링크를 누르면 약속을 만들거나지도를 볼 수 있습니다. 영어 이메일뿐만 아니라 다른 언어로도 작동합니다. 이 기능을 좋아하고 그들이하는 방법을 이해하고 싶습니다.

이를 수행하는 순진한 방법은 많은 정규식을 가지고 모두 실행하는 것입니다. 그러나 나는 이것이 잘 확장되지 않으며 특정 언어 또는 날짜 형식 등에서 만 작동합니다. Apple은 엔티티 (8:00 PM, 8PM, 8:00, 0800, 20:00, 20h, 20h00, 2000 등).

애플이 어떻게 이메일 클라이언트에서 엔터티를 그렇게 빨리 추출 할 수 있는지 아십니까? 어떤 기계 학습 알고리즘을 적용하여 그러한 작업을 수행 하시겠습니까?


5
나는 또한 이것, 특히 정규식 트릭에 대해 생각했습니다. 나는 그들이 그것에 대한 특허를 가지고 있다는 것을 알고 있으므로 아마도 당신은 그것을 검색하려고 시도 할 수 있습니다. 그러나 나는 그것에 대해서도 매우 관심이 있습니다. +1
— Thomas Jungblut

15
실제로 정규 표현식 트릭은 오류율이 매우 낮은 경우의 99 %를 잡을 수 있습니다. 정규 표현식을 잘 최적화하면 매우 빠릅니다. 따라서 실제로 정규 표현식 세트 만해도 놀라지 않을 것입니다.
— 종료-익명-무스

답변:


153

정보 추출을 사용했을 가능성이 높습니다 기술을 .

다음은 Stanford의 SUTime 도구 데모입니다.

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

문서에서 n- 그램 (연속 단어)에 대한 속성을 추출합니다.

  • numberOfLetters
  • numberOfSymbols
  • 길이
  • 이전 글
  • 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
흥미 롭습니다! 나는 그렇게 생각한 적이 없다. 엘프 족장 감사합니다.
— Martin

2
el Chief, 귀하의 의견으로는 어떤 모델이 가장 적합할까요? 베이지안?
— Martin

5
나는 그러한 접근 방식이 f의 f-measure보다 더 잘 수행되지 않을 것이라고 확신합니다. 0.9. (이것은 단지 느낌 일뿐입니다. 틀릴 수도 있습니다). 다른 한편으로는 모든 일반적인 형식을 인코딩하여 가장 잘 수행되는 형식 (가장 빈번한 형식을 절대로 놓치지 않을 경우 0.99 이상)을 구현하고 런타임에 + 구현하는 것이 더 빠르다는 기본적인 접근 방식을 제외하고 싶습니다.
— b.buchhold

@ b.buchhold, 어쩌면 다음 언어와 다음 언어에 대해 동일한 양의 작업을 수행해야하지만 내 솔루션은 일반적입니다.
— 닐 맥기 건

@ 닐 맥 거건, 맞습니다. 그러나 훨씬 더 많은 형식 / 언어에 대해 많은 교육 데이터를 제공해야합니다.
— b.buchhold

110

그것은 애플이 실제로 아주 오래 전에라는 기술을 개발 한 기술 Apple Data Detectors입니다. 자세한 내용은 여기를 참조하십시오.

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

기본적으로 텍스트를 구문 분석하고 특정 데이터 조각을 나타내는 패턴을 감지 한 다음 OS 컨텍스트 작업을 적용합니다. 깔끔합니다.


24
이것이 정답입니다. 다른 답변은 어떻게 할 수 있는지 알려줄 수 있지만이 답변은 Apple 이 어떻게하는지 알려줍니다 .
— LaC

2
우리가 쓰기에 조금 더 자세히 설명해 주시겠습니까? 단일 링크 항목은 추가하지 않습니다
— shigeta

14
아, 그래서 이것은 내 웹 사이트의 모든 히트가 나온 곳입니다 :) FWIW, 저는 ATG 시절 애플 데이터 탐지기의 프로젝트 리더였습니다. 제가 여기에 추가 할 수있는 것은 이것이 OS 8과 9 기술에 불과하다는 것입니다. OS X로 넘어 가지 않았습니다. OS X와 ​​IOS에서도 비슷한 일이 일어나고 있습니다. 아키텍처가 조금 다르다해도 놀라지 않을 것입니다. 그럼에도 불구하고, 나는 어떤 종류의 문법 / 파서 시스템이 여전히 그 핵심에 있다고 생각합니다. 요즘 컴퓨터는 빠르며 간단한 문법은 꽤 저렴합니다.
— Jim Miller


5

퍼즐의 한 부분은 NSDataDetector수업 일 수 있습니다 . 전화 번호와 같은 일부 표준 유형을 인식하는 데 사용됩니다.


2
NSDataDetector클래스가 애플이 이것을 구현하기 위해 노력한 결과 인 것 같습니다 . 문제는 수업이 내부적으로 어떻게 작동 하는가입니다.
— 올레 Begemann

3
NSRegularExpression.h에 있기 때문에 지적한 것처럼 정규 표현식 세트 일 가능성이 큽니다.
— riffraff

2

한 번은 pyparsing을 사용하여 파서를 작성했습니다. 정말 간단합니다. 다른 모든 방법을 올바르게 사용해야하지만 그다지 많지는 않습니다. 단지 몇 시간이 걸렸고 꽤 빨랐습니다.


Miramontes 에서 추출 "URL과 같은 원자 구조에 대한 인식기를 하드 코딩하는 것은 어렵지 않지만 복잡한 구조를 만드는 프로세스를 여는 구조를 만들기 위해서는 상당한 노력이 필요합니다."
— 레미

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.