276
技术社区[云栖]
模糊字符串匹配:双重解密算法
名称匹配的一个大问题是错误的倾向。有许多不同的方式,人们拼写相同的名字,打字错误,误读了另一个人说的话。有许多方法可以免费形式的语言数据被破坏。当您需要搜索/匹配不良数据时,会导致许多头疼。
有很多不同的方法来解决它。像Levenshtein算法一样,它计算出使一个字符串匹配另一个字符串需要进行多少次编辑。或者检查字符串组成的较小序列的NGram算法,并将它们与一个同义词串的序列进行比较。然后有语音算法根据“声音”如何编码字符串。就像SoundEx或Double Metaphone算法一样。
什么是双重转录?
Double Metaphone是一种语音算法,它采用一个字符串,并产生2个编码,说明如何用口头语言发音。产生两个编码,因为有时可以以多种方式发音。
它用于英文,包含许多关于字符串“声音”的规则。它也试图解释在斯拉夫语,德语,凯尔特语,希腊语,法语,意大利语,西班牙语,中文和其他来源的罗马化词语的英文发音的差异。
它是如何工作的?
该算法通过查看数百个语音规则来创建语音字符串。它使用的规则的一些例子是:什么是双重转录?Double Metaphone是一种语音算法,它采用一个字符串,并产生2个编码,说明如何用口头语言发音。产生两个编码,因为有时可以以多种方式发音。它用于英文,包含许多关于字符串“声音”的规则。它也试图解释在斯拉夫语,德语,凯尔特语,希腊语,法语,意大利语,西班牙语,中文和其他来源的罗马化词语的英文发音的差异。它是如何工作的?该算法通过查看数百个语音规则来创建语音字符串。它使用的规则的一些例子是:什么是双重转录?Double Metaphone是一种语音算法,它采用一个字符串,并产生2个编码,说明如何用口头语言发音。产生两个编码,因为有时可以以多种方式发音。它用于英文,包含许多关于字符串“声音”的规则。它也试图解释在斯拉夫语,德语,凯尔特语,希腊语,法语,意大利语,西班牙语,中文和其他来源的罗马化词语的英文发音的差异。它是如何工作的?该算法通过查看数百个语音规则来创建语音字符串。它使用的规则的一些例子是:产生两个编码,因为有时可以以多种方式发音。它用于英文,包含许多关于字符串“声音”的规则。它也试图解释在斯拉夫语,德语,凯尔特语,希腊语,法语,意大利语,西班牙语,中文和其他来源的罗马化词语的英文发音的差异。它是如何工作的?该算法通过查看数百个语音规则来创建语音字符串。它使用的规则的一些例子是:产生两个编码,因为有时可以以多种方式发音。它用于英文,包含许多关于字符串“声音”的规则。它也试图解释在斯拉夫语,德语,凯尔特语,希腊语,法语,意大利语,西班牙语,中文和其他来源的罗马化词语的英文发音的差异。它是如何工作的?该算法通过查看数百个语音规则来创建语音字符串。它使用的规则的一些例子是:它是如何工作的?该算法通过查看数百个语音规则来创建语音字符串。它使用的规则的一些例子是:它是如何工作的?该算法通过查看数百个语音规则来创建语音字符串。它使用的规则的一些例子是:
P和B被编码为相同的声音。除非P之后是H,然后将其编码为F声。
SCI被编码为S声音,而SCO被编码为SK声音。
T和D被编码为相同的声音。除非T之后是H,然后将H编码为由0号表示的θ声音。
该算法产生2个,潜在的,不同的输入字的发音。阈值参数确定每个发音的最大长度。因此,LEFT(输出,阈值)是主要发音,RIGHT(输出,阈值)是潜在的不同发音。因此,当编码产生具有小于阈值的字符的发音时的空格。
该算法被编码为一次编码单个字,并且不处理字符串中的非字母字符。所以这些应该在运行代码之前从字符串中提取出来。在进行任何其他处理之前,将其提取到该函数中。
这是设计。当使用低阈值时,较长的单词将被截断,并可能与较短的单词错误地匹配。例如,阈值为4,“ 我把它作为一个参数,所以用户可以选择使用更大的阈值。VBScript中的示例实现 此实现采用字符串输入以及输入的长度i,并输出每个长度为I的字符串的两个可能的不同语音编码。 例如,调用它将返回,包含空格。 您可以使用它来预先计算表中名称或单词的发音,并将2种不同的语音代码与表中的所有其他语音代码进行比较,以查找类似的名称或单词。我把它作为一个参数,所以用户可以选择使用更大的阈值。VBScript中的示例实现此实现采用字符串输入以及输入的长度i,并输出每个长度为I的字符串的两个可能的不同语音编码。例如,调用它将返回,包含空格。您可以使用它来预先计算表中名称或单词的发音,并将2种不同的语音代码与表中的所有其他语音代码进行比较,以查找类似的名称或单词。VBScript中的示例实现此实现采用字符串输入以及输入的长度i,并输出每个长度为I的字符串的两个可能的不同语音编码。例如,调用它将返回,包含空格。您可以使用它来预先计算表中名称或单词的发音,并将2种不同的语音代码与表中的所有其他语音代码进行比较,以查找类似的名称或单词。VBScript中的示例实现此实现采用字符串输入以及输入的长度i,并输出每个长度为I的字符串的两个可能的不同语音编码。例如,调用它将返回,包含空格。您可以使用它来预先计算表中名称或单词的发音,并将2种不同的语音代码与表中的所有其他语音代码进行比较,以查找类似的名称或单词。
DoubleMetaphone("Smith", 4)SM0 XMT
选项显式
MsgBox(DoubleMetaphone(InputBox(“Enter String”),6))
功能DoubleMetaphone(strOriginal,intThreshhold)
Dim isSlavoGermanic,strPrimary,strSecondary,i,intJump,iB
Dim intLength,cP,cS,arr,x,intPad
isSlavoGermanic = False
iB = 4
intPad = 6
x = iB
intLength = Len(strOriginal)+ iB - 1
strOriginal = UCase(strOriginal)
If(InStr(strOriginal,“W”)+ InStr(strOriginal,“K”)+ InStr(strOriginal,“CZ”)+ InStr(strOriginal,“WITZ”))<> 0然后
isSlavoGermanic = True
万一
ReDim arr(intLength + intPad + 1)
对于i = 0到iB-1
arr(i)= vbTab
下一个
对于i = iB到intLength
arr(i)= Mid(strOriginal,i-iB + 1,1)
下一个
对于i = intLength + 1 To UBound(arr)
arr(i)= vbTab
下一个
选择案例(arr(x)&arr(x + 1))
案例“AC”
strPrimary =“AKS”
strSecondary =“AKS”
x = x + 4
案例“GN”,“KN”,“PN”,“PS”
x = x + 1
“HA”,“HE”,“HI”,“HO”,“HU”,“HY”
strPrimary =“H”
strSecondary =“H”
x = x + 2
案例“WA”,“WE”,“WI”,“WO”,“WU”,“WY”
strPrimary =“A”
strSecondary =“F”
x = x + 2
案例“WH”
strPrimary =“A”
strSecondary =“A”
x = x + 1
案例“SM”,“SN”,“SL”,“SW”
strPrimary =“S”
strSecondary =“X”
x = x + 1
案例“GY”
strPrimary =“K”
strSecondary =“J”
x = x + 2
结束选择
如果x = iB那么
如果arr(x)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“JOSE”
如果(x = iB和arr(x + 4)=“”)那么
strPrimary =“HS”
strSecondary =“HS”
x = x + 4
万一
ElseIf arr(x)&arr(x + 1)&arr(x + 2)&arr(x + 3)&arr(x + 4)=“SUGAR”
strPrimary =“XK”
strSecondary =“SK”
x = x + 5
ElseIf arr(x)&arr(x + 1)&arr(x + 2)&arr(x + 3)&arr(x + 4)&arr(x + 5)=“CAESAR”
strPrimary =“SSR”
strSecondary =“SSR”
x = x + 6
ElseIf(x + 1)&arr(x + 2)&arr(x + 3)&arr(x + 4)&arr(x + 5)=“CHARAC”
arr(x)&arr(x + 1)&arr(x + 2)&arr(x + 3)&arr(x + 4)&arr(x + 5)=“CHARIS”
arr(x)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“CHOR”或_
arr(x)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“CHYM”或_
arr(x)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“CHEM”)和_
arr(x)&arr(x + 1)&arr(x + 2)&arr(x + 3)&arr(x + 4)<>“CHORE”
strPrimary =“K”
strSecondary =“K”
x = x + 2
万一
万一
如果x = iB那么
选择Case arr(x)&arr(x + 1)&arr(x + 2)
“GES”,“GEP”,“GEB”,“GEL”,“GEY”,“GIB”,“GIL”,“GIN”
strPrimary =“K”
strSecondary =“J”
x = x + 2
案例“GHI”
strPrimary =“J”
strSecondary =“J”
x = x + 3
案例“AGN”,“EGN”,“IGN”,“OGN”,“UGN”,“UGY”
如果不是的话
strPrimary =“AKN”
strSecondary =“AN”
x = x + 3
万一
结束选择
万一
如果x = iB那么
选择Case arr(x)
案例“X”
strPrimary =“S”
strSecondary =“S”
x = x + 1
情况“A”,“E”,“I”,“O”,“U”,“Y”
strPrimary =“A”
strSecondary =“A”
x = x + 1
案例“J”
strPrimary =“J”
strSecondary =“A”
x = x + 1
结束选择
万一
Do While x <= intLength
如果Len(strPrimary)> = intThreshhold Then
退出
万一
intJump = 1
cP = arr(x)
cS = arr(x)
选择Case arr(x)
情况“A”,“E”,“I”,“O”,“U”,“Y”
cP =“”
cS =“”
案例“B”
cP =“P”
cS =“P”
案例“Ç”
cP =“S”
cS =“S”
案例“C”
如果x> iB + 1和arr(x-2)<>“A”和arr(x-2)<>“E”和arr(x-2)<>“I”和arr(x-2) >“O”和arr(x-2)<>“U”和_
arr(x-2)<>“Y”And arr(x-1)&arr(x + 1)=“AH”And((arr(x + 2) <>“E”)或_
arr(x-2)&arr(x + 2)&arr(x + 3)=“BER”或arr(x-2)&arr(x + 2)&arr(x + 3)=“MER”然后
cP =“K”
cS =“K”
intJump = 2
ElseIf arr(x + 1)&arr(x + 2)&arr(x + 3)=“HIA”然后
cP =“K”
cS =“K”
intJump = 4
ElseIf arr(x + 1)=“H”然后
如果x> iB和arr(x + 2)&arr(x + 3)=“AE”则
cP =“K”
cS =“X”
intJump = 2
(iB + 1)&iBr(iB + 2)&arr(iB + 3)=“VAN”或_
(iB + 1)&iB(iB + 2)&arr(iB + 3)=“VON”或_
arr(iB)&arr(iB + 1)&arr(iB + 2)=“SCH”或arr(x + 2)=“T”或arr(x + 2)=“S”
arr(x-2)&arr(x-1)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“ORHES”
arr(x-2)&arr(x-1)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“ARHIT”
arr(x-2)&arr(x-1)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“ORHID”
((arr(x-2)=“A”或arr(x-2)=“E”或arr(x-2)=“O”或arr(x-2)=“U”或x =和_
(arr(x + 2)=“L”或arr(x + 2)=“R”或arr(x + 2)=“N”或arr(x + 2)=“M” )=“B”或_
arr(x + 2)=“H”或arr(x + 2)=“F”或arr(x + 2)=“V”或arr(x + 2)=“W”或arr(x + =“”))然后
cP =“K”
cS =“K”
intJump = 2
其他
intJump = 2
如果x> iB那么
如果arr(iB)&arr(iB + 1)=“MC”则
cP =“K”
cS =“K”
其他
cP =“X”
cS =“K”
万一
其他
cP =“X”
cS =“X”
万一
万一
ElseIf arr(x + 1)=“Z”And arr(x-2)&arr(x-1)<>“WI”
cP =“S”
cS =“X”
intJump = 2
ElseIf arr(x + 1)&arr(x + 2)&arr(x + 2)=“CIA”然后
cP =“X”
cS =“X”
intJump = 3
ElseIf arr(x + 1)=“C”而不是(x = iB + 1和arr(iB)=“M”)然后
如果(arr(x + 2)=“I”或arr(x + 2)=“E”或arr(x + 2)=“H”)和arr(x + 2)&arr(x + 3) >“胡”
如果arr(x-1)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“UCEE”或_
arr(x-1)&arr(x + 1)&arr(x + 2)&arr(x + 3)=“UCES”
cP =“KS”
cS =“KS”
intJump = 3
其他
cP =“X”
cS =“X”
intJump = 3
万一
其他
cP =“K”
cS =“K”
intJump = 2
万一
ElseIf arr(x + 1)=“K”或arr(x + 1)=“G”或arr(x + 1)=“Q”
cP =“K”
cS =“K”
intJump = 2
ElseIf arr(x + 1)=“I”或arr(x + 1)=“E”或arr(x + 1)=“Y”
如果arr(x + 1)&arr(x + 2)=“IO”或arr(x + 1)&arr(x + 2)=“IE”或arr(x + 1)&arr(x + 2) =“IA”然后
cP =“S”
cS =“X”
intJump = 2
其他
cP =“S”
cS =“S”
intJump = 2
万一
其他
cP =“K”
cS =“K”
如果arr(x + 1)&arr(x + 2)=“C”或arr(x + 1)&arr(x + 2)=“Q”或arr(x + 1)&arr(x + =“G”然后
intJump = 3
其他
如果(arr(x + 1)=“C”或arr(x + 1)=“K”或arr(x + 1)=“Q”
arr(x + 1)&arr(x + 2)<>“CE”和arr(x + 1)&arr(x + 2)
intJump = 2
万一
万一
万一
案例“D”
如果arr(x + 1)=“G”则
如果arr(x + 2)=“I”或_
arr(x + 2)=“E”或_
arr(x + 2)=“Y”然后
cP =“J”
cS =“J”
intJump = 3
其他
cP =“TK”
cS =“TK”
intJump = 2
万一
ElseIf arr(x + 1)=“T”然后
cP =“T”
cS =“T”
intJump = 2
其他
cP =“T”
cS =“T”
万一
案例“G”
如果arr(x + 1)=“H”则
如果x <> iB和arr(x-1)<>“A”和arr(x-1)<>“E”和arr(x-1)<>“I”_
和arr(x-1)<>“O”和arr(x-1)<>“U”And arr(x-1)<>“Y”
cP =“K”
cS =“K”
intJump = 2
ElseIf(x> iB + 1 And(arr(x-2)=“B”或arr(x-2)=“H”或arr(x-2)=“D”))
(x> iB + 2和(arr(x-3)=“B”或arr(x-3)=“H”或arr(x-3)=“D”))
(x> iB + 3和(arr(x-4)=“B”或arr(x-4)=“H”))然后
cP =“”
cS =“”
intJump = 2
其他
如果x> iB + 2和arr(x-1)=“U”和_
(x-3)=“C”或arr(x-3)=“G”或arr(x-3)=“L”或arr(x-3)=“R” )=“T”)然后
cP =“F”
cS =“F”
intJump = 2
ElseIf x> iB和arr(x-1)<>“I”然后
cP =“K”
cS =“K”
intJump = 2
其他
cP =“”
cS =“”
万一
万一
ElseIf arr(x + 1)=“N”然后
cS =“KN”
intJump = 2
如果arr(x + 2)&arr(x + 3)<>“EY”而不是isSlavoGermanic然后
cP =“N”
其他
cP =“KN”
万一
ElseIf arr(x + 1)&arr(x + 2)=“LI”而不是SlavoGermanic然后
cP =“KL”
cS =“L”
intJump = 2
ElseIf(arr(x + 1)&arr(x + 2)=“ER”或arr(x + 1)=“Y”)和_
arr(x-1)<>“E”和arr(x-1)<>“I”和_
arr(x-1)&arr(x + 1)<>“RY”和_
arr(x-1)&arr(x + 1)<>“OY”和_
(iB + 1)&iBr(iB + 2)&iBr(iB + 3)&arr(iB + 4)&arr(iB + 5)<>“危险”
(iB + 1)&iBr(iB + 2)&iBr(iB + 3)&iBr(iB + 4)&arr(iB + 5)<>“RANGER”
(iB + 1)&iBr(iB + 2)&iBr(iB + 3)&arr(iB + 4)&arr(iB + 5)<>“MANGER”
cP =“K”
cS =“J”
intJump = 2
ElseIf arr(x + 1)=“E”或arr(x + 1)=“I”或arr(x + 1)=“Y”或_
arr(x-1)&arr(x)&arr(x + 1)&arr(x + 2)=“AGGI”或_
arr(x-1)&arr(x)&arr(x + 1)&arr(x + 2)=“OGGI”
如果arr(iB)&arr(iB + 1)&arr(iB + 2)&arr(iB + 3)=“VON”或_
(iB +&)(iB + 1)&arr(iB + 2)&arr(iB + 3)=“VAN”或_
(iB)&arr(iB + 1)&arr(iB + 2)=“SCH”或_
arr(x + 1)&arr(x + 2)=“ET”然后
cP =“K”
cS =“K”
intJump = 2
其他
cP =“J”
如果arr(x + 1)&arr(x + 2)&arr(x + 3)&arr(x + 4)=“IER”
cS =“J”
intJump = 3
其他
cS =“K”
intJump = 2
万一
万一
其他
cP =“K”
cS =“K”
万一
案例“H”
如果(arr(x-1)=“A”或_
arr(x-1)=“E”或_
arr(x-1)=“I”或_
arr(x-1)=“O”或_
arr(x-1)=“U”或_
arr(x-1)=“Y”)和_
(arr(x + 1)=“A”或_
arr(x + 1)=“E”或_
arr(x + 1)=“I”或_
arr(x + 1)=“O”或_
arr(x + 1)=“U”或_
arr(x + 1)=“Y”)然后
intJump = 2
其他
cP =“”
cS =“”
万一
案例“J”
如果arr(iB)&arr(iB + 1)&arr(iB + 2)&arr(iB + 3)=“SAN”则
cP =“H”
cS =“H”
其他
如果不是SlavoGermanic和(_
arr(x-1)=“A”或_
arr(x-1)=“E”或_
arr(x-1)=“I”或_
arr(x-1)=“O”或_
arr(x-1)=“U”或_
arr(x-1)=“Y”)和(_
arr(x + 1)=“A”或_
arr(x + 1)=“O”)然后
cS =“H”
其他
如果x = intLength Then
cS =“”
其他
如果arr(x + 1)=“L”或arr(x + 1)=“T”或arr(x + 1)=“K”或_
arr(x + 1)=“S”或arr(x + 1)=“N”或arr(x + 1)=“M”或_
arr(x + 1)=“B”或arr(x + 1)=“Z”或_
arr(x-1)=“S”或arr(x-1)=“K”或arr(x-1)=“L”
cP =“”
cS =“”
万一
万一
万一
万一
案例“L”
如果arr(x + 1)=“L”则
intJump = 2
如果((x = intLength-2和(_
arr(x-1)&arr(x)&arr(x + 1)&arr(x + 2)=“ILLO”或_
arr(x-1)&arr(x)&arr(x + 1)&arr(x + 2)=“ILLA”或_
arr(x-1)&arr(x)&arr(x + 1)&arr(x + 2)=“ALLE”_
)) 要么 (( _
arr(intLength-1)&arr(intLength)=“AS”或_
arr(intLength-1)&arr(intLength)=“OS”或_
arr(intLength)=“A”或arr(intLength)=“O”)和_
arr(x-1)&arr(x)&arr(x + 1)&arr(x + 2)=“ALLE”))然后
cS =“”
万一
万一
案例“M”
如果arr(x-1)&arr(x)&arr(x + 1)=“UMB”And _
(x = intLength-1或arr(x + 2)&arr(x + 3)=“ER”)然后
intJump = 2
万一
案例“P”
选择Case arr(x + 1)
案例“H”
cP =“F”
cS =“F”
intJump = 2
案例“B”
intJump = 2
结束选择
案例“Q”
cP =“K”
cS =“K”
案例“R”
如果x = intLength而不是isSlavoGermanic和_
arr(x-2)&arr(x-1)=“IE”And _
arr(x-4)&arr(x-3)<>“ME”和_
arr(x-4)&arr(x-3)<>“MA”然后
cP =“”
万一
案例“S”
如果arr(x + 1)=“L”And(arr(x-1)=“I”或arr(x-1)=“Y”
cP =“”
cS =“”
ElseIf arr(x + 1)=“H”和_
arr(x + 2)&arr(x + 3)&arr(x + 4)<>“EIM”和_
arr(x + 2)&arr(x + 3)&arr(x + 4)<>“OEK”和_
arr(x + 2)&arr(x + 3)&arr(x + 4)<>“OLM”和_
arr(x + 2)&arr(x + 3)&arr(x + 4)<>“OLZ”然后
intJump = 2
cP =“X”
cS =“X”
ElseIf not isSlavoGermanic And(_
arr(x + 1)&arr(x + 2)=“IA”或_
arr(x + 1)&arr(x + 2)=“IO”)然后
intJump = 3
cS =“X”
ElseIf arr(x + 1)=“Z”然后
cS =“X”
intJump = 2
ElseIf arr(x + 1)=“C”然后
intJump = 3
如果arr(x + 2)=“H”则
如果arr(x + 3)&arr(x + 4)=“OO”或_
arr(x + 3)&arr(x + 4)=“ER”或_
arr(x + 3)&arr(x + 4)=“EN”或_
arr(x + 3)&arr(x + 4)=“UY”或_
arr(x + 3)&arr(x + 4)=“ED”或_
arr(x + 3)&arr(x + 4)=“EM”然后
cS =“SK”
如果arr(x + 3)&arr(x + 4)=“ER”或_
arr(x + 3)&arr(x + 4)=“EN”然后
cP =“X”
其他
cP =“SK”
万一
其他
cP =“X”
如果x <iB或Arr(iB + 3)=“W”或arr(iB + 3)=“A”或_
arr(iB + 3)=“E”或arr(iB + 3)=“I”或arr(iB + 3)=“O”或_
arr(iB + 3)=“U”或arr(iB + 3)=“Y”然后
cS =“X”
万一
万一
ElseIf arr(x + 2)=“I”或arr(x + 2)=“E”或arr(x + 2)=“Y”
其他
cP =“SK”
cS =“SK”
万一
ElseIf x = intLength And arr(x-1)=“I”And(_
arr(x-2)=“A”或arr(x-2)=“O”)然后
cP =“”
万一
案例“T”
如果arr(x + 1)&arr(x + 2)&arr(x + 3)=“ION”_
或者arr(x + 1)&arr(x + 2)=“IA”_
或者arr(x + 1)&arr(x + 2)=“CH”然后
cP =“X”
cS =“X”
intJump = 3
ElseIf(arr(x + 1)=“H”或arr(x + 1)&arr(x + 2)=“TH”)和_
(arr(x + 2)&arr(x + 3)<>“OM”And _
arr(x + 2)&arr(x + 3)<>“AM”And _
arr(iB)&arr(iB + 1)&arr(iB + 2)<>“SCH”和_
(iB + 1)&iBr(iB + 2)&arr(iB + 3)<>“VAN”和_
(iB + 1)&iBr(iB + 2)&arr(iB + 3)<>“VON”)然后
cP =“0”
intJump = 2
ElseIf arr(x + 1)=“D”然后
intJump = 2
万一
案例“V”
cP =“F”
cS =“F”
案例“W”
如果arr(x + 1)=“R”则
cP =“R”
cS =“R”
intJump = 2
(iB)&arr(iB + 1)&arr(iB + 2)=“SCH”_
或(x = intLength And(_
arr(x-1)=“A”或_
arr(x-1)=“E”或_
arr(x-1)=“I”或_
arr(x-1)=“O”或_
arr(x-1)=“U”或_
arr(x-1)=“Y”))_
或((arr(x-1)=“E”或arr(x-1)=“O”)和_
(arr(x + 1)&arr(x + 2)&arr(x + 3)=“SKI”或_
arr(x + 1)&arr(x + 2)&arr(x + 3)=“SKY”))然后
cP =“”
cS =“F”
ElseIf arr(x + 1)&arr(x + 2)&arr(x + 3)=“ICZ”_
或者arr(x + 1)&arr(x + 2)&arr(x + 3)=“ITZ”
cP =“TS”
cS =“FX”
intJump = 4
其他
cP =“”
cS =“”
万一
案例“X”
如果x = intLength和_
(arr(x-3)&arr(x-2)&arr(x-1)=“IAU”或_
arr(x-3)&arr(x-2)&arr(x-1)=“EAU”或_
arr(x-2)&arr(x-1)=“AU”或_
arr(x-2)&arr(x-1)=“OU”)然后
cP =“”
cS =“”
其他
cP =“KS”
cS =“KS”
万一
如果arr(x + 1)=“C”则
intJump = 2
万一
案例“Z”
如果arr(x + 1)=“H”则
cP =“J”
cS =“J”
ElseIf(arr(x + 1)&arr(x + 2)=“ZO”或_
arr(x + 1)&arr(x + 2)=“ZI”或_
arr(x + 1)&arr(x + 2)=“ZA”)_
或者(isSlavoGermanic And x <> iB And arr(x-1)=“T”)然后
cP =“S”
cS =“TS”
其他
cP =“S”
cS =“S”
万一
结束选择
strPrimary = strPrimary&cP
strSecondary = strSecondary&cS
如果arr(x)= arr(x + 1)和arr(x)<>“C”则
intJump = intJump + 1
万一
x = x + intJump
循环
对于i = 1要inthereshhold
strPrimary = strPrimary&“”
strSecondary = strSecondary&“”
下一个
DoubleMetaphone = Left(strPrimary,intThreshhold)&Left(strSecondary,intThreshhold)
结束功能
最后更新:2017-08-15 13:32:16