5

Rubyで序数(1番目、2番目、3番目など)を解析して整数に変換する方法を探しています。これを行うライブラリを知っていますか?

4

4 に答える 4

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日付と時刻を解析するように設計されており、「秒」は、そのコンテキストでは序数または時間の単位のいずれかである可能性があるためです。この問題を解決するために、次の行でモンキーパッチchronicNumerizerクラスを作成できます。

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

于 2012-11-02T19:55:13.900 に答える
1

Chronicがユースケースに合わない場合は、特にこれを対象としているように見えるnumerounoと呼ばれる宝石があります。

于 2012-11-02T20:49:18.477 に答える
0

私はdeordinalize(https://rubygems.org/gems/deordinalize)と呼ばれるgemを使用してきましたが、これはうまく機能しているようです。電話をかける前に必ずダウンケースにしてください。

>> require 'deordinalize'
>> 'Forty-Second'.downcase.deordinalize
=> 42
于 2013-02-19T18:06:13.590 に答える
0

序数の「2番目」を正しく解析するには:この行でNumerizerクラスにモンキーパッチを適用する必要があります

SINGLE_ORDINALS.insert(1, ['second', 2])
于 2014-06-04T12:52:14.393 に答える