メインコンテンツへスキップ

Readabilityの代替 Defuddleとは? HTMLをMarkdownに変換

·3 分
2025/05 HTML プログラミング Markdown Webスクレイピング ユーティリティ

Readabilityの代替 Defuddleとは? HTMLをMarkdownに変換

引用元:https://news.ycombinator.com/item?id=44067409

tmpfs 2025/05/22 22:40:32

最近これ調べてたんだけど、Readabilityの各言語実装には正直イマイチだったんだよね。Readability.jsが一番マシだったけど、Javascriptってのがプロジェクトに合わなくてさ。結局、python trifaturaってライブラリが見た感じ一番精度高くて、メタデータも正確だったんだ。君の実装とtrifaturaを比べてみたら、改善点が見つかるかもよ。

acrophobic 2025/05/23 03:41:16

>…Javascriptなのがプロジェクトに合わなかった”についてだけどさ、もしGo使ってるなら、Readability[0]とTrafilatura[1]のGoポートを俺がメンテしてるんだよ。これらは積極的にメンテされてて、Trafilaturaの方はPython版と遜色ないパフォーマンスだよ。
[0]: https://github.com/go-shiori/go-readability
[1]: https://github.com/markusmobius/go-trafilatura

derekperkins 2025/05/26 03:58:33

俺たちもgo-trafilaturaずっと使ってるけど、めちゃくちゃ気に入ってるよ。

breadchris 2025/05/23 17:47:21

これこれ!これ見たかったんだよ、ありがとう!

fabmilo 2025/05/23 01:16:06

ライブラリへの参照:https://trafilatura.readthedocs.io/en/latest/
知りたい人向け:Trafilaturaはイタリア語で”押し出し”って意味だよ。|この方法は多孔質の表面を作って、パスタがソースをすごくよく絡むようにするんだ。maccheroni trafilatiとmaccheroni lisciで検索してみてね:)(そういえば、trifaturaじゃなくてTrafilaturaって言いたかったんだと思うよ)

thm 2025/05/23 03:47:24

最初から使ってるけど、2.0.0以降開発がかなり止まっちゃってるんだよね。

winddude 2025/05/23 15:07:46

ちょっと古いけど、何年か前にいくつかのウェブ抽出ツールのベンチマークやったんだ。https://github.com/Nootka-io/wee-benchmarking-tool
その時はresiliparse-plainが断トツの勝者だったよ。

creakingstairs 2025/05/22 23:14:14

ちょうどobsidian web-clipperのソースコード見てたんだ。Markdown変換の結果がすごく良かったから impressed してたんだけど、そこでDefuddleを見つけたんだよ。自作のread-it-later/ knowledge-baseアプリで使う予定だから、事前にありがとうね:D

Tsarp 2025/05/23 03:18:06

obsidian clipperは出た初日から使ってるけど、これは本当にすごいね。サイトごとのプロファイルベースの抽出が最高だよ。たとえobsidianユーザーじゃなくても、Markdown抽出の品質はこれまで見た中で一番信頼できるね。

audessuscest 2025/05/23 06:24:28

情報ありがとう!

binarymax 2025/05/23 13:44:39

良い仕事だね.JSDOMの例が助かるよ,まさにReadabilityみたいに使う方法だからね,これ良いドロップイン代替になりそう.
質問なんだけど: これどうやって検証したの? Readabilityより良いって言うけど,精度とか網羅性を評価するテストやデータセットがリポジトリにないみたいだけど.それも共有できる?

kepano 2025/05/23 20:12:42

今は手動テストとユーザーフィードバックに頼ってるんだけど,うん,テストは追加したいと思ってるよ.
DefuddleはReadabilityとはかなり違う動きをするんだ.Readabilityは用心深すぎて,メインコンテンツの開始と終わりを見つけるためにブロックをテストするから,役に立つコンテンツまで削除しがちだね.
Defuddleは複数回実行できて,コンテンツが返されなかった場合に結果を広げるように試せるんだ.コンテンツをきれいにするのに,より多様な技術も使うよ ー 例えば,ページのモバイルスタイルを使って非表示にできるコンテンツを検出したりね.
最後に,Defuddleはコンテンツを抽出するだけでなく,出力も標準化してるんだ(これはReadabilityはやらないこと).例えば脚注やコードブロックは全部一つのフォーマットで出力することを目指してるんだけど,Readabilityは元のDOMをそのままにするんだ.

honodk123 2025/05/27 10:44:30

これすごいね! Readabilityの代替としてDefuddleを試したいんだけど,私のユースケースだとChrome拡張のバックグラウンドスクリプト(サービスワーカー)でやりたいんだ.Readabilityは動くのに,Defuddleが動かせないでいるんだ(linkedomと組み合わせた時).つまり,これは動くのに: import { parseHTML } from ’linkedom’;

private extractArticleWithReadability(html: string) {
const { document } = parseHTML(html);
const reader = new Readability(document);
return reader.parse();
}

これは動かないんだ: import { parseHTML } from ’linkedom’;

private async extractArticleWithDefuddle(html: string) {
const { document } = parseHTML(html);
const result = new Defuddle(document);
result.parse();
return result;
}

こういうエラーが出るんだ:
- Error in findExtractor: TypeError: Failed to construct ’URL’: Invalid URL
- Defuddle: Error evaluating media queries: TypeError: undefined is not iterable (cannot read property Symbol(Symbol(Symbol.iterator)))
- Defuddle Error processing document: TypeError: b.getComputedStyle is not a function
Chrome拡張のバックグラウンドスクリプト/サービスワーカーでDefuddleを動かす方法ってある? それとも,そのためのサポートを追加する予定はある?

jeanlucas 2025/05/23 01:54:56

Obsidian Web Clipperって,chatGPTの会話をmarkdownにしたり,印刷したりするのにすごく良いツールだよ(マジで,そういうユースケースもあるんだ).

emaro 2025/05/23 07:15:16

他のクライアントについては分からないけど,Kagi Assistantは直接会話をMarkdownで保存できる機能があるよ.Obsidianのウェブクリッパーも良いアイデアだけどね.

T0Bi 2025/05/23 02:19:07

ChatGPTに,必要なサマリーとかをmarkdownファイルとして提供してって,直接お願いしちゃうよ.

jeanlucas 2025/05/24 00:10:03

無料のオープンソースだよ: https://github.com/obsidianmd/obsidian-clipper

acrophobic 2025/05/23 02:23:03

MozillaのReadabilityって本当に放棄されたの? 最新リリース(v0.6.0)はたった2ヶ月前だし,そのメンテナー(Gijs)も問題への対応にかなりアクティブみたいだけど.

khasan222 2025/05/23 05:40:49

正直言ってあのコードベースは改善点ありまくりだね.仕事でバグ(数字のカンマ誤認識とか)直すためにフォークしたくらい.プルリクもテスト必須なのにテスト自体が動かないし.個人的にはもう問題だらけって感じ.

fabrice_d 2025/05/23 16:12:13

これは多分 https://github.com/mozilla/readability/pull/853#issuecomment… のことだね.彼らの要求はかなり合理的だと思うよ.

khasan222 2025/05/23 17:12:12

うーん,もしかしたら問題に近すぎんのかな,分かんないけど.ツール使おうとしてうまく動かないのはいつもイライラするよね.無料なのは分かってるけど,やっぱ良い貢献をしてもらえるように手助けするのが,メンテとかバグ修正には一番大事な気がするんだ.カンマ問題は絶対バグなのに,直そうって気がないのがちょっと残念だし,だからこのリポジトリは死にかけだと思うんだよ.

fabrice_d 2025/05/24 00:19:32

”パッチがちゃんと動くこと,そして将来それを壊さないことを確実にしたい”っていう言葉を”直す気がない”ってどう解釈できるのか,僕には分からないな.まあ,君は君の考え方でいいけどね.

rcarmo 2025/05/22 21:50:21

Python版のReadabilityはメンテしっかりされてるみたいだね.何年か前に自分でReadabilityアルゴリズムを実装したことあったけど,そっちに乗り換えたんだ.いくつかスクレイパー動かしてるけど,定期的にアップデートされてて調子いいよ.

kepano 2025/05/22 21:55:06

具体的にどれかおすすめある?

khimaros 2025/05/22 22:11:11

親コメントじゃないけど,これがメンテされてるみたいだよ https://github.com/buriy/python-readability

novoreorx 2025/05/24 10:04:47

Substance [^0] っていう似たプロジェクト作ったよ.たいていのReadabilityツールと違って,サイトごとに処理方法を定義できるフレームワークなんだ.だから対応サイトごとに質の高い結果が出せるんだよ.[^0]: https://substance.reorx.com/

Andr2Andr 2025/05/23 08:19:21

真面目な質問なんだけど,誰が何のためにこのツール使うの?具体的なユースケースって何?他のコメントだと ChatGPT の会話をmdにエクスポートするくらいしか見なかったんだけど.

rollcat 2025/05/23 08:35:45

これはツールじゃなくてライブラリだよ.色々な用途に使えるんだ.
- サイト訪問者に”リーダーモード”提供
- ブラウザ拡張機能で使う
- スクレイピング
- [リバース] プロキシに組み込んでページ軽量化(例えば retro hardware 向け)
詳しい例はこちら:https://web.archive.org/web/20240621144514/https://humungus…. (サイトがよく落ちるからアーカイブね)

degosuke 2025/05/23 08:30:31

LogSeqをよく使ってるんだけど、ウェブサイトからテキストだけをMDで抜き取れるオプションは、LogSeqとめっちゃ相性良さそう。

jonplackett 2025/05/23 07:02:21

リーダー機能が効かないサイトがあるの知ってる?普通の記事でテキストいっぱいなのに、iPhoneのリーダーで開くと真っ白になるんだ。ニュースサイトに多いかな。
これって広告表示させるために、サイト側がわざとコンテンツを見えなくしてるの?だとしたらどうやってるんだろう?

もっとコメントを表示(1)
miki123211 2025/05/23 07:07:21

クッキーとかプライバシーに関するバナーが原因のことが多いよ、特にEUとかUK、カリフォルニアとかね。
サイトによってはコンテンツを覆うだけのモーダルだからリーダーモードで対処できるけど、リダイレクトされたりサーバー側で処理されてたりするとダメなんだ。
リーダーモードが効かないなら、まずバナーを閉じてからもう一回試してみて。

severusdd 2025/05/23 10:18:50

これめっちゃいいね!最近のサイトってごちゃごちゃしてて情報過多だから、読者がコンテンツを読むのに集中できるような強力なMarkdownコンバーターが本当に必要とされてるんだよね。
Readabilityがいなくなった穴を埋めるものが出てきて嬉しいよ。この仕事を引き継いでくれてありがとう :-)

busymom0 2025/05/22 21:49:43

プレイグラウンドでURLを入力した後、どうやって送信してURLを取得するのか分からないんだけど?iOSキーボードでエンターキーを押しても何も起こらないんだ。何か見落としてるのかな?

kepano 2025/05/22 21:54:12

あの入力欄はURLオプションをテストするために置いたものなんだ―ちょっと分かりにくかったから、今は削除したよ。GitHub Pagesからリクエストをプロキシする良くて無料の方法がまだ見つかってないんだよね。

ricardonunez 2025/05/23 11:19:25

試してみるよ。今使ってるWYSIWYGエディタのMarkdownからHTMLへの変換設定に満足してないんだ。自分でツールバーとかエディタを作ったら、こっちの方が良い結果を出してくれるかもね。

ulrischa 2025/05/23 09:01:17

似たようなものをPHPで作ったことがあるよ。
https://devkram.de/markydown
自分でホストするのに簡単だよ。

inhumantsar 2025/05/22 23:40:08

Readabilityがもうダメそうだってのは間違いないね。SlurpっていうObsidianプラグインで使ってたんだけど、これはweb clipperと同じ目的で、PRのレビューとかマージがいつも大変だったんだ。
自分で代替を作ろうとしたんだけど、人生(とweb clipper)で頓挫しちゃった。面白いことに、web clipperがあるのにSlurpはなぜかユーザーが増え続けてるんだよ。だから近いうちに、もうSlurpは使ってないけど、君のライブラリを使うようにリファクタリングしないといけないかもね。

ahsd1 2025/05/23 16:47:19

いいね。僕はHTMLメールから署名とか定型的な免責事項を削除するのに似たようなものを探してるんだ。これってそれに使えるかな?

billconan 2025/05/22 22:35:52

裏でAIモデル使ってるの?コードにGeminiとか見かけたんだけどさ.Readabilityと比べてコストどうなのかなって知りたくて聞いてるんだ.サンキュー!

kepano 2025/05/22 22:46:39

いやいや,全部ルールベースだよ.「extractors」ってコードのことかな?あれはコメントスレッドがあるサイト(例えばHN,Reddit)とか,会話型のチャット(ChatGPT,Claude,Gemini)の出力を統一するためのサイト別ルールなんだ.今ちょうど開発中だよ.

pugio 2025/05/23 03:05:17

主要なLLMプロバイダー全部からMarkdownを確実に抽出できるのあったら最高だね.DefuddleをシェアされたGeminiのURLで試したんだけど,「Sign In」リンクしか返ってこなかったんだ.もしかしてextractorの使い方間違ってる?レンダリングされた会話HTMLってどうやって手に入れてるの?

bambax 2025/05/23 07:09:11

たぶん,ほとんどのLLMのAPIはMarkdownを返してて,md→htmlへの変換はその後に行われてるんじゃないかな.だからAPIを直接叩けばMarkdownは「タダで」手に入ると思うよ.

timdeve 2025/05/23 08:50:52

良さそうだね.RSS readerのreadabilityとこれ入れ替えて使ってみるつもり.Pocketなくなるみたいだから,後で読む機能もこれに追加しなきゃかもな….

90s_dev 2025/05/23 00:04:37

いいね.あと~3行くらいコード書けば,URLを受け取ってシンプルなHTMLで表示できるようにして,完全な代替になれるんじゃない?

infogulch 2025/05/23 17:39:08

Javascriptで書かれてるから,ブックマークレットとしてパッケージ化できたりしないかな?

khaki54 2025/05/23 01:18:13

obsidian clipperも含めて,ほぼ完璧みたいだね.ありがとう!

revskill 2025/05/23 08:07:47

Markdownがform要素をサポートしてないって興味深いね.

miketromba 2025/05/23 18:25:33

すごい良い仕事だね.Readabilityの現代的な代替は本当に必要だったんだ.特にLLM向けのきれいなウェブコンテキストを作るのにめちゃくちゃ役立つよ.オープンソースにしてくれてマジありがとう!

elcritch 2025/05/23 19:08:13

LLMってWebページをMarkdownにするのめっちゃ得意だよね 特にClaudeとかGeminiとかさ でもHugging Faceのローカルモデルは全然ダメだったんだよね プロンプト無視したり要約しちゃったりJavaScriptの説明とかしだすし MacBookで動かせるやつ色々試したけど全部ダメだったよ

input_sh 2025/05/22 23:17:24

ちょっと本題から外れるんだけど
Basesのリリースめっちゃ楽しみにしてるんだ
1年くらいロードマップ追いかけてて
ずっと”planned”のところに張り付いてるの見るとガッカリしてたんだよね
まあObsidianとDataviewで
「あとで読む」機能はもう作っちゃったんだけど
これがあると絶対もっと簡単になるよね!

input_sh 2025/05/23 09:01:00

これのことだよ → https://help.obsidian.md/bases
これプレビュー版(Catalyst)使ってるんだけど
もうすぐ正式版が出ると思うよ
そしたらkepanoがここに投稿するんじゃないかな

fkfyshroglk 2025/05/22 22:26:20

Readabilityを知らない人のためにリンク貼っとくね → https://github.com/mozilla/readability

simpaticoder 2025/05/23 00:09:14

面白いね
こういうツールって悪用されるのをどうやって防ぐの?
ユーザー側はどうやって
このツールに悪用されないって信じればいいの?
技術的な話だと
同じページの中にある画像とかのファイルでも
リクエストごとにIP変えてるの?

ghilston 2025/05/23 00:24:38

面白い!
Webサイトに無料プランの制限が書いてないんだけど
教えてもらえない?

andrethegiant 2025/05/23 00:37:25

無料枠(有料プランなしでAPIキー使う場合ね)は1分間に10リクエストまでって制限があるよ。詳しくはこちら https://pure.md/docs/#section/Rate-limits

kepano 2025/05/23 01:31:13

気軽に手伝ってね :)

latchkey 2025/05/23 01:51:30

30年オープンソース開発やってる俺の経験から言うけど、”気軽に手伝って”って軽いノリじゃダメだよ。
テストフレームワークを準備して、手伝ってくれる人にはテストも一緒に書いてもらうようにしないと。
ただコード出すだけじゃ誰も手伝わないし、むしろ引かれるんだ。
低評価の人には申し訳ないけど、これはあの軽い返事への大事なフィードバックだよ。

jeanlucas 2025/05/23 01:55:42

ただ文句言いたいだけで何も役に立つこと言ってないじゃん?
全然言いたいこと分かんないんだけど。

latchkey 2025/05/23 02:04:08

ごめん、言いたいこと伝わってないね。文句じゃなくて、”気軽に手伝って”への長年の経験者からのアドバイスだよ。
俺の6年やってるプロジェクト(500スター、月49kダウンロード)は、ユニットテストがしっかりしてるから信頼されてる。始めた頃は人に頼らず自分で努力したんだ。ツール作るだけじゃなく、基礎作りが重要なんだよ。

m0zzie 2025/05/23 02:51:27

知ってたらごめんね。フラグ立ってるみたいだから補足だけど、作者はObsidianのCEOで成功プロジェクトもある人だよ。
だから、自分の500スター自慢とか、”始めた頃は人に頼らず自分でやった”みたいな言い方は、みんなを不快にさせてるんじゃないかな。

もっとコメントを表示(2)
latchkey 2025/05/23 02:55:10

”あのプロジェクトを始めた頃”ってのを明確にしたよ。俺は30年開発やってるし、CEOでもある。
Java@Apacheを立ち上げたりTomcatをオープンソース化したり、成功プロジェクトはたくさんあるんだ。
色々失敗したけど、人への返事で軽く振る舞ったのもその一つ。ただ知見をシェアしたいだけだよ。

m0zzie 2025/05/23 03:16:51

君のその後の投稿や編集でトーンが明確になって助かるよ。読者にもそれが伝わるといいね。

記事一覧へ

海外テックの反応まとめ
著者
海外テックの反応まとめ
暇つぶしがてらに読むだけで海外のテックニュースに詳しくなれるまとめサイトです。