【Mac】なろう記法を自動化
「小説家になろう」では、文字にルビを振ることができる。
CotEditor のスクリプトでこれを自動化してみたい。
といっても MeCab の yomi を使うだけだし、そもそも「なろう」のルビ振りは簡単で自動化するほどのものでもないのだが、あえてやるのである。
mecab のインストール
MeCabはオープンソースの形態素解析エンジンで、奈良先端科学技術大学院大学出身、現GoogleソフトウェアエンジニアでGoogle 日本語入力開発者の一人である工藤拓[1][2]によって開発されている。名称は開発者の好物「和布蕪(めかぶ)」から取られた。
MeCab – Wikipedia
mecab は Homebrew でインストールできる。
brew install mecab
mecab を使用するには、ipa辞書というのも必要だ。これも Homebrew でインストールできる。
brew install mecab-ipadic
準備はできた。
さっそく試してみる。mecab
で実行すると入力モードに入れる。終了するには control + c でいいのだと思う。
mecab↩
年賀状はお早めに↩
年賀状 名詞,一般,*,*,*,*,年賀状,ネンガジョウ,ネンガジョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
お 接頭詞,名詞接続,*,*,*,*,お,オ,オ
早め 名詞,一般,*,*,*,*,早め,ハヤメ,ハヤメ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
EOS
こんな風に出力される。これが形態素ということなのだろうか。ちょっと感動する。
-Oyomi
というオプションをつけるとヨミが表示され、-Owakati
というオプションでわかち書きされる。
$ mecab -Oyomi↩
鯨は歌を唄うらしい。↩
クジラハウタヲウタウラシイ。
$ mecab -Owakati↩
ウルトラマンがまだ帰らない。↩
ウルトラマン が まだ 帰ら ない
モードに入らずにヨミを表示する場合は、次のように書くみたいだ。
$ echo '牛乳二本買ってきて' | mecab -O yomi↩
ギュウニュウニホンカッテキテ
いい感じである。
さらにこれをカタカナから、ひらがなに変換する。文字コードを変換する nkf コマンドにはそのものずばり --hiragana
というオプションがある。
$ echo '牛乳二本買ってきて' | mecab -O yomi | nkf --hiragana↩
ぎゅうにゅうにほんかってきて
nkf もまた、Homebrew でインストールできる。
brew install nkf
今度こそ本当に準備完了だ。
「小説家になろう」におけるルビの振り方
小説家になろう、ではひと文字につき、10 文字のルビを振ることが出来る。書き方は、ふりがなを振る始点にパイプ、終点に二重の山パーレンでふりがなを指定する。
男は|冷灰《れいかい》のような目でわたしを見た。
|不来方《こずかた》の|羅刹《らせつ》童子
「違います、あのひとが来たのは|朝の《・・》の九時です」
上の例は、下の画像のようになる。
なお、ルビを振る対象が漢字ならパイプは省略できる。また、ルビがひらがななら、山カッコではなく普通の(かっこ)でもルビになる。
(かっこ)をただのカッコとして使う場合は、|(かっこ)とやればエスケープされる。
以上をふまえて、スクリプトを書いた。
CotEditor スクリプトメニュー
CotEditor には、文章やコードをスクリプトで処理する機能がある。シェルスクリプトばかりではなく、perl、php、ruby、python、javascript、swift、そして AppleScript が利用できる。
スクリプトは、メニューバーのアイコンから実行できる。
スクリプトメニュー > 「スクリプトフォルダを開く」を実行すると、スクリプトを置くフォルダが開かれる。書いたスクリプトをそこへ入れると、スクリプトメニューに表示されるようになるのだ。
今回のスクリプトは以下のように書いた。
#!/bin/bash
#%%%{CotEditorXInput=Selection}%%%
#%%%{CotEditorXOutput=ReplaceSelection}%%%
string=`cat -`
michigo=`echo "$string" | /usr/local/bin/mecab -x "未知語" | grep '未知語'`
if test -z "$michigo"; then
furigana=`echo "$string" | /usr/local/bin/mecab -O yomi | /usr/local/bin/nkf --hiragana -w`
echo -n '|'"$string"'《'"$furigana"'》'
else
echo -n '|'"$string"'《》'
fi
%%%{CotEditorXInput=Selection}%%%
は CotEditor からスクリプトが受け取るデータの指定である。指定には三つあり、CotEditorXInput=○○○○
の、○の部分に記述する。
以下は CotEditor のヘルプから抜粋する。
Selection | 現在選択しているテキスト |
AllText | 書類のすべてのテキスト |
None | 何も渡さない(デフォルト) |
%%%{CotEditorXOutput=ReplaceSelection}%%%
は、スクリプトが CotEditor に引き渡す、その方法だ。Input と同じく、CotEditorXOutput=○○○○
と指定する。
ReplaceSelection | 現在選択しているテキストを出力内容で置き換えます。 |
ReplaceAllText | 書類のすべてのテキストを出力内容で置き換えます。 |
InsertAfterSelection | 選択範囲の直後に出力内容を挿入します。 |
AppendToAllText | 書類の末尾に出力内容を挿入します。 |
NewDocument | 新規書類を作成し、そこに出力内容を挿入します。 |
Pasteboard puts | クリップボードに出力内容を格納します。 |
Discard | 何もしない(デフォルト) |
CotEditor ヘルプメニューの「CotEditor スクリプトガイド」>「スクリプトについて」にサンプルへのリンクがあり、参考になる。
Selection から受け取ったデータは標準入力に送られるので、
string=`cat -`
で変数に入れた。
mecab -x "未知語"
というのは、選択した言葉が辞書にない言葉だった時、未知語である、と返してくれる、というものだ。
なので「爆炎斬」に「エクスプロージョンスラッシュ」とかのルビは自動では振れない。「|爆炎斬《》」とふりがなのない形式で返ってくる。
nkf のオプション --hiragana -w
の、 -w は文字コードを UTF にするものである。これは書いている原稿の文字コードよって euc(-e) や shift-jis(-s) に書き換える必要がある、と思われる。
ここまで書いてきて、致命的な点に気づいた。
例えば「美味しい」を「おいしい」と読ませたい時だ。「美味」を選択すると「びみ」と返ってきてしまう。そこはしょうがないので我慢することにする。
実行した結果は以下のような感じだ。
スクリプトメニューをカスタマイズする
CotEditor のスクリプトメニューは簡単にカスタマイズできる。
・ファイル名の頭に、「 1) 」というように、数字と半角カッコ閉じを入れると、メニューの順番を指定できる。
📝 1)pタグ.sh
📝 2)ルビ.sh
・空のフォルダの名前に、順番、半角カッコ閉じ、ハイフンで仕切り線を指定できる。
📁 3)-
・ファイル名の拡張子の前に、ドットで区切ってキーボードショートカットを指定できる。
📝 1)pタグ.@$1.sh
📝 2)ルビ.@$2.sh
・アンダーバーを頭につけたフォルダはメニューに表示されない。
📁 _library
3 のキーボードショートカットの指定は記号でおこなう。上の例の「pタグ.@$1.sh」だと command + shift + 1がショートカットになる。 モディファイキーと記号の対応は以下の通り。
表記 | キー |
---|---|
^ | Control(コントロール) |
$ | Shift(シフト) |
~ | Option(オプション) |
@ | Command(コマンド) |
これらの命名規則は、ヘルプのスクリプトガイドに詳しく書いてある。
とくにキーボードショートカットを指定するとずいぶん便利に使える。
最近のコメント