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.