Thread: [Pyparsing] Is it easy for pyparsing to convert dollar value to word?
Brought to you by:
ptmcg
From: Timmy <ti...@ne...> - 2006-01-02 01:51:49
|
Hello, I'm thinking that whether pyparsing can do the job of dollar value-to-word converter. I'm writing a program to convert dollar value such as $123.67 to word description. That means convert it to "one hundred and twenty three dollars and sixty seven cents". Do you think it is an easy or hard task? Can any one give me hints or pointer to do so? |
From: Paul M. <pa...@al...> - 2006-01-02 04:17:30
|
Timmy - I don't think pyparsing will address this task any better than just straight Python. Now if you want to parse a word expression like "one hundred and twenty three dollars and sixty seven cents" and get back the value 123.67, then I think pyparsing might be of interest. I just googled for such a number-to-words function in Python, and I didn't readily find one, but here is a URL for a Java version, that looks fairly convertible to Python: http://www.sourcecodesworld.com/howto/java/java-0426.asp. -- Paul -----Original Message----- From: pyp...@li... [mailto:pyp...@li...] On Behalf Of Timmy Sent: Sunday, January 01, 2006 7:52 PM To: pyp...@li... Subject: [Pyparsing] Is it easy for pyparsing to convert dollar value to word? Hello, I'm thinking that whether pyparsing can do the job of dollar value-to-word converter. I'm writing a program to convert dollar value such as $123.67 to word description. That means convert it to "one hundred and twenty three dollars and sixty seven cents". Do you think it is an easy or hard task? Can any one give me hints or pointer to do so? ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ Pyparsing-users mailing list Pyp...@li... https://lists.sourceforge.net/lists/listinfo/pyparsing-users |
From: Paul M. <pa...@al...> - 2006-01-02 05:56:27
|
Here's a word-to-value converter, just as a sample. This is the kind of problem that is most suitable for pyparsing. I'll include it in the examples directory for the next release. -- Paul # wordsToNum.py # Copyright 2006, Paul McGuire # # Sample parser grammar to read a number given in words, and return the numeric value. # from pyparsing import * def makeNumericParseAction(val): return lambda s,l,t: val def makeLit(s,val): return CaselessLiteral(s).setName(s).setParseAction( makeNumericParseAction(val) ) unitDefinitions = [ ("zero", 0), ("one", 1), ("two", 2), ("three", 3), ("four", 4), ("five", 5), ("six", 6), ("seven", 7), ("eight", 8), ("nine", 9), ("ten", 10), ("eleven", 11), ("twelve", 12), ("thirteen", 13), ("fourteen", 14), ("fifteen", 15), ("sixteen", 16), ("seventeen", 17), ("eighteen", 18), ("nineteen", 19), ] units = Or( [ makeLit(s,v) for s,v in unitDefinitions ] ) tensDefinitions = [ ("ten", 10), ("twenty", 20), ("thirty", 30), ("forty", 40), ("fifty", 50), ("sixty", 60), ("seventy", 70), ("eighty", 80), ("ninety", 90), ] tens = Or( [ makeLit(s,v) for s,v in tensDefinitions ] ) hundreds = makeLit("hundred", 100) majorDefinitions = [ ("thousand", int(1e3)), ("million", int(1e6)), ("billion", int(1e9)), ("trillion", int(1e12)), ("quadrillion", int(1e15)), ("quintillion", int(1e18)), ] mag = Or( [ makeLit(s,v) for s,v in majorDefinitions ] ) def wordprod(s,l,t): ret = 1 for v in t: ret *= v return ret def wordsum(s,l,t): return sum(t) and_ = Suppress(makeLit("and",0)) numPart = (((( units + Optional(hundreds) ).setParseAction(wordprod) + Optional(and_) + Optional(tens)).setParseAction(wordsum) ^ tens ) + Optional(units) ).setParseAction(wordsum) numWords = OneOrMore( (numPart + Optional(mag)).setParseAction(wordprod) + Optional(and_) ).setParseAction(wordsum) numWords.ignore("-") print numWords.parseString("one hundred twenty") print numWords.parseString("one hundred and twenty") print numWords.parseString("one hundred and three") print numWords.parseString("one hundred twenty-three") print numWords.parseString("one hundred and twenty three") print numWords.parseString("one hundred twenty three million") print numWords.parseString("one hundred and twenty three million") print numWords.parseString("one hundred twenty three million and three") print numWords.parseString("fifteen hundred and sixty five") print numWords.parseString("zero") |