I'm having a set of free text from web. Since the users type their location in that field, we have many un-normalized city names.
"Shanghai, China" "China, ShangHai" might mean the same city.
Note this is slightly different (should be easier) than named entity recognition since we know in this field it's just city names/places.
My question is, how do I normalize these free text and match them with known city names in our database? We have a standard database in the format of
The best I can think of is sort of fuzzy string matching. Are there any existing research/tools doing this?