olauzon / chronic_distance

A simple Ruby natural language parser for distances.

This URL has Read+Write access

olauzon (author)
Sun Mar 01 20:41:36 -0800 2009
commit  f3a013efaa73bfb7d3b29a7001f01bf4fdd53e87
tree    5e09aac2ff58e3db18fedd328941880920e1bf46
parent  cf29914eedd1e269b7bd2a7813044d81bdc714ec
name age message
file .autotest Loading commit data...
file .gitignore
file MIT-LICENSE Sun Mar 01 20:06:38 -0800 2009 Initial chronic_distance commit [olauzon]
file README.rdoc
file Rakefile Sun Mar 01 20:06:38 -0800 2009 Initial chronic_distance commit [olauzon]
file VERSION.yml
file chronic_distance.gemspec
directory lib/
directory spec/
README.rdoc

Chronic Distance

A simple Ruby natural language parser for distances. Given a parse-able string distance, it returns the distance in millimeters.

The reverse can also be accomplished with the output method. Given a distance in millimeters, it outputs a string like "4 kilometers" or "4km" depending on the desired format.

Installation

    $ sudo gem sources -a http://gems.github.com
    $ sudo gem install olauzon-chronic_distance

Usage

    >> require 'chronic_distance'
    => true

Parsing examples

    >> ChronicDistance.parse('5 kilometers')
    => 5000000

    >> ChronicDistance.parse('4 miles')
    => 6437376

    >> ChronicDistance.parse('four miles')
    => 6437376

    >> ChronicDistance.parse('1000m')
    => 1000000

    >> ChronicDistance.parse('1000 meters')
    => 1000000

    >> ChronicDistance.parse('ten yards')
    => 9144.0

    >> ChronicDistance.parse('500 feet')
    => 152400.0

Nil is returned if the string can’t be parsed:

    >> ChronicDistance.parse('kilometers')
    => nil

Output examples

    >> ChronicDistance.output(5000000)
    => 5000000 mm

    >> ChronicDistance.output(5000000, :format => :short, :unit => 'kilometers')
    => 5km

    >> ChronicDistance.output(5000000, :format => :long, :unit => 'kilometers')
    => 5 kilometers

    >> ChronicDistance.output(5000000, :unit => 'meters')
    => 5000 m

    >> ChronicDistance.output(5000000, :format => :long, :unit => 'miles')
    => 3.10685596118667 miles

Inspiration

ChronicDistance borrows heavily from:

TODO

  • Benchmark, optimize
  • Other locale support

Copyright © 2009 Olivier Lauzon. See MIT-LICENSE for details.