Hola buenas tardes para todos, en este momento tenemos la necesidad de comparar un listado de nombres de productos, con la cadena de un nombre de producto, el problema es que la cadena no viene exacta, la idea es que se pueda sugerir la mas cercana posible.
Estuve consultando con ChatGTP y me sugiri贸 que lo podemos hacer utilizando el algoritmo de Levenshtein, incluso nos dio un ejemplo para usarlo con PHP y Python. Le pregunte si lo pod铆amos hacer con xharbour/harbour y me dice que no hay una librer铆a que lo tenga, pero que podemos hacer el algoritmo en C++, ya que xharbour esta basado en clipper, que a su vez esta basado en c++.
Buscando en Google encontr茅 el mencionado algoritmo escrito en C++.
https://es.wikipedia.org/wiki/Distancia_de_Levenshtein
De casualidad alguno de los master, nos puede ayudar a traducir ese algoritmo para xharbour/harbour?
ChatGTP nos sugiri贸 este c贸digo para hacerlo. Pero salen varios errores.
Error E0021 Incorrect number of arguments: MIN
De antemano gracias
Estuve consultando con ChatGTP y me sugiri贸 que lo podemos hacer utilizando el algoritmo de Levenshtein, incluso nos dio un ejemplo para usarlo con PHP y Python. Le pregunte si lo pod铆amos hacer con xharbour/harbour y me dice que no hay una librer铆a que lo tenga, pero que podemos hacer el algoritmo en C++, ya que xharbour esta basado en clipper, que a su vez esta basado en c++.
Buscando en Google encontr茅 el mencionado algoritmo escrito en C++.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int levenshtein(const string &s1, const string &s2)
{
聽 聽int N1 = s1.size();
聽 聽int N2 = s2.size();
聽 聽int i, j;
聽 聽vector<int> T(N2+1);
聽 聽for ( i = 0; i <= N2; i++ )
聽 聽 聽 T[i] = i;
聽 聽for ( i = 0; i < N1; i++ )
聽 聽{
聽 聽 聽 T[0] = i+1;
聽 聽 聽 int corner = i;
聽 聽 聽 for ( j = 0; j < N2; j++ )
聽 聽 聽 {
聽 聽 聽 聽 聽int upper = T[j+1];
聽 聽 聽 聽 聽if ( s1[i] == s2[j] )
聽 聽 聽 聽 聽 聽 T[j+1] = corner;
聽 聽 聽 聽 聽else
聽 聽 聽 聽 聽 聽 T[j+1] = min(T[j], min(upper, corner)) + 1;
聽 聽 聽 聽 聽corner = upper;
聽 聽 聽 }
聽 聽}
聽 聽return T[N2];
}De casualidad alguno de los master, nos puede ayudar a traducir ese algoritmo para xharbour/harbour?
ChatGTP nos sugiri贸 este c贸digo para hacerlo. Pero salen varios errores.
//Algoritmo de Levenshtein
FUNCTION LevenshteinDistance(s1, s2)
聽 聽 LOCAL m, n, matriz, i, j, coste
聽 聽 m := Len(s1)
聽 聽 n := Len(s2)
聽 聽 matriz := Array(m+1, n+1)
聽 聽 FOR i := 0 TO m
聽 聽 聽 聽 matriz[i][0] := i
聽 聽 NEXT
聽 聽 FOR j := 0 TO n
聽 聽 聽 聽 matriz[0][j] := j
聽 聽 NEXT
聽 聽 FOR i := 1 TO m
聽 聽 聽 聽 FOR j := 1 TO n
聽 聽 聽 聽 聽 聽 IF s1[i] <> s2[j]
聽 聽 聽 聽 聽 聽 聽 聽 coste := 1
聽 聽 聽 聽 聽 聽 ELSE
聽 聽 聽 聽 聽 聽 聽 聽 coste := 0
聽 聽 聽 聽 聽 聽 ENDIF
聽 聽 聽 聽 聽 聽 matriz[i][j] := Min(matriz[i-1][j] + 1, matriz[i][j-1] + 1, matriz[i-1][j-1] + coste)
聽 聽 聽 聽 NEXT j
聽 聽 NEXT i
聽RETURN matriz[m][n]De antemano gracias
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]