_soundex_koelner - SoundEx nach Kölner Phonetik

  • Moin Allerseits,

    nachdem ich nun lang genug "gewildert" habe (gelesen und je meinen Senf ab zu geben),
    werd ich mal eine Funktion zur Verfügung stellen, die ich heut Nachmittag gedengelt hab und
    für ein Projekt von mir (was ich evtl. mal Vorstelle) benötige.

    Spoiler anzeigen

    Vieleicht findet ja mal einer Verwendung.
    Verbesserungen und Kommentare sind erwünscht.

    Einmal editiert, zuletzt von FuzzyWutz (29. März 2012 um 15:56)

  • Da ich jetzt auch lange genug "gewildert" habe, geb ich da auch mal meinen Senf dazu.

    Das Thema Kölner Phonetik ist hoch interessant, habe mich 2011 mal damit beschäftigt.

    Hier meine KP Function:

    Spoiler anzeigen
    [autoit]


    ; #FUNCTION# ===================================================================
    ; Name ..........: _KP
    ; Description ...: Kölner Phonetik. Die Kölner Phonetik (auch Kölner Verfahren)
    ; ist ein phonetischer Algorithmus, der Wörtern nach ihrem
    ; Sprachklang eine Zeichenfolge zuordnet, den phonetischen Code.
    ; Syntax.........: _KP($string, [$len])
    ; Parameters ....: $string - String
    ; $len - Length (Optional)
    ; Return values .: On Success - KP Code
    ; Author ........: Thomas Schwarz
    ; Modified ......: 2011-08-27
    ; Remarks .......:
    ; Related .......:
    ; Algorithmus ...: Hans Joachim Postel (1969)
    ; Link ..........; http://de.wikipedia.org/wiki/Kölner_Phonetik
    ; Example .......; no
    ; ==============================================================================
    Func _KP($string, $len = 0)
    Local $Return, $Str, $a, $b, $c, $i, $TXT, $L, $W
    Dim $arr[1]
    $Str = $string
    $Str = ' ' & StringLower($Str) & ' '
    For $i = 2 To StringLen($Str) - 1
    $a = StringMid($Str, $i - 1, 1)
    $b = StringMid($Str, $i, 1)
    $c = StringMid($Str, $i + 1, 1)
    $TXT = $a & $b & $c
    If StringRegExp($TXT, '[' & $a & '][aeiouäöüß][' & $c & ']', 0) Then
    $L = 0
    ElseIf StringRegExp($TXT, '[' & $a & '][h][' & $c & ']', 0) Then
    $L = ''
    ElseIf StringRegExp($TXT, '[' & $a & '][' & $c & ']', 0) Then
    $L = 1
    ElseIf StringRegExp($TXT, '[' & $a & '][p][^h]', 0) Then
    $L = 1
    ElseIf StringRegExp($TXT, '[' & $a & '][dt][^csz]', 0) Then
    $L = 2
    ElseIf StringRegExp($TXT, '[' & $a & '][p][h]', 0) Then
    $L = 3
    ElseIf StringRegExp($TXT, '[' & $a & '][fvw][' & $c & ']', 0) Then
    $L = 3
    ElseIf StringRegExp($TXT, '[' & $a & '][gkp][' & $c & ']', 0) Then
    $L = 4
    ElseIf StringRegExp($TXT, '[' & $a & '][sz][' & $c & ']', 0) Then
    $L = 8
    ElseIf StringRegExp($TXT, '[sz][code=c][' & $c & ']', 0) Then
    $L = 8
    ElseIf StringRegExp($TXT, '[code=c][ahkloqrux][' & $c & ']', 0) Then
    $L = 4
    ElseIf StringRegExp($TXT, '[' & $a & '][code=c][ahkloqrux]', 0) Then
    $L = 4
    ElseIf StringRegExp($TXT, '[^ckg][x][' & $c & ']', 0) Then
    $L = 48
    ElseIf StringRegExp($TXT, '[' & $a & '][l][' & $c & ']', 0) Then
    $L = 5
    ElseIf StringRegExp($TXT, '[' & $a & '][mn][' & $c & ']', 0) Then
    $L = 6
    ElseIf StringRegExp($TXT, '[' & $a & '][r][' & $c & ']', 0) Then
    $L = 7
    ElseIf StringRegExp($TXT, '[code=c][^ahkloqrux][' & $c & ']', 0) Then
    $L = 8
    ElseIf StringRegExp($TXT, '[' & $a & '][code=c][^ahkloqrux]', 0) Then
    $L = 8
    ElseIf StringRegExp($TXT, '[' & $a & '][dt][csz]', 0) Then
    $L = 8
    ElseIf StringRegExp($TXT, '[ckq][x][' & $c & ']', 0) Then
    $L = 8
    Else
    $L = ''
    EndIf
    $W = $W & $L
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If StringLen($W) > 0 Then
    ReDim $arr[StringLen($W)]
    For $i = 1 To StringLen($W)
    $arr[$i - 1] = StringMid($W, $i, 1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($arr) - 1
    If $i < UBound($arr) - 1 Then
    If $arr[$i + 1] = $arr[$i] Then $arr[$i + 1] = ''
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($arr) - 1
    If $arr[$i] = 0 Then $arr[$i] = ''
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($arr) - 1
    $Return &= $arr[$i]
    Next
    Else
    $Return = 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $len > 0 Then
    $Return = StringLeft($Return, $len)
    If StringLen($Return) < $len Then
    For $i = StringLen($Return) To $len - 1
    $Return &= 0
    Next
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $Return
    EndFunc ;==>_KP

    [/autoit]

    [b]