语音匹配函数

Netezza Performance ServerSQL 语言支持两种语音匹配功能,您可以使用SoundExNYSIIS 或 Double Metaphone 算法将名称编码为语音表示。

通过对姓名进行语音编码,可以根据姓名的发音进行匹配,减少因拼写差异而可能造成的遗漏。 音素匹配函数不区分大小写;对于拼写相同但字母大小写不同的两个字符串,音素表示法是相同的。 这些函数仅支持 VARCHAR 和 CHAR 数据类型,特别是Latin9编码的 ASCII 子集。 这些函数忽略 ASCII 子集之外的任何字符。

注意:如果使用字符串调用音标函数,而字符超出 ASCII 范围,则应音译字符串,将重音字符转换为 ASCII 非重音版本。

SoundExNYSIIS

SQL 语法:
<varchar(6) value> = nysiis(<str_expr>)

Soundex 是一种著名的音标算法,用于按英语发音为人名编制索引。 该函数使用纽约州身份识别和情报系统 (NYSIIS) 的 Soundex 变体将字符串转换为 Soundex 表示法。 返回值是最多六个字符的字符串,用于识别输入字符串的发音。 例如,函数 "nysiis('Washington')返回字符串 "wasang",而函数 "nysiis('brown')"返回值 "bran"。

双精度变音

SQL 语法:
<int4 value> = dbl_mp(<str_expr>)

Double Metaphone 是另一种通过发音索引字符串的语音算法。 与 Soundex 类似,它使用一套不同的英语和交替发音规则。 该函数返回两个 4 个字符的字符串编码、一个主键和一个次键(或备用键),用于输入字符串的发音。 发音相似的单词共用关键字,尽管它们的长度和拼写可能各不相同。 例如,名称 "washington "的双元主键和辅助键分别是 "AXNK "和 "FXNK"。

为提高性能,"dbl_mp函数将 4 位字符键映射为 16 位数字,并返回一个包含 16 位主键和次键的 32 位复合值Netezza Performance Server类型int4)。 因此,函数 "dbl_mp('washington')返回值为 781598358。

您可以使用三个辅助函数(pri_mp、"sec_mp和 "score_mp)从返回值中以字符串形式提取主键和辅助键,并运行键比较以获得相关性评分。

主要隐喻

SQL 语法:
<varchar(4) value> = pri_mp(<int4 dbl_mp return value>)

该辅助函数获取调用 "dbl_mp函数返回的值,并返回相应的四字符主元音字符串。 例如,"pri_mp(781598358)返回主键 AXNK。

二级隐喻

SQL 语法:
<varchar(4) value> = sec_mp(<int4 dbl_mp return value>)

该辅助函数获取调用 "dbl_mp函数返回的值,并返回相应的四字符二级元音字符串。 例如,"sec_mp(781598358)返回二级键 FXNK。

分数隐喻

SQL 语法:
<varchar(4) value> = score_mp(<int4 dbl_mp value 1>, <int4 dbl_mp 
value 1>, <int4 strong match value>, <int4 normal match value>, 
<int4 minor match value>, <int4 no match value>)
该辅助函数获取由 "dbl_mp函数返回的两个值,并比较它们的匹配程度。 最后四个参数是四种可能的评分或匹配结果的返回值。 在双音频编码中,当两个输入值的一个或多个主键或次键匹配时,这两个输入值就被认为是匹配的;匹配的强度取决于哪些键匹配。 例如,下面的列表显示了如何评估匹配强度:
最强匹配
主键 (1) = 主键 (2)
正常比赛
辅助键 (1) = 主键 (2)

主键 (1) = 次键 (2)

最小匹配
辅助键 (1) = 辅助键 (2)

对于四个匹配值参数,可以指定 1、2、3 和 4(表示最强匹配、正常匹配、最小匹配或无匹配)。 您还可以使用 100、50、25 和 0 等加权值来返回更多分数,以获得更好的匹配结果。

例如,如果比较 "washington"(781598358)和 "wachingten"(7815963100)的双元音编码,可以使用下面的 "score_mp函数来确定它们的匹配程度:
score_mp(781598358,781596310,1,2,3,4)

函数返回值 1 表示最强匹配。

如果比较一下 "washington "和 "vachingten"(1050031766)的编码:
score_mp(781598358,1050031766,100,50,25,0) 

函数返回值 50,表示正常匹配。