Macのターミナルで論文を読み上げる

論文を読むときに,目で追いながら耳からも入れたいという向きもあろうかと思う。

Macのターミナルを使って,英文を読み上げ音声ファイルに保存する方法を紹介します。引用部分をとばしてくれます。

結論

  1. 音声ファイルを保存したいディレクトリ(フォルダ)で,右クリック>フォルダに新規ターミナル
  2. ターミナルにpbpaste | sed -E 's:\([^)]+[0-9]{4}\)::g' | say -v Daniel -o article.m4aこのコマンドをコピペする。(まだ実行はしない)
  3. 読みたい論文の本文をテキストエディタなどで1つの長〜い文章にしておく
  4. 全文をクリップボードにコピーする(⌘+C)
  5. その状態で,ターミナルのコマンドを実行する(Enterキーをおす)

すると,そのディレクトリにarticle.m4aが作られます。長い文章だと,5~10秒くらいかかります。できたファイルをiPhoneにAirdropしてボイスメモアプリで聞くのもおすすめ。

解説

1.基本形

クリップボードの内容を読み上げてくれるコマンド。

pbpaste | say -v Daniel

pbpasteはクリップボード内容をターミナルの入力にする。|は,左の結果を右の引数にわたす機能がある。sayはMacに標準で入っている,読み上げのためのコマンド。合わせると,クリップボードにあるものをsayの引数として渡してね,ということになる。

-v Daniel は声色の選択オプション。多くの声から選べるが,Danielはイギリス英語の男声。偶然にも私の指導教員の名前と被っているが,だから選んだわけではないです。
これをちゃんと英語の声に指定しておくことで,sayコマンドが勝手に何語かを判断して声色がコロコロ変わるといったことを防げる。


使いかたは,

  1. 任意の場所でターミナルAppを立ち上げて,上のコマンドをコピペする。(まだ実行はしない)
  2. 読み上げてほしい英文を選択し,クリップボードにコピーする(⌘+C)
  3. その状態で,ターミナルのコマンドを実行する(Enterキーをおす)

すると,Macが話し始めるはず。


2.引用部分をとばす

論文の文章は,

... can promote anoxic conditions favorable to microbial CH4 production (Wang et al. 2017; Barba et al. 2019; Epron et al. 2023), and the water content of the wood demonstrates a large spatial variability within the trunk (Nakada 2006)...

というように,長い引用リストで文がずったずたになっていて,目で追っているならまだしも,音だけで聞いているとすぐわからなくなる。(引用リスト読み上げしているときはちょっと休憩できる,といっていた先輩もいるけれど)

そこで,読み上げる文章から,引用リストを除去することを考える。
いろいろ調べて試した結果,私の環境だと次のようなコードでうまくいった。

pbpaste | sed -E 's:\([^)]+[0-9]{4}\)::g' | say -v Daniel -o article.m4a

sed -Eは文字列のパターンマッチをするsedコマンドを拡張正規表現(-E)なるオプションで使いますという意味らしい。

sは置換コマンドで,s:置換前のパターン:置換後のパターン:という形をとり,末尾のgは該当するすべての箇所を対象にするという意味。

今回は,置換前のパターンは\([^)]+[0-9]{4}\),置換後のパターンは無であるから,つまりパターンマッチしたすべての箇所を除去するということになる。

さて,\([^)]+[0-9]{4}\)の意味。"("から始まり,任意の文字列が続き,4桁の数字(0-9の数字が4回続く)のあとに,")"で終わる,というパターンを表現している。"("は特殊文字なのでバックスラッシュでエスケープしてある。

ちなみに,コードをみれば分かる通り,さっき挙げた例文がもし "Epron et al. 2023a)"とかだったら,数字で終わっていないので,うまく除去されません。まあでもたまになんで見送ります。


そして,sayコマンドに,新しいオプション-o article.m4aがついているが,これは読み上げた音声をそのままスピーカーで流すんじゃなくて,音声ファイルに保存してね,という意味。sayコマンドは一時停止/再生ができないっぽいので,長い論文を読み上げるときには,音声ファイルにしてquicktime playerとかiPhoneのボイスメモとかで聞くほうが圧倒的に楽。この場合,保存したいディレクトリでターミナルを開いて実行する。

結論:使い方(冒頭とおなじ)

  1. 音声ファイルを保存したいディレクトリ(フォルダ)で,右クリック>フォルダに新規ターミナル
  2. ターミナルにpbpaste | sed -E 's:\([^)]+[0-9]{4}\)::g' | say -v Daniel -o article.m4aこのコマンドをコピペする。(まだ実行はしない)
  3. 読みたい論文の本文をテキストエディタなどで1つの長〜い文章にしておく
  4. 全文をクリップボードにコピーする(⌘+C)
  5. その状態で,ターミナルのコマンドを実行する(Enterキーをおす)

すると,そのディレクトリにarticle.m4aが作られます。長い文章だと,5~10秒くらいかかります。

(2025-Jan-7)