如何在C++和/或Java中实现最有效的音标搜索?所谓的音标搜索是指替换听起来相似的元音或辅音。这对于姓名尤其有用,因为有时人们的名字拼写很奇怪。
我认为将元音和一些辅音进行替换可能是有效的。还可以包括一些特殊情况,例如末尾的无声E或F和PH。在C++中是使用cstrings还是strings更好?是否最好在内存中存储带有替换值的副本,还是每次查找时调用函数?
Soundex soundex = new Soundex();
String phoneticValue = soundex.encode("YourString");
然后,您可以针对两个字符串执行此操作并比较它们的语音值。
如果您正在比较两个字符串,那么请查看以下帖子,因为equals()方法只是非常明确的黑白,也许您想知道它匹配了多少%:
如何在Java中比较几乎相似的字符串?(字符串距离测量)Soundex 及其变体是用于此目的的标准算法。它使用语音规则将名称转换为字母数字代码。具有相同代码的名称被分组在一起。
关于实现搜索,我会使用一个数据结构,将每个 Soundex 代码映射到具有该代码的名称列表。根据所使用的数据结构(哈希表或树),查找可以在恒定时间或对数时间内完成,取决于不同 Soundex 代码的数量。
我不确定您所说的cstring 是什么意思(Microsoft 的 CString
?),但标准的 std::string
类对于这个问题来说完全可以胜任,并且是我的首选。
std::string
。 - NPE