首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现语音搜索的最有效方法

实现语音搜索的最有效方法
EN

Stack Overflow用户
提问于 2011-12-03 00:40:59
回答 2查看 16.7K关注 0票数 18

在C++和/或Java中实现语音搜索的最有效方法是什么?通过语音搜索,我指的是替换发音相似的元音或辅音。这对于名字特别有用,因为有时人们的名字有一些奇怪的拼写。

我在想,用元音和一些辅音代替可能是有效的。也可以包括一些特殊的情况,如末尾不发音的E或F和PH。在C++中使用cstring或string是最好的吗?是在内存中存储替换值的副本还是在每次查找时调用函数更好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-03 00:43:20

Soundex及其变种是这方面的标准算法。它使用语音规则将名称转换为字母数字代码。具有相同代码的名称被分组在一起。

至于实现搜索,我将使用一个数据结构,它将每个soundex代码映射到具有该代码的名称列表。根据所使用的数据结构(哈希表或树),查找可以在不同soundex代码的数量的对数上为常数的时间完成。

我不确定你所说的cstring到底是什么意思(微软的CString?)但是标准的std::string类可以很好地解决这个问题,并且是我的首选。

票数 15
EN

Stack Overflow用户

发布于 2012-02-08 16:49:28

除了Soundex之外,你还会发现变音素双变音素语音算法,这似乎是对英语发音的改进,是一个相当新的算法。

对于德语发音,我使用"Kölner Phonetik“。

Apache Commons Codec为您提供了这些基本算法(Soundex,Metaphone,...)的一个非常简单的Java实现。例如,请参阅soundex的 http://commons.apache.org/codec/http://commons.apache.org/codec/apidocs/org/apache/commons/codec/language/Soundex.html

只需键入以下代码即可输入字符串的拼音值:

代码语言:javascript
复制
Soundex soundex = new Soundex();
String phoneticValue = soundex.encode("YourString");

然后,您可以简单地对两个字符串执行此操作,并比较拼音值。如果你正在比较两个字符串,请看下面的帖子,因为equals()方法只是黑白的,也许你想知道它匹配了多少%:

How to compare almost similar Strings in Java? (String distance measure)

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8359595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档