Это зависит от ваших критериев сходства. Другие люди уже направили вас на расстояние Левенштейна (редактировать расстояние - то же самое). Это обычно довольно хорошо, и определенно более независимо от языка, чем что-то вроде soundex. Однако следует помнить, что различие Левенштейна не очень хорошо справляется с транспозицией. Таким образом:
Levenstein("copy", "cpoy") == 2
Если вы пытаетесь справиться с человеческим вкладом, транспонирование довольно распространено. Является ли это проблемой или нет, зависит от ваших показателей сходства.
Это было давно, но я считаю, что Postgresql имеет levenstein()
либо встроенный, либо доступный как contrib
C модуль.