Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: Psyke1 en Julio 19, 2010, 05:02:36 am

Título: [SRC] Check_Similar_Words [by *PsYkE1*]
Publicado por: Psyke1 en Julio 19, 2010, 05:02:36 am
Hola a todos, os presento mi utlima funcion : Check_Similar_Words
Citar
mañ
aña
ñan
ana
La formula para sacar el numero de fragmentos es esta:

Código: [Seleccionar]
(x - n) + 1Donde x es la cantidad de digitos de la palabra y n los digitos en los que se quiere separar esa palabra... :D

Comprobaria si las palabras de la cadena contienen algunos de estos trozos y las guarda en mi Collection.
Lo divertido es que segun el número de coincidencias que pongamos, la busqueda sera mas o menos estricta. :laugh:


Código: (vb) [Seleccionar]
'=========================================================
' *Function : Check_Similar_Words
' *Author   : *PsYkE1*
' *Mail     : vbpsyke1@mixmail.com
' *Date     : 19/6/10
' *Purpose  : Returns similar to the words entered in the
'            function after the word entered
' *Recommended Websites :
'       http://foro.rthacker.net/
'       http://InfrAngeluX.Sytes.Net/
'=========================================================

Option Explicit
Option Base 0
 
Public Function Check_Similar_Words(ByVal sStringToAnalyze As String, ByVal sWord As String, ByVal bvComparationLevel As Byte) As Collection
Const sInvalidChar                              As String = ",'.)(=/&%?¿¡!#¨><:;""-\|{}^[]*+·ªº"
Dim cTemp                                       As New Collection
Dim sCompareWord()                              As String
Dim sTextWord()                                 As String
Dim x                                           As Long
Dim y                                           As Long
    If (bvComparationLevel < Len(sWord)) And (InStr(sWord, Chr$(32)) = 0) And (InStr(sInvalidChar, sWord) = 0) Then
        y = 1
        ReDim sCompareWord((Len(sWord) - bvComparationLevel) + 1)
        While x <> UBound(sCompareWord)
            sCompareWord(x) = Mid$(sWord, y, bvComparationLevel)
            y = y + 1: x = x + 1
        Wend
        For x = 1 To Len(sInvalidChar)
            sStringToAnalyze = Replace$(sStringToAnalyze, Mid$(sInvalidChar, x, 1), vbNullString)
        Next
        sStringToAnalize = Replace$(sStringToAnalyze, vbCrLf, Chr$(32))
        sTextWord() = Split(sStringToAnalyze, Chr$(32))
        For x = 0 To UBound(sTextWord)
            If Len(sTextWord(x)) >= bvComparationLevel Then
                For y = 0 To UBound(sCompareWord) - 1
                    If (InStr(1, sTextWord(x), sCompareWord(y), vbTextCompare) > 0) And (sWord <> sTextWord(x)) Then
                        On Error Resume Next
                        cTemp.Add sTextWord(x), sTextWord(x)
                    End If
                Next
            End If
        Next
    End If
    Set Check_Similar_Words = cTemp
End Function

Código: (vb) [Seleccionar]
Private Sub Form_Load()
    Dim vItem         As Variant
    Dim sString       As String
   
    sString = Text1.Text
    For Each vItem In Check_Similar_Words(sString, "argumento", 3)
        Debug.Print vItem
    Next vItem
End Sub

Y obtengo esto:
Citar
Entremés
numerosos
resentimiento
entremesista
constantemente
momentos

En cambio si en vez de 3 pongo 4 en la llamada la busqueda de palabras similares se vuelve más extricta y obtendria esto:
Citar
resentimiento
constantemente
momentos

Espero que os haya gustado! :-*

Pd: Posteado originalmente aqui:
http://foro.rthacker.net/programacion-visual-basic/%28src%29-%28function%29-check_similar_words-%28by-*psyke1*%29/

Salu2! :P
Título: Re:[SRC] Check_Similar_Words [by *PsYkE1*]
Publicado por: Psyke1 en Agosto 27, 2010, 12:24:04 pm
He optimizado el source! ;D

DoEvents¡! :P