21717


日本語学習者向けのサイトを構築するために漢字を含む日本語の文章にルビをつける機能が欲しいのですが、そのような機能を実装するためのライブラリはありますか？

そのような機能を提供するウェブページはあるのですが、ライブラリやAPIが見つかりませんでした。

<http://elephant.ddo.jp/exruby/rubyexpress.html>

できれば`ruby`で扱いたいのですが、Linux上で使えるものであればなんでも構いません。


CC BY-SA 3.0
2016-02-04T16:56:34.403
21716
2016-02-05T16:12:57.243
3271
question
ruby
日本語の文章に対してふりがなを付けるRubyのライブラリはありますか？


初めてルビのタグを見ましたが、"漢字"にルビをふるタグは次のようになるようです。タグの構成自体は簡単ですね。MeCabのような形態素解析で、漢字交じりの文を単語に分けて、かつその読みを取得すれば、良いと思います。

[code]

    <ruby>
      <rb>漢</rb>
      <rp>（</rp><rt>かん</rt><rp>）</rp>
    </ruby>
    <ruby>
      <rb>字</rb>
      <rp>（</rp><rt>じ</rt><rp>）</rp>
    </ruby>
    
[/code]

MeCabに「今日もしないとね。」と入力すると次のような出力が得られます。8番目の要素が読みなので,もし漢字が含まれていれば、8番目の読みをルビとすればよさそうです。

[code]

    % mecab -N2
    今日もしないとね。
    今日    名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
    も      助詞,係助詞,*,*,*,*,も,モ,モ
    し      動詞,自立,*,*,サ変・スル,未然形,する,シ,シ
    ない    助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
    と      助詞,接続助詞,*,*,*,*,と,ト,ト
    ね      助詞,終助詞,*,*,*,*,ね,ネ,ネ
    。      記号,句点,*,*,*,*,。,。,。
    EOS
    
[/code]


CC BY-SA 3.0
2016-02-04T17:11:31.030
21717
2016-02-04T17:11:31.030
7837
21716
answer


ライブラリではありませんが、Rubyとmecabコマンドでルビを処理してみました。入力形式はプレーンテキスト、出力形式はRe:VIEWの@<ruby>{}形式で。

[code]

    def apply_yomi w, y
      wk = w.tr 'ぁ-ん', 'ァ-ン'
      return w if wk == y
      c = %r[#{Regexp.quote(wk).gsub(/\p{Han}+/, '(.+)')}].match(y).captures
      w.gsub(/\p{Han}+/) {|m| "@<ruby>{#{m},#{c.shift}}" }
    end
    
    IO.popen(%w(mecab --node-format=%m\t%f[7]\n --unk-format=%m\t%m\n
                --eos-format=\n)).each_line do |s|
      if s.chomp!.empty?
        puts
      else
        print apply_yomi *s.split(/\t/)
      end
    end
    
[/code]

実行例。

[code]

    $ echo '我輩は猫である' | ruby ruby-ruby.rb
    @<ruby>{我輩,ワガハイ}は@<ruby>{猫,ネコ}である
    $ echo '本体に組み込むボード' | ruby ruby-ruby.rb
    @<ruby>{本体,ホンタイ}に@<ruby>{組,ク}み@<ruby>{込,コ}むボード
    
[/code]


CC BY-SA 3.0
2016-02-05T16:04:55.873
21755
2016-02-05T16:12:57.243
2016-02-05T16:12:57.243
4010
4010
21716
answer