J'écris un programme en C# qui compare les chaînes de caractères de la même manière que Google recherche des documents pour les mots-clés.Comment puis-je voir si une chaîne en contient un autre de manière lâche (casse, espace supplémentaire et ponctuation ignorés)?
Je veux une recherche de "débordement de pile" pour retourner vrai pour "débordement de pile" (clair), "C'est le débordement de pile." (au milieu), "Bienvenue dans Stack Overflow". (cas insensible), "J'aime le débordement de la pile." (espace variable), et "Qui met un tiret dans le débordement de la pile?", mais pas "" stackoverflow "(pas d'espace). Je pensais que je pourrais utiliser une expression régulière comme "stack ([-] |.) + Overflow", il semble exagéré de devoir remplacer chaque espace de chaque mot-clé par un jeu de caractères pour chaque nouveau mot-clé. Parce que "stack overflow" n'est pas la seule chaîne que je recherche, je dois le faire de manière pragmatique.
Il semble que vous ayez besoin d'algorithmes de logique floue. Une recherche rapide fait apparaître la distance de Levenshtein comme un moyen de mesurer le nombre de modifications nécessaires pour transformer une chaîne en une autre. –
Cette question connexe offre quelques possibilités: http://stackoverflow.com/questions/1358687/what-are-good-methods-to-find-the-relatedness-of-two-bodies-of-text –