'Parse Python String for Units

Say I have a set of strings like the following:

"5 m^2"
"17 sq feet"
"3 inches"
"89 meters"

Is there a Python package which will read such strings, convert them to SI, and return the result in an easily-usable form? For instance:

>>> a=dream_parser.parse("17 sq feet")
>>> a.quantity
1.5793517
>>> a.type
'area'
>>> a.unit
'm^2'


Solution 1:[1]

Quantulum will do exactly what you described

Excerpt from its description:

from quantulum import parser

quants = parser.parse('I want 2 liters of wine') 

# quants [Quantity(2, 'litre')] 

Solution 2:[2]

More recently, pint is a good place to start for most of these.

Solution 3:[3]

Is there an extension for ipython that can do at least part of what you want. It's called ipython-physics

It does store value and units and allows (at least) some basic math. I have never used it myself, so I don't know how easy would be to use in a python script

Solution 4:[4]

If you have 'nice' strings then use pint.

(best for unit conversions)

import pint
u = pint.UnitRegistry()
value = u.quantity("89 meters")

If you have text/sentences then use quantulum

from quantulum import parser

value = parser.parse('Pass me a 300 ml beer.') 

If you have 'ugly' strings then use try unit_parse.

Examples of 'ugly' strings: (see unit_parse github for more examples)

2.3 mlgcm --> 2.3 cm * g * ml
5E1 g/mol --> 50.0 g / mol
5 e1 g/mol --> 50.0 g / mol
()4.0 (°C) --> 4.0 °C
37.34 kJ/mole (at 25 °C) --> [[<Quantity(37.34, 'kilojoule / mole')>, <Quantity(25, 'degree_Celsius')>]]
Detection in water: 0.73 ppm; Chemically pure --> 0.73 ppm

(uses pint under the hood)

from unit_parse import parser

result = parser("1.23 g/cm3 (at 25 °C)")
print(result) # [[<Quantity(1.23, 'g / cm ** 3')>, <Quantity(25, 'degC')>]]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nielstron
Solution 2 Catherine Devlin
Solution 3 Francesco Montesano
Solution 4 basil_man