2023年1月5日木曜日

jupyter nbconvert でセルの出力を抑制

jupyter のノートブックからHTMLやPDFを nbconvert で生成することができる。 しかし、多くの場合はすべてのセルを表示したいわけではないので、セル単位で 出力を抑制する必要がある。これにはいくつか方法がある nbconvert には preprocessor という概念がある。 この内の、TagRemovePreprocessorを使うと、特定のタグがついたセルの出力を抑制できる。そもそも「タグ」というのは何なのか知らなかったのだけど、セルごとに任意の属性を付加する事ができる仕掛けで、普通のJupyter notebookでもできるし、vscodeでもつけることができる。ただし結構使いづらい。 これを使うと、
jupyter nbconvert --to html --TagRemovePreprocessor.remove_input_tags='{"hide"}' test.ipynb
のようにして、入力セルだけを抑制できる。ここで hide としているのは任意のタグなので、適当に変更することができる。なんで波括弧が要るのか、よくわからない。 remove_input_tags を remove_cell_tags 、 remove_output_tags にすると、それぞれ入出力両方、出力セルのみの出力を抑制できる。

タグは柔軟で素晴らしいのだけど、タグを付けるのが結構面倒だし、ついているのかエディタ上で目視で確認する事ができない。 RegexRemovePreprocessor というものがあり、これはセルの内容に対して、正規表現で検索を行って、マッチしたら出力を抑制してくれる。

jupyter nbconvert --RegexRemovePreprocessor.patterns="['^# hide']" test.ipynb
素晴らしい、がこれはまるごと抑制してしまうので、入力だけ抑制することはできない。 ソースコードはsite-packages/nbconvert/preprocessors にあるのだけど、 全く対応していない。ほんのちょっといじればできそうなんだけどなあ。。 ということで、やってみたらできたので、 こちらにまとめた。

0 件のコメント: