10 ポイント 投稿者 GN⁺ 2025-05-23 | 1件のコメント | WhatsAppで共有
  • Webページから**不要な要素(コメント、サイドバー、ヘッダー、フッターなど)**を取り除き、本文だけを残すツール
  • Mozilla Readabilityとは異なり、より柔軟に動作し、数式・コードブロック・脚注などの一貫したHTML標準化をサポート
  • Obsidian Web Clipper向けに開発され、他のHTML-to-Markdown変換ツール(Turndownなど)との互換性を目指している
  • モバイルスタイルやschema.orgデータなど、多様なメタデータ抽出機能を内蔵
  • Node.jsとブラウザーの両方をサポートし、用途に応じてさまざまなバンドルを選択可能

DefuddleとReadabilityの違い

  • より寛容なフィルタリングにより、不確かな要素の削除を減らす
  • 脚注、数式、コードなど特殊領域を一貫して処理
  • ページのモバイル用スタイルシートを参照
  • schema.orgメタデータ、画像、favicon、公開日など追加情報の抽出が可能

バンドル構成

  • Coreバンドル(defuddle): ブラウザー利用に適し、外部依存なし
  • Fullバンドル(defuddle/full): 数式パースなどの追加機能を搭載
  • Nodeバンドル(defuddle/node): Node.js(JSDOM)環境に最適化され、数式・Markdown変換を完全サポート

返却オブジェクト構造

Defuddleは以下の情報を含むオブジェクトを返す

  • author: 記事またはページの著者名
  • content: 整形された本文コンテンツ文字列
  • description: 記事またはページの要約説明
  • domain: サイトのドメイン名
  • favicon: サイトの代表ファビコンURL
  • image: 代表画像URL
  • metaTags: メタタグ情報
  • parseTime: 処理所要時間(ミリ秒単位)
  • published: 公開日情報
  • site: サイト名
  • schemaOrgData: schema.org抽出データ
  • title: コンテンツのタイトル
  • wordCount: 本文の単語数

オプション

  • debug: デバッグログを有効化
  • url: 解析対象ページURLを指定
  • markdown: 本文をMarkdownに変換
  • separateMarkdown: HTMLとMarkdownを同時に返却
  • removeExactSelectors: 完全一致セレクター(広告、ソーシャルボタンなど)を削除するオプション(デフォルト値 true)
  • removePartialSelectors: 部分一致セレクター(類似広告など)を削除するオプション(デフォルト値 true)

1件のコメント

 
GN⁺ 2025-05-23
Hacker Newsのコメント
  • 普段使っているWYSIWYGエディタのMarkdownからHTMLへの変換方法が気に入らないので、自分でツールバーとエディタを作ってこのツールを適用すれば、より良い結果が得られそうだという期待

  • 最近似たテーマを調べたことがあるが、さまざまな言語で実装されたReadabilityの品質には確信が持てなかった。Readability.jsが最も優れていたが、JavaScript環境が自分のプロジェクトには合わなかった。結局、メタデータまで正確に高品質なコンテンツを抽出する用途では、PythonのTrafilaturaライブラリを選んだ。自分の実装とTrafilaturaを比較すれば、改善ポイントが見つかるかもしれないという提案

    • Go言語を使うなら、私がメンテナンスしているGo向けのReadabilityとTrafilaturaの移植版がある。TrafilaturaのGo版はPython版と性能がほぼ同等。参考リンク: go-shiori/go-readability, markusmobius/go-trafilatura
    • Trafilaturaの公式ドキュメントはこちらで確認可能。ちなみにTrafilaturaはイタリア語で「押し出し」という意味。マカロニがソースをよく絡める性質に由来する名称との説明とともに、パスタ用語の興味深い背景も紹介されている。(そして trifatura ではなく trafilatura が正しい表記だという指摘も)
  • Obsidian Clipperをリリース初期から使っており、サイトごとのプロファイルベース抽出機能を特に高く評価している。Obsidianユーザーでなくても、Markdown抽出品質はこれまで見た中で最も信頼できる水準

    • おすすめのヒントへの感謝
  • 最近のウェブサイトはますます複雑で雑然としているので、読者が実際のコンテンツに集中できるようにする堅牢なMarkdownコンバーターがぜひ必要だと思う。Readabilityの空白を埋めるプロジェクトが登場してうれしい、という感想と応援

  • Obsidian Web ClipperのMarkdown変換品質に感嘆してソースコードを分析していたところ、Defuddleを見つけた。自分で開発しているread-it-later/knowledge-baseアプリに活用する予定なので、先に感謝を伝えたい気持ち

  • MozillaのReadabilityが本当に放置されているのか気になる。最近のリリースは2か月前で、メンテナーのGijsのissue対応も非常に活発

    • あのコードベースには改善点が多いという不満。業務でバグ修正のためにフォークした経験を共有。たとえばオランダ語のように数字の間にコンマを使う言語が含まれたページの価格情報を、すべて重要なテキストとして認識してしまうバグがある。PRを出そうとしたが、テスト通過が必須で、自分がテストしたページではテストが失敗し、マージが難しいという非効率を経験した
  • PHPで開発した類似プロジェクト markydown の紹介。手軽にセルフホストできる利点

  • Obsidian Web Clipperは、chatGPTの会話内容をMarkdownに変換したり、簡単に印刷用として使ったりする際に非常に便利なツールだという実利用例

    • Kagi Assistantをはじめ、一部のクライアントは会話内容をそのままMarkdownで保存する機能を提供している。Obsidianのweb-clipperを活用する方法も良いアイデアだという意見
    • 私はchatGPTに要約や必要な内容をMarkdownファイル形式で直接リクエストして活用している
  • 一部のウェブサイトで、読み取りモード(例: iPhoneのリーダー)でアクセスすると画面が真っ白になったり、記事が正しく表示されなかったりする理由への疑問。特にニュースサイトでよく遭遇する現象。広告表示のために意図的に隠しているのか、可能ならどう実装しているのかという問題提起

    • こうした問題は、特にEU/UK/カリフォルニアなどではプライバシーバナーやCookie通知が原因であることが多い。一部のウェブサイトではこれらのバナーがモーダルで表示されるだけなので、読み取りモードでもうまく処理されるが、それ以外ではリダイレクトやサーバーサイドレンダリングによってコンテンツ自体を完全に隠してしまう場合もある。読み取りモードを使う際は、まず関連バナーを閉じてから再試行する方法がおすすめ