The Googlemaps API works pretty well for this. E.g., suppose you are given the string “120 w 45 st nyc”. Pass it into the Googlemaps API like so: http://maps.google.com/maps/geo?q=120+w+45+st+nyc
and you get this response:
{
"name": "120 w 45 st nyc",
"Status": {
"code": 200,
"request": "geocode"
},
"Placemark": [ {
"id": "p1",
"address": "120 W 45th St, New York, NY 10036, USA",
"AddressDetails": {"Country": {"CountryNameCode": "US","CountryName": "USA","AdministrativeArea": {"AdministrativeAreaName": "NY","Locality": {"LocalityName": "New York","Thoroughfare":{"ThoroughfareName": "120 W 45th St"},"PostalCode": {"PostalCodeNumber": "10036"}}}},"Accuracy": 8},
"ExtendedData": {
"LatLonBox": {
"north": 40.7603883,
"south": 40.7540931,
"east": -73.9807141,
"west": -73.9870093
}
},
"Point": {
"coordinates": [ -73.9838617, 40.7572407, 0 ]
}
} ]
}