2 votes

Comparer 2 chaînes de texte pour voir si elles sont similaires en Javascript

Je suis nouveau en Javascript et j'ai une petite question, je voudrais savoir comment comparer 2 chaînes de texte pour voir si elles sont similaires, je ne veux pas les comparer pour voir si elles sont les mêmes, pour cela il y a Equals et ==, je veux juste savoir si elles sont similaires, par exemple :

var a = "Hello Blue World";    
var b = "Hello Blut World?";

if(a similar b)
console.log(true);
}

Comment faire pour que le programme détecte que ces deux textes se ressemblent, je ne sais pas si vous me comprenez, merci beaucoup d'avance !

2voto

Xavier Brassoud Points 456

Vous pouvez utiliser similarité des chaînes de caractères bibliothèque.

Détermine le degré de similitude entre les chaînes de caractères, sur la base du coefficient de Dice, qui est généralement meilleur que la distance de Levenshtein.

var a = "Hello Blue World";
var b = "Hello Blut World?";

var stringSimilarity = require("string-similarity");
var similarityCoef = stringSimilarity.compareTwoStrings(a, b);

if (similarityCoef > 0.8) { console.log(true); }

Il convient de noter que similarityCoef imprime vrai lorsque la chaîne correspond à 80 % (0,8). Vous pouvez adapter cette valeur à vos besoins.

0voto

Lynx 242 Points 3908

C'est délicat. Parce qu'il faut d'une manière ou d'une autre dire en pourcentage ce que la similitude signifie pour vous. Qu'en est-il de cette approche ?

Vous les comparez chaîne par chaîne et comptez les correspondances. Je sais que cela échouera dès qu'il y aura un caractère supplémentaire au début de l'une des chaînes. Mais pour commencer, cela devrait suffire.

var a = "Hello Blue World";
var b = "Hello Blut World?";

 // only compare both strings with their mutual length, because of the loop we use
const mutualLength = (a.length > b.length) ? b.length : a.length;
const similarityAt = 90; // percent
let matchCount = 0;

// with each match increase matchCount by 1
for (let pointer = 0; pointer < mutualLength; pointer++) {
    if (a.substring(pointer, 1) === (b.substring(pointer, 1) {
        matchCount++;
    }
}

 // compute similarity in percent
const similarity = (matchCount * 100) / mutualLength;

console.log('Similarity given: ' + (similarity >= similarityAt));

0voto

if 'n' is zero then strings are equal

  var str1 = "ab";
  var str2 = "cd";
  var n = str1.localeCompare(str2);
  console.log(n);

0voto

John Goshen Points 139

B "H

Cela dépend du degré de similitude, mais si vous voulez un pourcentage pour savoir ce qui correspond, vous pouvez simplement faire une boucle sur la chaîne la plus courte et noter combien de fois chaque caractère correspond à l'indice suivant de la chaîne la plus longue (ou ajouter des espaces à la chaîne la plus courte, mais cela pourrait fausser certains calculs), puis diviser le nombre total de correspondances par la longueur de la chaîne (la plus courte) pour obtenir le pourcentage d'égalité.

var str1 = "Hello blue world"
var str2 = "Hello blut world?!"

var shortest = str2.length >= str1.length?str1:str2
var longest = str2.length < str1.length?str1:str2

var matches= 0

shortest
.split("")
//Just check if index of shortest
//Matches index of longest, and if so (&& means do next
//Expression) add the total number of matches by one
.forEach (
(x,k)=>
((x==longest[k]) && (matches++) )
)

//Final result, divide matches by total length
var similarity = matches / shortest.length

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X