estático público Class Jarowinklerdistance {/ * A modificación Winkler non se aplicará a menos que a coincidencia * por cento estivese en ou por encima do porcentaxe mveithreshold * sen a modificación. * O papel de Winkler usou un valor predeterminado de 0,7 * / privado estático estático dobre mighttherhold = 0.7; / * Tamaño do prefixo para ser conciderado pola modificación Winkler. * O papel de Winkler utilizou un valor predeterminado de 4 * / privado estático estático int mnumchars = 4; /// < Resumen > /// devolve a distancia de Jaro-Winkler entre as cadeas especificadas ///. A distancia é simétrica e caerá na /// range 0 (xogo perfecto) a 1 (sen coincidencia). /// < / resumir > /// < param name = "astring1" > First string < / param > /// < param name = "astring2" > segunda string < / param > /// < devolver > < / devolve > Distancia dobre estática pública (cadea astring1, cadea astring2) {retorno 1.0 - Proximidade (astring1, astring2); } /// < resumen > /// devolve a distancia de Jaro-Winkler entre as cadeas especificadas ///. A distancia é simétrica e caerá na /// gama 0 (sen coincidencia) a 1 (xogo perfecto). /// < / resumir > /// < param name = "astring1" > First string < / param > /// < param name = "astring2" > segunda string < / param > /// < devolver > < / devolve > Proximidade dobre estática pública (cadea astring1, cadea astring2) {int llen1 = astring1.length; int llen2 = astring2.length; if (llen1 == 0) devolve llen2 == 0? 1.0: 0.0; int lsearchrigange = math.max (0, math.max (llen1, llen2) / 2 - 1); // predeterminado inicializado a falso bool lmatched1 = New Bool; bool lmatched2 = New Bool; int lnumcommon = 0; para (int i = 0; i < llen1; ++ i) {int lstart = math.max (0, i-lsearchrange); int lend = math.min (i + lsegrearge + 1, llen2); para (int j = lstart; j < lend; ++ j) {se (lmatched2) continuar; se (astring1! = astring2) continuar; lmatched1 = True; lmatched2 = true; ++ Lnumcommon; romper; }} if (lnumcommon == 0) devolver 0,0; int lnumhalftranspose = 0; int k = 0; para (int i = 0; i < llen1; ++ i) {se (! lmatched1) continuar; mentres (! lmatched2) ++ k; Se (Astring1! = Astring2) ++ LNUMHALFTRANSPOSED; ++ k; } // SYSTEM.DIAGNOSTICS.DEBUG.WRITELINE ("NUMHALFTRANSPOSED =" + NUMHALFTRANSPOSED); int lnumtranspose = lnumhalftranspose / 2; // SYSTEM.DIAGNOSTICS.DEBUG.WRITELINE ("NUMCOMMON =" + NUMCOMMON + "NUTTRANSPOSED =" + NUTTRANTSPOSED); dobre lnumcommond = lnumcommon; DOUBLE LVEWVE = (LNUMCOMMOND / LLEN1 + LNUMCOMMOND / LLEN2 + (LNUMCOMMON - LNUMTRANSPOSED) / LNUMCOMMOND) /3.0; Se (LPEWEW < = MLYETHRESHOLD) Devolve Luch; int lmax = math.min (mnumchars, math.min (astring1.length, astring2.length)); int lpos = 0; WHILE (LPOS < LMAX & & astring1 == astring2) ++ LPO; Se (LPOS == 0) devolve LLPE; Devolve LPO + 0,1 * LPOS * (1.0 - Luch); }}