10 điểm bởi GN⁺ 2025-05-23 | 1 bình luận | Chia sẻ qua WhatsApp
  • Là công cụ loại bỏ các thành phần không cần thiết (bình luận, thanh bên, header, footer, v.v.) khỏi trang web để chỉ giữ lại phần nội dung chính
  • Khác với Mozilla Readability, công cụ này hoạt động linh hoạt hơn và hỗ trợ chuẩn hóa HTML nhất quán cho công thức, khối mã, chú thích cuối trang, v.v.
  • Được phát triển cho Obsidian Web Clipper và hướng tới khả năng tương thích với các công cụ chuyển đổi HTML-to-Markdown khác như Turndown
  • Tích hợp sẵn tính năng trích xuất nhiều loại metadata như kiểu dáng di động và dữ liệu schema.org
  • Hỗ trợ cả Node.js và trình duyệt, đồng thời có thể chọn nhiều gói bundle khác nhau tùy mục đích sử dụng

Điểm khác biệt giữa Defuddle và Readability

  • Bộ lọc khoan dung hơn, giúp giảm việc xóa nhầm các thành phần không chắc chắn
  • Xử lý nhất quán các vùng đặc biệt như chú thích cuối trang, công thức, mã
  • Tham chiếu stylesheet cho thiết bị di động của trang
  • Có thể trích xuất thêm thông tin như metadata schema.org, hình ảnh, favicon, ngày xuất bản, v.v.

Cấu hình bundle

  • Core bundle (defuddle): phù hợp để dùng trên trình duyệt, không có phụ thuộc bên ngoài
  • Full bundle (defuddle/full): bổ sung các tính năng như phân tích công thức
  • Node bundle (defuddle/node): tối ưu cho môi trường Node.js (JSDOM), hỗ trợ đầy đủ công thức và chuyển đổi Markdown

Cấu trúc đối tượng trả về

Defuddle trả về một đối tượng chứa các thông tin như sau

  • author: tên tác giả của bài viết hoặc trang
  • content: chuỗi nội dung chính đã được làm sạch
  • description: mô tả tóm tắt của bài viết hoặc trang
  • domain: tên miền của trang
  • favicon: URL favicon đại diện của trang
  • image: URL hình ảnh đại diện
  • metaTags: thông tin thẻ meta
  • parseTime: thời gian xử lý (tính bằng mili giây)
  • published: thông tin ngày xuất bản
  • site: tên trang web
  • schemaOrgData: dữ liệu trích xuất từ schema.org
  • title: tiêu đề nội dung
  • wordCount: số từ của nội dung chính

Tùy chọn

  • debug: bật logging để debug
  • url: chỉ định URL trang cần phân tích
  • markdown: chuyển nội dung chính sang Markdown
  • separateMarkdown: trả về đồng thời HTML và Markdown
  • removeExactSelectors: tùy chọn xóa selector khớp chính xác (quảng cáo, nút mạng xã hội, v.v.) (mặc định true)
  • removePartialSelectors: tùy chọn xóa selector khớp một phần (quảng cáo tương tự, v.v.) (mặc định true)

1 bình luận

 
GN⁺ 2025-05-23
Ý kiến Hacker News
  • Tôi không thích cách trình soạn thảo wysiwyg mình đang dùng chuyển từ markdown sang HTML, nên hy vọng nếu tự làm thanh công cụ và editor rồi áp dụng công cụ này thì có thể cho kết quả tốt hơn

  • Gần đây tôi từng tìm hiểu một chủ đề tương tự, nhưng không thật sự tin tưởng vào chất lượng của các bản triển khai Readability bằng nhiều ngôn ngữ khác nhau. Readability.js là tốt nhất, nhưng môi trường Javascript lại không phù hợp với dự án của tôi. Cuối cùng tôi chọn thư viện Trafilatura của Python để trích xuất nội dung chất lượng cao nhất, kể cả metadata, một cách chính xác. Có lẽ nếu so sánh bản triển khai của tôi với Trafilatura thì sẽ tìm ra các điểm cần cải thiện

    • Nếu dùng Go thì có bản Readability cho Go và bản port Trafilatura do tôi duy trì. Bản Trafilatura cho Go có hiệu năng tương đương bản Python. Liên kết tham khảo: go-shiori/go-readability, markusmobius/go-trafilatura
    • Tài liệu chính thức của Trafilatura có thể xem tại đây. Nhân tiện, Trafilatura trong tiếng Ý có nghĩa là “ép đùn”. Tên gọi này bắt nguồn từ đặc tính của macaroni là giữ sốt rất tốt, kèm theo một câu chuyện nền thú vị về thuật ngữ pasta. (Và cũng có góp ý rằng cách viết đúng là trafilatura chứ không phải trifatura)
  • Tôi đã dùng Obsidian Clipper từ những ngày đầu ra mắt và đặc biệt đánh giá cao tính năng trích xuất dựa trên profile theo từng website. Ngay cả khi không phải người dùng Obsidian, chất lượng trích xuất markdown của nó vẫn là mức đáng tin cậy nhất mà tôi từng thấy

    • Cảm ơn vì mẹo được gợi ý
  • Trong bối cảnh website ngày càng phức tạp và rối mắt, tôi nghĩ rất cần một bộ chuyển đổi markdown mạnh mẽ để người đọc có thể tập trung vào nội dung thực sự. Thật vui khi thấy có một dự án xuất hiện để lấp chỗ trống mà Readability để lại, và xin gửi lời ủng hộ

  • Tôi phát hiện ra Defuddle khi đang phân tích mã nguồn vì quá ấn tượng với chất lượng chuyển đổi markdown của Obsidian Web Clipper. Tôi dự định dùng nó cho ứng dụng read-it-later/knowledge-base đang tự phát triển, nên muốn nói lời cảm ơn trước

  • Tôi thắc mắc không biết Readability của Mozilla có thực sự bị bỏ bê hay không. Bản phát hành gần nhất mới chỉ cách đây 2 tháng, và maintainer Gijs cũng phản hồi issue rất tích cực

    • Tôi có phàn nàn rằng codebase này còn nhiều chỗ cần cải thiện. Tôi từng phải fork nó để sửa bug cho công việc. Ví dụ, có lỗi khiến toàn bộ thông tin giá trên các trang chứa ngôn ngữ dùng dấu phẩy giữa các chữ số như tiếng Hà Lan đều bị nhận diện là văn bản quan trọng. Khi tôi định gửi PR thì lại bắt buộc phải pass test, nhưng test bị fail ngay trên chính trang tôi đã kiểm tra, khiến việc merge trở nên khó khăn và khá thiếu hiệu quả
  • Xin giới thiệu dự án tương tự viết bằng PHP là markydown. Ưu điểm là có thể self-host rất dễ dàng

  • Obsidian Web Clipper là công cụ cực kỳ hữu ích để chuyển các cuộc trò chuyện chatGPT sang markdown, hoặc đơn giản là dùng cho mục đích in ấn

    • Một số client như Kagi Assistant có tính năng lưu trực tiếp nội dung hội thoại thành markdown. Dùng web-clipper của Obsidian cũng là một ý tưởng hay
    • Tôi thường yêu cầu chatGPT trực tiếp tạo phần tóm tắt hoặc nội dung cần thiết dưới dạng file markdown để sử dụng
  • Tôi thắc mắc vì sao ở một số website, khi truy cập bằng chế độ đọc (ví dụ reader trên iPhone), màn hình lại trắng xóa hoặc bài viết không hiển thị đúng, đặc biệt là trên các trang tin tức. Có phải họ cố tình ẩn nội dung để ép hiển thị quảng cáo không, và nếu đúng thì thường áp dụng bằng cách nào?

    • Những vấn đề này thường do banner quyền riêng tư hoặc thông báo cookie gây ra, nhất là ở EU/UK/California. Một số website chỉ hiện các banner này dưới dạng modal nên chế độ đọc vẫn xử lý được, nhưng cũng có nơi dùng redirect hoặc server-side rendering để che hẳn nội dung. Khi dùng chế độ đọc, nên thử đóng các banner liên quan trước rồi thử lại