閱讀276 返回首頁    go 阿裏雲 go 技術社區[雲棲]


模煳字符串匹配:雙重解密算法

名稱匹配的一個大問題是錯誤的傾向。有許多不同的方式,人們拚寫相同的名字,打字錯誤,誤讀了另一個人說的話。有許多方法可以免費形式的語言數據被破壞。當您需要搜索/匹配不良數據時,會導致許多頭疼。

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

  上一篇:go  在其他應用程序vba中使用SQL
  下一篇:go  分布式MySQL集群方案的探索與思考