模糊字符串匹配:双重解密算法

简介:

名称匹配的一个大问题是错误的倾向。有许多不同的方式,人们拼写相同的名字,打字错误,误读了另一个人说的话。有许多方法可以免费形式的语言数据被破坏。当您需要搜索/匹配不良数据时,会导致许多头疼。

有很多不同的方法来解决它。像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)

结束功能

目录
相关文章
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
211 0
|
算法
两个字符串匹配出最长公共子序列算法
本文介绍了最长公共子序列(LCS)问题的算法实现,通过动态规划方法求解两个字符串的最长公共子序列,并提供了具体的编程实现细节和示例。
310 1
两个字符串匹配出最长公共子序列算法
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
930 1
|
数据采集 算法 JavaScript
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
JavaScript字符串搜索涵盖`indexOf`、`includes`及KMP算法。`indexOf`返回子字符串位置,`includes`检查是否包含子字符串。KMP是高效的搜索算法,尤其适合长模式匹配。示例展示了如何在数据采集(如网页爬虫)中使用这些方法,结合代理IP进行安全搜索。代码示例中,搜索百度新闻结果并检测是否含有特定字符串。学习这些技术能提升编程效率和性能。
396 1
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
存储 缓存 算法
时间&空间复杂度,Python 算法的双重考验!如何优雅地平衡两者,打造极致性能?
【7月更文挑战第23天】在Python算法设计中,时间与空间复杂度是关键考量,需精妙平衡以优化程序性能。时间复杂度反映算法随输入规模增长的执行时间趋势,空间复杂度关注额外存储需求。线性搜索O(n)时间,O(1)空间;二分搜索O(log n)时间,O(1)空间,提升效率;动态规划如斐波那契数列O(n)时间与空间,利用存储减小计算。实际应用需按场景需求调整,如实时数据偏重时间,资源受限环境优先考虑空间。平衡两者,理解算法本质,结合实践,创造高性能程序。
228 7
|
存储 算法 Cloud Native
C++ bcrypt算法 字符串加密,亲测有效
C++ bcrypt算法 字符串加密,亲测有效
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
939 1
|
算法 C++
惊爆!KPM算法背后的秘密武器:一行代码揭秘字符串最小周期的终极奥义,让你秒变编程界周期大师!
【8月更文挑战第4天】字符串最小周期问题旨在找出字符串中最短重复子串的长度。KPM(实为KMP,Knuth-Morris-Pratt)算法,虽主要用于字符串匹配,但其生成的前缀函数(next数组)也可用于求解最小周期。核心思想是构建LPS数组,记录模式串中每个位置的最长相等前后缀长度。对于长度为n的字符串S,其最小周期T可通过公式ans = n - LPS[n-1]求得。通过分析周期字符串的特性,可证明该方法的有效性。提供的C++示例代码展示了如何计算给定字符串的最小周期,体现了KPM算法在解决此类问题上的高效性。
592 0
|
存储 算法
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离

热门文章

最新文章