Search code examples
phpnlpnumbers

Converting words to numbers in PHP


I am trying to convert numerical values written as words into integers. For example,

iPhone has two hundred and thirty thousand seven hundred and eighty three apps

would become

iPhone has 230783 apps

Is there any library or function that does this?


Solution

  • There are lots of pages discussing the conversion from numbers to words. Not so many for the reverse direction. The best I could find was some pseudo-code on Ask Yahoo. See http://answers.yahoo.com/question/index?qid=20090216103754AAONnDz for a nice algorithm:

    Well, overall you are doing two things: Finding tokens (words that translates to numbers) and applying grammar. In short, you are building a parser for a very limited language.

    The tokens you would need are:

    POWER: thousand, million, billion
    HUNDRED: hundred
    TEN: twenty, thirty... ninety
    UNIT: one, two, three, ... nine,
    SPECIAL: ten, eleven, twelve, ... nineteen

    (drop any "and"s as they are meaningless. Break hyphens into two tokens. That is sixty-five should be processed as "sixty" "five")

    Once you've tokenized your string, move from RIGHT TO LEFT.

    1. Grab all the tokens from the RIGHT until you hit a POWER or the whole string.

    2. Parse the tokens after the stop point for these patterns:

      SPECIAL
      TEN
      UNIT
      TEN UNIT
      UNIT HUNDRED
      UNIT HUNDRED SPECIAL
      UNIT HUNDRED TEN
      UNIT HUNDRED UNIT
      UNIT HUNDRED TEN UNIT

      (This assumes that "seventeen hundred" is not allowed in this grammar)

      This gives you the last three digits of your number.

    3. If you stopped at the whole string you are done.

    4. If you stopped at a power, start again at step 1 until you reach a higher POWER or the whole string.