2010-09-06 32 views
93

Trong một thời gian, tôi đã cố gắng tìm cách khai thác văn bản "có liên quan" một cách thông minh từ một URL bằng cách loại bỏ văn bản liên quan đến quảng cáo và tất cả sự lộn xộn khác. Sau vài tháng nghiên cứu, tôi đã cho nó một vấn đề không thể được xác định chính xác. (Tôi đã thử những cách khác nhau nhưng không ai đáng tin cậy)Thuật toán nào sử dụng khả năng đọc để trích xuất văn bản từ URL?

Một tuần trước, tôi tình cờ gặp Readability - một plugin chuyển đổi bất kỳ URL nào thành văn bản có thể đọc được. Nó trông khá chính xác với tôi. Tôi đoán là họ bằng cách nào đó có một thuật toán đủ thông minh để trích xuất văn bản có liên quan.

Có ai biết họ làm như thế nào không? Hoặc làm thế nào tôi có thể làm điều đó một cách đáng tin cậy?

+3

Câu hỏi đặt ra là thuật toán nào SO sử dụng tính dễ đọc không xử lý các trang của nó? :) –

+1

Liên quan: [Safari hoạt động như thế nào và khi nào nó hiển thị?] (Http://superuser.com/q/387572/664) –

Trả lời

16

khả năng đọc là một bookmarklet javascript. nghĩa là mã phía máy khách của nó điều khiển DOM. Nhìn vào javascript và bạn sẽ có thể thấy những gì đang xảy ra.

Độ khó của công việc và mã:

/* 
    * 1. Prep the document by removing script tags, css, etc. 
    * 2. Build readability's DOM tree. 
    * 3. Grab the article content from the current dom tree. 
    * 4. Replace the current DOM tree with the new one. 
    * 5. Read peacefully. 
*/ 

javascript: (function() { 
    readConvertLinksToFootnotes = false; 
    readStyle = 'style-newspaper'; 
    readSize = 'size-medium'; 
    readMargin = 'margin-wide'; 
    _readability_script = document.createElement('script'); 
    _readability_script.type = 'text/javascript'; 
    _readability_script.src = 'http://lab.arc90.com/experiments/readability/js/readability.js?x=' + (Math.random()); 
    document.documentElement.appendChild(_readability_script); 
    _readability_css = document.createElement('link'); 
    _readability_css.rel = 'stylesheet'; 
    _readability_css.href = 'http://lab.arc90.com/experiments/readability/css/readability.css'; 
    _readability_css.type = 'text/css'; 
    _readability_css.media = 'all'; 
    document.documentElement.appendChild(_readability_css); 
    _readability_print_css = document.createElement('link'); 
    _readability_print_css.rel = 'stylesheet'; 
    _readability_print_css.href = 'http://lab.arc90.com/experiments/readability/css/readability-print.css'; 
    _readability_print_css.media = 'print'; 
    _readability_print_css.type = 'text/css'; 
    document.getElementsByTagName('head')[0].appendChild(_readability_print_css); 
})(); 

Và nếu bạn làm theo các tập tin JS và CSS rằng mã trên kéo trong bạn sẽ nhận được toàn bộ hình ảnh:

http://lab.arc90.com/experiments/readability/js/readability.js (điều này được khá tốt nhận xét , đọc thú vị)

http://lab.arc90.com/experiments/readability/css/readability.css

11

không có cách nào 100% đáng tin cậy để làm được điều này, tất nhiên. Bạn có thể có một cái nhìn vào mã nguồn Độ khó here

Về cơ bản, những gì họ đang làm là cố gắng để xác định dương tính tiêu cực khối văn bản. định dương tính (tức là div ID) sẽ là một cái gì đó như:

  • bài viết
  • cơ thể
  • nội dung
  • blog của
  • câu chuyện

định Negative sẽ được:

  • comment
  • thảo luận

Và sau đó họ có khônglẽ ứng cử viên. Điều họ sẽ làm là xác định xem nội dung chính của trang web có nhiều khả năng là gì, xem dòng 678 trong nguồn dễ đọc. Điều này được thực hiện bằng cách phân tích phần lớn đoạn văn, số nhận dạng của chúng (xem ở trên), cây DOM (tức là nếu đoạn là nút con cuối cùng), loại bỏ mọi thứ không cần thiết, xóa định dạng, v.v.

Mã 1792 dòng. Nó có vẻ giống như một vấn đề không tầm thường, vì vậy có lẽ bạn có thể nhận được nguồn cảm hứng từ đó.

+1

Bạn có biết rằng mã của họ có phải là nguồn mở hay không và liệu nó có thể được sử dụng trong các sản phẩm thương mại? – user300981

+1

Nó nói rằng mã nguồn được phát hành theo Giấy phép Apache 2.0, có nghĩa là bạn có thể sử dụng nó, phân phối nó, sửa đổi và phân phối các phiên bản sửa đổi của nó. Tôi không quá rõ ràng về các chi tiết. – slhck

+2

@bobsmith Apple đã sử dụng nó trong phiên bản Safari mới nhất. Họ đã ghi nhận Arc90 trong các ghi chú phát hành. – s4y

157

Dễ đọc chủ yếu bao gồm các chẩn đoán rằng "chỉ bằng cách nào đó hoạt động tốt" trong nhiều trường hợp.

Tôi đã viết một số tài liệu nghiên cứu về chủ đề này và tôi muốn giải thích lý do tại sao dễ dàng tìm ra giải pháp hoạt động tốt và khi khó đạt được độ chính xác 100%.

Có vẻ như là một ngôn ngữ cơ bản trong ngôn ngữ của con người cũng là (nhưng không độc quyền) biểu hiện trong nội dung trang Web, mà đã khá rõ ràng tách hai loại văn bản (toàn văn so với toàn văn hoặc , gần như "nội dung chính" so với "bản mẫu").

Để lấy nội dung chính từ HTML, trong nhiều trường hợp chỉ đủ để giữ các thành phần văn bản HTML (tức là khối văn bản không bị gián đoạn bởi đánh dấu) có nhiều hơn 10 từ. Có vẻ như con người chọn từ hai loại văn bản ("ngắn" và "dài", được đo bằng số từ mà chúng phát ra) cho hai động cơ viết văn bản khác nhau. Tôi sẽ gọi chúng là động lực "điều hướng" và "thông tin".

Nếu tác giả muốn bạn nhanh chóng nhận nội dung được viết, anh ấy/cô ấy sử dụng văn bản "điều hướng", tức là vài từ (như "STOP", "Đọc", "Nhấp vào đây"). Đây là loại văn bản chủ yếu nổi bật trong các phần tử điều hướng (menu, v.v.)

Nếu tác giả muốn bạn hiểu sâu ý nghĩa của từ, người đó sử dụng nhiều từ. Bằng cách này, sự mơ hồ được loại bỏ với chi phí tăng dự phòng. Nội dung giống như bài viết thường rơi vào lớp này vì nó có nhiều hơn chỉ một vài từ.

Trong khi tách này dường như làm việc trong một loạt các trường hợp, nó là nhận được khó khăn với các tiêu đề, những câu ngắn, từ chối về quyền, footers bản quyền, vv

Có chiến lược phức tạp hơn, và các tính năng, giúp đỡ mà tách nội dung chính từ boilerplate. Ví dụ mật độ liên kết (số từ trong khối được liên kết so với tổng số từ trong khối), các tính năng của khối trước đó/tiếp theo, tần suất của một khối văn bản cụ thể trong Web "toàn bộ", Cấu trúc DOM của tài liệu HTML, hình ảnh trực quan của trang, v.v.

Bạn có thể đọc bài viết mới nhất của tôi "Boilerplate Detection using Shallow Text Features" để hiểu rõ hơn về góc độ lý thuyết. Bạn cũng có thể xem video bài thuyết trình trên trang của tôi trên VideoLectures.net.

"Tính dễ đọc" sử dụng một số tính năng này. Nếu bạn cẩn thận xem các thay đổi SVN, bạn sẽ thấy rằng số lượng các chiến lược thay đổi theo thời gian, và do đó đã làm chất lượng khai thác của dễ đọc. Ví dụ, việc giới thiệu mật độ liên kết trong tháng 12 năm 2009 rất nhiều đã giúp cải thiện.

Theo ý kiến ​​của tôi, do đó, không có ý nghĩa khi nói "Tính dễ đọc thực hiện như thế", mà không đề cập đến số phiên bản chính xác.

Tôi đã xuất bản thư viện trích xuất nội dung HTML nguồn mở được gọi là boilerpipe, cung cấp một số chiến lược trích xuất khác nhau. Tùy thuộc vào trường hợp sử dụng, một hoặc bộ tách khác hoạt động tốt hơn. Bạn có thể thử các trình giải nén này trên các trang mà bạn chọn bằng ứng dụng web nồi hơi đồng hành trên Google AppEngine.

Để cho phép số nói, hãy xem trang "Benchmarks" trên trang wiki buồng lái so sánh một số chiến lược khai thác, bao gồm cả nồi hơi, khả năng đọc và Apple Safari.

Tôi nên đề cập rằng các thuật toán này giả định rằng nội dung chính thực sự là văn bản đầy đủ. Có những trường hợp "nội dung chính" là nội dung khác, ví dụ: một hình ảnh, một bảng, một đoạn video, vv Các thuật toán sẽ không hoạt động tốt cho các trường hợp như vậy.

Chúc mừng,

Christian

+3

Dự án nồi hơi này vẫn hoạt động? – Abby

+4

Tôi tin rằng bạn nên đưa dự án của mình lên GitHub để nó phát triển về mặt xã hội bởi các nhà phát triển nguồn mở. –

+1

Một ví dụ điển hình về giải thích của Tiến sĩ Kohlschütter thực sự là trang web này, trong Safari, nếu bạn sử dụng Reader, bạn sẽ thấy câu trả lời của mình được hiển thị dưới dạng văn bản chính, nhờ mật độ liên kết. Đó là văn bản được liên kết, do đó được công nhận là văn bản chính, khi so sánh với các khối khác. –

5

Thú vị. Tôi đã phát triển một kịch bản PHP tương tự. Nó về cơ bản quét các bài báo và đính kèm các phần của bài phát biểu cho tất cả các văn bản (Brill Tagger). Sau đó, các câu ngữ pháp không hợp lệ sẽ bị loại bỏ ngay lập tức. Sau đó, những thay đổi đột ngột trong đại từ hoặc quá khứ cho biết bài viết đã kết thúc hoặc chưa bắt đầu. Các cụm từ lặp lại được tìm kiếm và loại bỏ, như "tài chính thể thao tin tức Yahoo" xuất hiện mười lần trong trang. Bạn cũng có thể nhận được số liệu thống kê về giai điệu với rất nhiều ngân hàng từ liên quan đến những cảm xúc khác nhau. Những thay đổi đột ngột trong giai điệu, từ hoạt động/tiêu cực/tài chính, đến thụ động/tích cực/chính trị chỉ ra một ranh giới. Đó là vô tận thực sự, tuy nhiên đào bạn muốn sâu.

Các vấn đề chính là các liên kết, dị thường được nhúng, kiểu kịch bản và cập nhật.

+2

Âm thanh này giống như một cách tiếp cận thực sự thú vị - bạn có bất kỳ mã nào để chia sẻ từ điều này không? – lsh

+2

Tôi thứ hai, bạn có bất kỳ mã ví dụ hoặc thông tin nào xung quanh mã của bạn mà chúng tôi có thể xem không? – userabuser

Các vấn đề liên quan