Le terme indique que le mot existe mais la correspondance échoue ? Vérifiez d'abord la représentation Unicode
Ce mot est clairement dans le glossaire, mais le programme indique qu'il n'y a aucun résultat. Imprimez la chaîne et voyez que les deux côtés semblent être exactement les mêmes. La raison ne réside peut-être pas dans la traduction, mais dans la représentation Unicode : un caractère accentué peut être soit un seul point de code, soit une lettre de base plus un symbole de combinaison.
Ce mot est clairement dans le glossaire, mais le programme indique qu'il n'y a aucun résultat. Imprimez la chaîne et voyez que les deux côtés semblent être exactement les mêmes. Ce type de problème est courant dans les scénarios de traduction par lots, de récupération de termes et de comparaison de documents. La raison ne réside souvent pas dans la traduction elle-même, mais dans la représentation Unicode : un caractère accentué peut être soit un seul point de code, soit composé de lettres de base et de symboles combinés.
Cet article utilise des échantillons synthétiques pour démontrer la méthode de traitement afin de vous aider à trouver d'abord la source de la différence, puis à décider comment normaliser et enregistrer les données.
Le code a été vérifié avec des exemples dans un environnement isolé, cela ne représente pas une garantie de tous les fichiers réels ou des performances du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation du texte.
Que dois-je faire si la correspondance des termes échoue ? Conclusion en une phrase
Déterminez d’abord s’il s’agit d’une différence de représentation ou d’une différence de contenu : les différences de représentation peuvent être alignées via une normalisation telle que NFC, tandis que les différences de contenu doivent être traitées jusqu’au terme lui-même.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
| Les chaînes se ressemblent mais la correspondance échoue | Effectuer la normalisation NFC avant la comparaison | NFC est souvent utilisé pour aligner des représentations canoniquement équivalentes |
| Des correspondances de recherche plus larges sont requises, telles que pleine largeur et demi-largeur | Évaluez NFKC, mais n'écrasez pas le texte original | NFKC a une portée plus large, réduira les caractères compatibles et ne sera pas nécessairement adapté aux symboles d'archives ou techniques. |
| Cas incohérent | Créer des clés de correspondance insensibles à la casse | casefold peut être utilisé pour une correspondance insensible à la casse |
| Besoin de surligner ou de réécrire le texte original | Conserver le mappage des fragments de texte d'origine ou repositionner au niveau du texte d'origine | La longueur peut changer après la normalisation et l'utilisation directe du décalage réduira la mauvaise plage. |
Confirmez d'abord s'il s'agit d'une différence ou d'une différence de contenu.
Effectuez une normalisation NFC avant la comparaison, souvent utilisée pour aligner des représentations canoniquement équivalentes. NFKC a une portée plus large et réduira certains caractères compatibles. Cela peut répondre aux besoins de recherche, mais pas nécessairement aux besoins de préservation des archives ou de comparaison technique de symboles.
Ne confondez pas « plus facile à faire correspondre » avec « la sémantique doit rester inchangée ».
Dans l'exemple synthétique, les deux manières d'écrire é devraient être cohérentes après NFC ; des lettres pleine chasse et des caractères en exposant sont utilisés pour montrer les changements apportés par NFKC. Ce ne sont que des exemples précis et ne signifient pas que tous les projets doivent adopter une certaine forme.
Utilisez le code pour voir les différences que vous n'aviez pas vues auparavant.
import unicodedata as ud
composed = "café"
decomposed = "cafe\u0301"
assert composed != decomposed
assert ud.normalize("NFC", composed) == ud.normalize("NFC", decomposed)
fullwidth = "ABC"
assert ud.normalize("NFC", fullwidth) == fullwidth
assert ud.normalize("NFKC", fullwidth) == "ABC"
assert ud.normalize("NFKC", "x²") == "x2"
def term_key(text):
return ud.normalize("NFC", text).casefold()
assert term_key("CAFÉ") == term_key(decomposed)
assert term_key("x²") != term_key("x2")
print([f"U+{ord(c):04X}" for c in decomposed])
L'exemple sélectionne NFC plus casefold pour la correspondance de termes, qui est une stratégie de correspondance intentionnellement limitée. casefold produit également des résultats de pliage dépendants de la langue, il n'est donc pas pratique de simplement remplacer tout le texte original par les clés générées.
Le texte original et les clés correspondantes sont stockés séparément.
Conservez original_text et créez un autre normalized_key. Le premier est utilisé pour l'affichage, le traçage et l'examen, et le second est utilisé pour la récupération dans le cadre de la stratégie actuelle.
Enregistrez également le nom et la version de la stratégie. À l’avenir, lorsque d’autres règles seront utilisées, l’index pourra être reconstruit en conséquence, plutôt que de constater que le texte original a été irréversiblement écrasé.
| observer | Actions à essayer | Des choses à ne pas faire avec désinvolture |
|---|---|---|
| Différence de contrainte combinée | Suivez une stratégie claire pour le NFC | Affirmer que le nombre de personnages n'a plus d'importance |
| Différence pleine largeur et demi-largeur | Évaluer NFKC en fonction des besoins de l'entreprise | Couvrir directement le texte original des documents techniques |
| Différence de cas | Créer des clés de correspondance insensibles à la casse | Rendre le texte affiché en minuscules |
| Toujours pas touché | Afficher les points de code avec le contexte réel | Superposez et remplacez continuellement les règles pour tenter votre chance |
La normalisation ne résout pas tous les problèmes "se ressemblent"
Il se peut qu'il n'y ait pas de relation d'équivalence standardisée ou compatible entre les lettres latines et les caractères d'autres écritures ayant une apparence similaire. Les caractères de largeur nulle, les différents espaces et l'OCR reconnaissant les lettres comme des chiffres doivent tous être diagnostiqués séparément.
Lorsqu'il s'agit de scénarios sensibles à la sécurité, tels que les comptes et les identifiants de fichiers, veuillez ne pas considérer les exemples de correspondance de termes dans cet article comme une protection complète des caractères obscurcis.
Le suivi de position doit être géré séparément
La longueur de la chaîne peut changer après la normalisation. L'utilisation du décalage de caractères dans la clé correspondante pour recadrer le texte original peut couper la mauvaise plage.
Lorsque la mise en surbrillance ou la réécriture est nécessaire, le mappage entre les fragments de texte original et les clés correspondantes doit être conservé ou repositionné au niveau du texte original.
Conservez les preuves avant de soumettre la question au traducteur
Lors de l'évaluation du flux de travail de terminologie et de traduction de OmniDoc, vous pouvez préparer deux représentations Unicode du même terme, en documentant le texte source, la stratégie utilisée et la traduction.
De cette manière, lorsque des incohérences sont détectées, il est possible de distinguer si le problème réside dans la correspondance des entrées ou dans la sélection de la traduction, et d'éviter d'attribuer toutes les différences au modèle de traduction.
📊 Comparaison de base
| Stratégie | Fonction principale | besoin d'attention |
|---|---|---|
| NFC | Représentation équivalente à la spécification d'alignement, adaptée au prétraitement de comparaison | Ne changez pas la forme des caractères compatibles |
| NFKC | Gamme plus large, réduira les caractères compatibles, peut être plus facile à rechercher | Pas nécessairement adapté à la préservation des archives ou à la comparaison de symboles techniques |
| casefold | Créer des clés de correspondance insensibles à la casse | Les résultats dépendent de la langue et il n'est pas approprié de remplacer directement le texte original. |
🎯 Quelle méthode vous convient ?
Si vous devez déterminer si deux chaînes sont identiques
Effectuez d'abord la normalisation NFC, puis comparez. C’est le point de départ pour examiner les différences de représentation.
Si vous effectuez une recherche ou une recherche par terme
normalized_key peut être créé et le nom et la version de la politique enregistrés, tandis que le texte original reste inchangé.
Si vous devez conserver le texte original pour l'afficher ou le réviser
Conservez original_text, ne l'écrasez pas avec une clé correspondante.
Si vous avez affaire à des archives, des symboles techniques ou du contenu sensible en matière de sécurité
Évaluez d’abord si NFKC est approprié et résolvez séparément les problèmes tels que les caractères de largeur nulle et les caractères similaires. Ne considérez pas la normalisation comme une protection complète.
❓ Questions fréquemment posées (FAQ)
1. Les deux chaînes se ressemblent, pourquoi ne peuvent-elles pas correspondre ?
Il est possible que le même caractère accentué soit représenté de deux manières : sous la forme d'un seul point de code ou sous la forme d'une lettre de base plus un symbole de combinaison. Effectuer une normalisation NFC avant la comparaison peut les aligner.
2. Pouvez-vous utiliser directement NFKC pour unifier tous les personnages ?
incertain. NFKC réduira les caractères compatibles, qui peuvent ne pas répondre aux besoins de préservation des archives ou de comparaison de symboles techniques, et doivent être évalués en fonction des besoins de l'entreprise.
3. Après la normalisation, puis-je utiliser directement le décalage des caractères pour surligner le texte original ?
Il ne peut pas être utilisé directement. La longueur peut changer après la normalisation, nécessitant que le mappage des fragments soit préservé ou repositionné au niveau du texte d'origine.
4. La normalisation peut-elle reconnaître tous les caractères ayant une apparence similaire ?
ne peut pas. Les caractères ayant une apparence similaire peuvent ne pas avoir d'équivalence canonique ou compatible, et les caractères de largeur nulle, les espaces et les erreurs OCR doivent également être diagnostiqués séparément.
📝Résumé
Lorsqu'une correspondance de terme échoue, confirmez d'abord si la différence est une représentation Unicode ou une différence de contenu avant de choisir une stratégie de normalisation explicite. Ce n'est que lorsque le texte original et les clés correspondantes sont enregistrés séparément que l'effet de récupération et la traçabilité peuvent être pris en compte.
Références : Python unicodedata


