Termín označuje, že slovo existuje, ale shoda se nezdařila? Nejprve zkontrolujte reprezentaci Unicode
Toto slovo je jasně ve glosáři, ale program říká, že není žádný hit. Vytiskněte provázek a uvidíte, že se obě strany zdají být úplně stejné. Důvod nemusí spočívat v překladu, ale v reprezentaci Unicode: znak s diakritikou může být buď jeden kódový bod nebo základní písmeno plus kombinační symbol.
Toto slovo je jasně ve glosáři, ale program říká, že není žádný hit. Vytiskněte provázek a uvidíte, že se obě strany zdají být úplně stejné. Tento typ problému je běžný ve scénářích dávkového překladu, vyhledávání termínů a porovnávání dokumentů. Důvod často není v samotném překladu, ale v reprezentaci Unicode: znak s diakritikou může být buď jeden kódový bod, nebo složený ze základních písmen plus kombinování symbolů.
Tento článek používá syntetické vzorky k demonstraci metody zpracování, která vám pomůže nejprve najít zdroj rozdílu a poté se rozhodnout, jak normalizovat a uložit data.
Kód byl zkontrolován s příklady v izolovaném prostředí, což nepředstavuje záruku všech skutečných souborů nebo výkonu produktu. Před zpracováním důležitých dokumentů si prosím uschovejte originály a zkontrolujte je podle hranic a přejímacích položek v textu.
Co mám dělat, když se shoda výrazů nezdaří? Závěr jednou větou
Nejprve určete, zda se jedná o rozdíl v reprezentaci nebo o rozdíl v obsahu: rozdíly v reprezentaci lze zarovnat pomocí normalizace, jako je NFC, zatímco rozdíly v obsahu je třeba zpracovat zpět k samotnému termínu.
| vaší situaci | Doporučené postupy | důvod |
|---|---|---|
| Řetězce vypadají stejně, ale shoda se nezdaří | Před porovnáním proveďte normalizaci NFC | NFC se často používá k zarovnání kanonicky ekvivalentních reprezentací |
| Jsou vyžadovány širší shody vyhledávání, například plná a poloviční šířka | Vyhodnoťte NFKC, ale nepřepisujte původní text | NFKC má širší rozsah, sbalí kompatibilní znaky a nemusí být nutně vhodné pro archivní nebo technické symboly. |
| Nekonzistentní případ | Vytvářejte klíče shody bez rozlišení velkých a malých písmen | casefold lze použít pro párování bez rozlišení velkých a malých písmen |
| Potřebujete zvýraznit nebo napsat zpět na původní text | Zachovat původní mapování fragmentů textu nebo přemístit na úroveň původního textu | Délka se může po normalizaci změnit a použití offsetu přímo zkrátí nesprávný rozsah. |
Nejprve potvrďte, zda představuje rozdíl nebo obsahový rozdíl.
Před porovnáním proveďte normalizaci NFC, která se často používá k zarovnání kanonicky ekvivalentních reprezentací. NFKC má širší rozsah a sbalí některé kompatibilní postavy. To může splňovat potřeby vyhledávání, ale ne nezbytně potřeby archivace nebo porovnávání technických symbolů.
Nezaměňujte „snazší shoda"za „sémantika musí zůstat nezměněna".
V syntetickém příkladu by dva způsoby zápisué měly být po NFC konzistentní; písmena plné šířky a znaky horního indexu se používají k zobrazení změn, které NFKC přinese. Jsou to pouze konkrétní příklady a neznamenají, že by všechny projekty měly mít určitou formu.
Použijte kód k zobrazení rozdílů, které jste předtím neviděli.
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])
Příklad vybírá NFC plus casefold pro párování termínů, což je záměrně omezená strategie párování. casefold také vytváří výsledky skládání závislé na jazyce, takže není vhodné pouze nahradit veškerý původní text vygenerovanými klíči.
Původní text a odpovídající tlačítka jsou uloženy samostatně.
Zachovejte original_text a vytvořte další normalized_key. První se používá pro zobrazení, trasování a kontrolu a druhý se používá pro vyhledávání podle aktuální strategie.
Zaznamenejte také název a verzi zásady. V budoucnu, když se použijí jiná pravidla, lze index podle toho znovu sestavit, místo aby se zjistilo, že původní text byl nevratně přepsán.
| pozorovat | Akce k vyzkoušení | Věci, které se nemají dělat náhodně |
|---|---|---|
| Rozdíl kombinačních napětí | Postupujte podle jasné strategie pro NFC | Tvrdit, že počet postav už nemá význam |
| Rozdíl plné šířky a poloviční šířky | Posuďte NFKC podle obchodních potřeb | Zakryjte přímo původní text technických dokumentů |
| Rozdíl mezi případy | Vytvořte odpovídající klíče bez rozlišení velkých a malých písmen | Nastavte zobrazovaný text pouze na malá písmena |
| Stále není zasažen | Zobrazte body kódu se skutečným kontextem | Průběžně překrývat a nahrazovat pravidla a zkusit své štěstí |
Normalizace neřeší všechny "vypadat stejně"
Mezi latinskými písmeny a znaky v jiných písmech, která mají podobný vzhled, nemusí existovat standardizovaný nebo kompatibilní vztah ekvivalence. Znaky s nulovou šířkou, různé mezery a OCR rozpoznávající písmena jako čísla, to vše je třeba diagnostikovat samostatně.
Pokud jde o scénáře citlivé na zabezpečení, jako jsou účty a identifikátory souborů, nepovažujte prosím příklady odpovídajících výrazů v tomto článku za úplnou ochranu znaků.
Sledování polohy je třeba řešit samostatně
Délka řetězce se může po normalizaci změnit. Použití posunu znaků v odpovídajícím klíči k oříznutí původního textu může snížit nesprávný rozsah.
Pokud je vyžadováno zvýraznění nebo zpětný zápis, mapování mezi fragmenty původního textu a odpovídajícími klávesami by mělo být zachováno nebo přemístěno na úrovni původního textu.
Před odesláním otázky překladateli si uschovejte důkazy
Při vyhodnocování terminologie a pracovního postupu překladu OmniDoc můžete připravit dvě reprezentace stejného termínu v Unicode, dokumentující zdrojový text, použitou strategii a překlad.
Tímto způsobem lze při zjištění nesrovnalostí rozlišit, zda problém spočívá ve shodě vstupu nebo výběru překladu, a vyhnout se obviňování všech rozdílů z modelu překladu.
📊 Srovnání jádra
| Strategie | Hlavní funkce | potřebují pozornost |
|---|---|---|
| NFC | Ekvivalentní reprezentace specifikace zarovnání, vhodná pro předzpracování porovnání | Neměňte formu kompatibilních znaků |
| NFKC | Širší rozsah, sbalí kompatibilní znaky, může být snadnější hledat | Není nezbytně vhodný pro archivaci nebo porovnávání technických značek |
| casefold | Vytvářejte klíče shody bez rozlišení velkých a malých písmen | Výsledky jsou závislé na jazyce a není vhodné přímo nahrazovat původní text. |
🎯 Která metoda je pro vás vhodná?
Pokud potřebujete zjistit, zda jsou dva řetězce stejné
Nejprve proveďte normalizaci NFC a poté porovnejte. Toto je výchozí bod pro zkoumání rozdílů v zastoupení.
Pokud provádíte vyhledávání nebo vyhledávání výrazů
Lze vytvořit normalized_key a zaznamenat název a verzi zásady, zatímco původní text zůstane nezměněn.
Pokud potřebujete zachovat původní text pro zobrazení nebo kontrolu
Ponechejte original_text, nepřepisujte jej odpovídajícím klíčem.
Pokud se zabýváte archivy, technickými symboly nebo obsahem citlivým na zabezpečení
Nejprve vyhodnoťte, zda je NFKC vhodné, a samostatně řešte problémy, jako jsou znaky s nulovou šířkou a podobné znaky. Nepovažujte normalizaci za úplnou ochranu.
❓ Často kladené otázky (FAQ)
1. Tyto dva řetězce vypadají stejně, proč se nemohou shodovat?
Je možné, že stejný znak s diakritikou je reprezentován dvěma způsoby: jako jeden kódový bod nebo jako základní písmeno plus kombinovaný symbol. Provedení normalizace NFC před porovnáním je může zarovnat.
2. Můžete přímo použít NFKC ke sjednocení všech postav?
nejistý. NFKC sbalí kompatibilní znaky, které nemusí vyhovovat potřebám archivace nebo porovnání technických symbolů, a měly by být vyhodnoceny podle obchodních potřeb.
3. Mohu po normalizaci přímo použít posun znaků ke zvýraznění původního textu?
Nelze jej použít přímo. Délka se může po normalizaci změnit, což vyžaduje zachování nebo přemístění mapování fragmentů na úrovni původního textu.
4. Dokáže normalizace rozpoznat všechny postavy s podobným vzhledem?
nemůže. Znaky s podobným vzhledem nemusí mít kanonickou nebo kompatibilní ekvivalenci a znaky s nulovou šířkou, mezery a chyby OCR je také třeba diagnostikovat samostatně.
📝 Shrnutí
Když se shoda termínu nezdaří, před výběrem explicitní strategie normalizace nejprve ověřte, zda je rozdíl reprezentací Unicode nebo rozdílem obsahu. Pouze pokud jsou originální text a odpovídající klíče uloženy samostatně, lze zohlednit efekt vyhledávání a sledovatelnost.
Zdroje: Python unicodedata
Vyzkoušejte to hned: Nahrajte dokument a začněte překládat při zachování původního rozvržení


