Le code ci-dessous est conçu pour insérer une chaîne et supprimer un ensemble de mots arbitraires considérés comme non essentiels à une phrase de recherche..NET Amélioration des performances d'analyse de chaîne - Odeur de code possible
Je n'ai pas écrit le code, mais j'ai besoin de l'incorporer dans quelque chose d'autre. Ça marche, et c'est bien, mais ça me fait mal. Cependant, je n'arrive pas à sortir la tête de la boîte que cette méthode a créée pour penser à une autre approche. Peut-être que je ne fais que le rendre plus compliqué que nécessaire, mais je pense que cela pourrait être plus propre avec une technique différente, peut-être en utilisant LINQ.
Toutes les suggestions sont les bienvenues. y compris la suggestion que je suis trop penser et que le code existant est parfaitement clair, concis et performant.
Alors, voici le code:
private string RemoveNonEssentialWords(string phrase)
{
//This array is being created manually for demo purposes. In production code it's passed in from elsewhere.
string[] nonessentials = {"left", "right", "acute", "chronic", "excessive", "extensive",
"upper", "lower", "complete", "partial", "subacute", "severe",
"moderate", "total", "small", "large", "minor", "multiple", "early",
"major", "bilateral", "progressive"};
int index = -1;
for (int i = 0; i < nonessentials.Length; i++)
{
index = phrase.ToLower().IndexOf(nonessentials[i]);
while (index >= 0)
{
phrase = phrase.Remove(index, nonessentials[i].Length);
phrase = phrase.Trim().Replace(" ", " ");
index = phrase.IndexOf(nonessentials[i]);
}
}
return phrase;
}
Merci d'avance pour votre aide.
Cheers,
Steve
J'aime aussi séparer l'entrée en mots séparés. Sera également utile pour appliquer la logique future sur chaque terme de recherche. par exemple. Vérification de l'orthographe –
Si la performance doit être maximisée, il convient de noter que cette méthode contient encore beaucoup d'inefficacité. Tokenizing la chaîne d'entrée créera, évidemment, autant de chaînes séparées qu'il y a de mots dans la chaîne d'entrée. De même, la création du tableau et la reconnexion des mots peuvent prendre un certain temps si l'entrée est grande. –
@qstarin: Considérant qu'une phrase de recherche est peu susceptible d'être plus de, oh, environ 10 mots, je doute que cela va poser un problème important.Passez un 'HashSet' pour l'argument 'stop' et cela devient O (N) sur le nombre de mots; s'inquiéter de la performance au-delà de ce point devient optimisation IMO prématurée. Viser un code propre et lisible qui fonctionne * raisonnablement * bien d'abord; alors, si ce n'est pas suffisant, vous pouvez commencer à faire des micro-optimisations. –
Aaronaught