Làm thế nào để Apple tìm thấy ngày, thời gian và địa chỉ trong email?


128

Trong ứng dụng email khách iOS, khi email chứa ngày, giờ hoặc địa điểm, văn bản sẽ trở thành một siêu liên kết và có thể tạo một cuộc hẹn hoặc xem bản đồ chỉ bằng cách nhấn vào liên kết. Nó không chỉ hoạt động cho các email bằng tiếng Anh, mà trong các ngôn ngữ khác cũng có. Tôi thích tính năng này và muốn hiểu làm thế nào họ làm điều đó.

Cách ngây thơ để làm điều này sẽ có nhiều biểu thức chính quy và chạy tất cả. Tuy nhiên, điều này sẽ không có quy mô tốt và sẽ chỉ hoạt động với một định dạng ngôn ngữ hoặc ngày cụ thể, v.v. Tôi nghĩ rằng Apple phải sử dụng một số khái niệm về học máy để trích xuất các thực thể (8:00 PM, 8pm, 8:00, 0800, 20:00, 20h, 20h00, 2000 v.v.).

Bất kỳ ý tưởng nào làm thế nào Apple có thể trích xuất các thực thể nhanh chóng trong ứng dụng email của mình? Thuật toán học máy nào bạn sẽ áp dụng để hoàn thành nhiệm vụ đó?


5
Tôi cũng đã nghĩ về điều này, đặc biệt là thủ thuật regex. Tôi biết họ có bằng sáng chế về nó, vì vậy có lẽ bạn có thể thử tìm kiếm nó. Tuy nhiên, tôi cũng sẽ rất thích nó. +1
Thomas Jungblut

15
Trên thực tế, thủ thuật regrec có thể sẽ bắt 99% các trường hợp với tỷ lệ lỗi rất thấp. Và là siêu nhanh, khi bạn tối ưu hóa tốt các biểu thức thông thường. Vì vậy, tôi sẽ không ngạc nhiên nếu nó thực sự chỉ là một tập hợp các biểu thức thông thường.
Có QUIT - Anony-Mousse

Câu trả lời:


153

Họ có thể sử dụng các kỹ thuật khai thác thông tin cho việc này.

Dưới đây là bản demo của công cụ SUTime của Stanford:

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

Bạn sẽ trích xuất các thuộc tính về n-gram (từ liên tiếp) trong tài liệu:

  • sốOfLetters
  • numberOfSymbols
  • chiều dài
  • trước đây
  • kế tiếp
  • nextWordNumberOfSymbols
    ...

Và sau đó sử dụng thuật toán phân loại và cung cấp cho nó các ví dụ tích cực và tiêu cực:

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

Bạn có thể thoát khỏi 50 ví dụ về mỗi ví dụ, nhưng càng nhiều càng tốt. Sau đó, thuật toán học dựa trên các ví dụ đó và có thể áp dụng cho các ví dụ trong tương lai mà nó chưa từng thấy trước đây.

Nó có thể học các quy tắc như

  • nếu từ trước đó chỉ là ký tự và có thể là dấu chấm ...
  • và từ hiện tại là trong "tháng hai", "tháng ba", "the" ...
  • và từ tiếp theo là trong "thứ mười hai", any_number ...
  • sau đó là ngày

Đây là một video hay của một kỹ sư Google về chủ đề này


4
Hấp dẫn! Tôi chưa bao giờ mặc dù vậy. Cảm ơn el trưởng.
Martin

2
el trưởng, theo ý kiến ​​của bạn, loại mô hình nào sẽ là tốt nhất cho điều đó? Bayes?
Martin

5
Tôi khá chắc chắn rằng một cách tiếp cận như vậy sẽ không thực hiện tốt hơn, giả sử, số đo xấp xỉ. 0,9. (Lưu ý, đây chỉ là một cảm giác, tôi có thể sai). Mặt khác, tôi ngoại trừ cách tiếp cận ngây thơ của việc mã hóa tất cả các định dạng phổ biến để thực hiện theo cách tốt hơn (có thể là 0,99+ nếu các định dạng thường xuyên nhất sẽ không bao giờ bị bỏ qua) và nhanh hơn để thực hiện + khi chạy.
b.buchkeep

@ b.buchkeep, có thể, nhưng sau đó bạn sẽ phải thực hiện cùng một lượng công việc cho ngôn ngữ tiếp theo và ngôn ngữ tiếp theo, trong khi giải pháp của tôi là chung chung.
Neil McGuigan

@Neil McGuigan, đúng. Nhưng bạn phải cung cấp nhiều dữ liệu đào tạo cho tất cả các định dạng / ngôn ngữ đó là công việc nhiều hơn.
b.buchkeep

110

Đó là một công nghệ mà Apple thực sự đã phát triển từ rất lâu trước đây Apple Data Detectors. Bạn có thể đọc thêm về nó ở đây:

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

Về cơ bản, nó phân tích văn bản và phát hiện các mẫu đại diện cho các phần dữ liệu cụ thể, sau đó áp dụng các hành động theo ngữ cảnh của hệ điều hành cho nó. Nó gọn.


24
Đây là câu trả lời chính xác. Các câu trả lời khác có thể cho bạn biết làm thế nào bạn có thể làm điều đó, nhưng câu trả lời này cho bạn biết Apple làm điều đó như thế nào .
LaC

2
chúng ta có thể có một chút chi tiết trong việc viết lên tho? các mục liên kết đơn không thêm nhiều
shigeta

14
À, vậy ĐÂY là nơi mà tất cả các lượt truy cập trên trang web của tôi đến từ :) FWIW, tôi là người dẫn đầu dự án trên Máy dò dữ liệu của Apple trở lại trong thời của ATG; Điều tôi có thể nói thêm ở đây là đây chỉ là công nghệ OS 8 và 9 - nó không bao giờ chuyển sang OS X. Rõ ràng có một số điều tương tự xảy ra trong OS X và IOS, và trong khi tôi không còn ở Apple nữa và vì vậy không thể nói, tôi sẽ không ngạc nhiên nếu kiến ​​trúc hơi khác một chút. Tuy nhiên, tôi hy vọng một số loại hệ thống ngữ pháp / trình phân tích cú pháp vẫn là trung tâm của nó. Máy tính ngày nay rất nhanh, và ngữ pháp đơn giản là khá rẻ.
Jim Miller

18

Điều này được gọi là nhận dạng biểu thức thời gian và phân tích cú pháp. Dưới đây là một số tìm kiếm của Google để giúp bạn bắt đầu:

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

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


+1 để nói tên của "biểu thức xác định liên quan đến thời gian" là gì trong một số / phần lớn tài liệu
arturomp

5

Một phần của câu đố có thể là NSDataDetectorlớp học. Nó được sử dụng để nhận ra một số loại tiêu chuẩn như số điện thoại.


2
Có vẻ như NSDataDetectorlớp học là kết quả của nỗ lực Apple bỏ ra để thực hiện điều này. Câu hỏi là làm thế nào để lớp học làm việc nội bộ?
Ole Begemann

3
đó là trong NSRegularExpression.h, vì vậy có vẻ như rất có thể, như đã chỉ ra, chỉ là một tập hợp các biểu thức thông thường.
riffraff

2

Tôi đã từng viết một trình phân tích cú pháp để làm điều này, bằng cách sử dụng pyparsing. Điều đó thực sự rất đơn giản, bạn chỉ cần thực hiện đúng tất cả các cách khác nhau, nhưng không có nhiều cách như vậy. Chỉ mất vài giờ và khá nhanh.


Trích xuất từ Miramontes "Không khó để mã hóa bộ nhận dạng cho cấu trúc nguyên tử như URL, nhưng công việc đáng kể là cần thiết để tạo ra một kiến ​​trúc mở ra quá trình tạo cấu trúc phức tạp."
Rémy

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.