Malheureusement, il semble que j'ai fait (par exemple) \ u00B8 (cédille) au lieu de \ u0327 (combinant cédille) dans mon texte.
Eurgh, méchant! Vous pouvez toujours le faire automatiquement, bien que le processus ne soit pas entièrement sans perte car il implique une décomposition de compatibilité (NFKD).
Normaliser U + 00B8 à NFKD et vous obtiendrez un espace suivi par le U + 0327. Vous pouvez ensuite parcourir la chaîne à la recherche de tout espace-suivi-par-combinaison-caractère, et supprimer l'espace. Recomposer finalement à NFC pour mettre les caractères de combinaison sur le caractère précédent à la place.
s= unicodedata.normalize('NFKD', s)
s= ''.join(c for i, c in enumerate(s) if c!=' ' or unicodedata.combining(s[i+1])==0)
s= unicodedata.normalize('NFC', s)
Oui, cela fonctionne - en supposant que j'ai vraiment décomposé unicode. Malheureusement, il semble que j'ai (par exemple) \ u00B8 (cedilla) au lieu de \ u0327 (en combinant cedilla) dans mon texte. On dirait que je devrais soit mapper ces caractères à leur équivalent de combinaison ou tout simplement les dépouiller entièrement. Merci. – msanders