Rubyで序数(1番目、2番目、3番目など)を解析して整数に変換する方法を探しています。これを行うライブラリを知っていますか?
4 に答える
chronic
宝石が日付を解析するプロセスの一部としてこれを行うことに気付いたとき、私はこの質問をする途中でした。gemをインストールした後、序数を整数に非常に簡単に変換できます。
irb(main):001:0> require 'chronic'
=> true
irb(main):002:0> Chronic::Numerizer.numerize("eighty-fifth").to_i
=> 85
編集:残念ながら、chronic
序数の「秒」を正しく解析していないようです。
irb(main):003:0> Chronic::Numerizer.numerize("twenty-second").to_i
=> 20
この理由は、chronic
日付と時刻を解析するように設計されており、「秒」は、そのコンテキストでは序数または時間の単位のいずれかである可能性があるためです。この問題を解決するために、次の行でモンキーパッチchronic
のNumerizer
クラスを作成できます。
Chronic::Numerizer::ORDINALS.insert(1, ['second', '2'])
今それは動作します:
irb(main):005:0> Chronic::Numerizer.numerize("eighty-second").to_i
=> 82
ただし、実際chronic
にその意図された目的で使用している場合は、おそらくその内部をねじ込みたくないでしょう。その場合、ソースコードをからChronic::Numerizer
新しいクラスにコピーして、代わりにそのクラスを使用できます。新しいクラスの定数に追加['second', '2']
することを忘れないでください。ORDINALS
Chronicがユースケースに合わない場合は、特にこれを対象としているように見えるnumerounoと呼ばれる宝石があります。
私はdeordinalize(https://rubygems.org/gems/deordinalize)と呼ばれるgemを使用してきましたが、これはうまく機能しているようです。電話をかける前に必ずダウンケースにしてください。
>> require 'deordinalize'
>> 'Forty-Second'.downcase.deordinalize
=> 42
序数の「2番目」を正しく解析するには:この行でNumerizerクラスにモンキーパッチを適用する必要があります
SINGLE_ORDINALS.insert(1, ['second', 2])