Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題46

問題46 ルビを付ける

問題のファイルは

https://github.com/shellgei/shellgei160

からダウンロードできる。

mecab に通してやればいいと思ったが出力がタブ区切りになっていることに気が付かず詰まってしまった。

解答例は

mecab -E '' const26.txt | awk -F'[\t,]' '{print $1","$(NF-1)}' | nkf -h | sed -E 's/(.*),(.*)\1/(\2)\1/' | sed 's/(\**)//' | paste -sd ''

となる。タブ区切りとカンマ区切りを区切り文字として指定することで必要なところを抜き出せるようにしている。抜き出した後は必要に応じてカタカナをひらがなに直してから、sed でふりがなを振っている。ふりがなを振る際の処理は、例えば「有する, ゆうする」という風に抜き出してきた文字列に対して「する, ゆうする」だけをマッチさせて「(ゆう)する」という文字列に変換している。そして先に出力されている「有」の後ろに「(ゆう)する」が出力される。あとは整形しているだけである。