Cet article explore les complexités de la division efficace d'une chaîne de texte dépourvue d'espaces en une liste significative de mots. Nous explorons un algorithme qui exploite la fréquence des mots pour obtenir des résultats précis pour des données du monde réel.
L'algorithme fonctionne sous l'hypothèse que les mots sont distribués indépendamment, conformément à la loi de Zipf. Cela implique que la probabilité de rencontrer un mot de rang « n » dans un dictionnaire est d'environ 1/(n log N), où N représente le nombre total de mots dans le dictionnaire.
Pour déduire la position de espaces, nous utilisons une programmation dynamique. Nous définissons une fonction de coût qui utilise le logarithme de l'inverse de la probabilité d'un mot. La phrase optimale maximise le produit des coûts de mots individuels, qui peuvent être calculés efficacement à l'aide de la programmation dynamique.
Le code Python suivant implémente l'algorithme :
<code class="python">import math words = open("words-by-frequency.txt").read().split() wordcost = dict((k, log((i+1)*log(len(words)))) for i,k in enumerate(words)) maxword = max(len(x) for x in words) def infer_spaces(s): cost = [0] for i in range(1,len(s)+1): c,k = best_match(i) cost.append(c) out = [] i = len(s) while i>0: c,k = best_match(i) out.append(s[i-k:i]) i -= k return " ".join(reversed(out))</code>
En utilisant le code fourni, nous pouvons diviser une chaîne de texte sans espaces et obtenir des mots significatifs :
s = 'thumbgreenappleactiveassignmentweeklymetaphor' print(infer_spaces(s))
L'algorithme déduit efficacement l'emplacement des espaces, ce qui permet une reconnaissance précise des mots pour les chaînes de texte courtes et longues. Même en l'absence de délimiteurs explicites, le résultat conserve un haut niveau de cohérence et de lisibilité.
L'algorithme offre plusieurs avantages :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!