我正在为正在处理的项目执行CSV导入工具。客户端需要能够在excel中输入数据,将其导出为CSV并将其上传到数据库。例如,我有以下CSV记录:
1, John Doe, ACME Comapny (the typo is on purpose)
当然,公司保存在单独的表中并与外键链接,因此我需要在插入之前发现正确的公司ID。我计划通过将数据库中的公司名称与CSV中的公司名称进行比较来做到这一点。如果字符串完全相同,则比较应返回0,并随着字符串的不同而返回更大的值,但是strcmp不会在此处剪切它,因为:
“ Acme Company”和“ Acme Comapny”的差异指数应该很小,但是“ Acme Company”和“ Cmea Mpnyaco”的差异指数应该很大,或者“ Acme Company”和“ Acme Comp”。即使字符数不同,也应该具有小的差异索引。此外,“ Acme公司”和“公司Acme”应返回0。
因此,如果客户在输入数据时进行输入,我可以提示他选择他最想插入的名称。
有没有一种已知的算法可以做到这一点,或者我们可以发明一个:)吗?
您可能需要检查Levenshtein距离算法作为起点。它将评定两个单词之间的“距离”。
该SO线程实现了Google风格的“您是说…?” 系统可能也会提供一些想法。