I need to join a table to a shapefile based on the names of the items. Problem is, the items are regional names translated in English from Chinese and sometimes the names don't match (e.g. a 'sh' in the shapefile might be a 'sc' in the table), which means a classic join only returns half of the matches. Unfortunately neither the shapefile nor the table have region codes. How can I implement a fuzzy join so that the matches include similar but not identical names?
1 Answer
There is no such thing as a fuzzy join, built into the system. So you would have to define all the rules yourself to transform fuzzy data values into actual distinct data values. It may not be feasible at all if you cannot define the rules comprehensively enough.
So, you would need to add an extra column to both the shapefile and the table that would be used for the distinct (non-fuzzy) values on which to do a normal join. Then you would need to use a field calculation on both of these fields (or use a script) to convert the fuzzy values in the old fields into non-fuzzy (distinct) values in the new fields. Eg, The field calculator expression (in Python) could be something like:
replace('!fuzzy_field!', 'sh', 'sc')
But of course that would implement just one rule (the example you gave in the question), and the actual expression or script would have to cater for every possible fuzziness that there might be.
Once done, you can then perform a normal join using the new fields.