StringToNumber
Convert French written numbers into their numeric equivalents in Ruby.
Quick Start
gem 'string_to_number' # Add to your Gemfile, then: bundle install
require 'string_to_number'
StringToNumber.in_numbers('vingt et un') #=> 21
StringToNumber.in_numbers('mille deux cent trente-quatre') #=> 1234
StringToNumber.in_numbers('trois milliards') #=> 3_000_000_000
Features
- Fast — 14-460x faster than naive recursive parsing, via pre-compiled patterns and LRU caching
- Complete — handles all standard French number words from
zérotobillions, including compound forms (quatre-vingt-quatorze,soixante-dix) - Thread-safe — concurrent access with mutex-protected caches; >2M conversions/sec under contention
- Zero dependencies — pure Ruby, no external gems required
Install
Prerequisites: Ruby 2.7+
gem install string_to_number
Or in your Gemfile:
gem 'string_to_number'
Usage
require 'string_to_number'
# Simple numbers
StringToNumber.in_numbers('zéro') #=> 0
StringToNumber.in_numbers('quinze') #=> 15
StringToNumber.in_numbers('cent') #=> 100
# Compound numbers
StringToNumber.in_numbers('vingt et un') #=> 21
StringToNumber.in_numbers('quatre-vingt-quatorze') #=> 94
StringToNumber.in_numbers('neuf mille neuf cent quatre-vingt-dix-neuf') #=> 9999
# Large numbers
StringToNumber.in_numbers('un million') #=> 1_000_000
StringToNumber.in_numbers('deux millions trois cent mille') #=> 2_300_000
Validation and cache management
StringToNumber.valid_french_number?('vingt et un') #=> true
StringToNumber.valid_french_number?('hello world') #=> false
StringToNumber.cache_stats # inspect cache hit ratios
StringToNumber.clear_caches! # free cached data
For the full API, see the source documentation.
Known Issues
- Input must be French number words only — mixed text (e.g.
"il y a vingt personnes") is not supported - Regional Belgian/Swiss variants (
septante,nonante) are recognized, but coverage may be incomplete
Contributing
Bug reports and pull requests are welcome on GitHub.
Acknowledgments
Created by Fabien Piette. Thanks to all contributors.
