§ <ˆj;*ã ón—ddlZddlmZddlmZddlmZddlmZm Z m Z m Z m Z ddl mZddlmZmZmZmZdd lmZdd lmZdd lmZmZmZmZmZd ed e efd„Zded e efd„Z e¦«d ed e efd„¦«Z!e¦«d ed e efd„¦«Z"ee¬¦«ded e e#e#ffd„¦«Z$ d%de ede#d e efd„Z%dede ed e&fd„Z'ded e efd„Z(de ed efd„Z)ed ¬¦« d&ded"e&d#e ed efd$„¦«Z*dS)'éN)ÚIncrementalDecoder)ÚCounter)Ú lru_cache)rÚDictÚListÚOptionalÚTupleé)Ú FREQUENCIES)ÚKO_NAMESÚLANGUAGE_SUPPORTED_COUNTÚTOO_SMALL_SEQUENCEÚZH_NAMES)Ú is_suspiciously_successive_range)ÚCoherenceMatches)Úis_accentuatedÚis_latinÚis_multi_byte_encodingÚis_unicode_range_secondaryÚ unicode_rangeÚ iana_nameÚreturncó䇇—t|¦«rtd¦«‚tjd |¦«¦«j}|d¬¦«}iŠdŠt dd¦«D]h}| t|g¦«¦«}|rAt|¦«}|€Œ9t|¦«d ur|‰vrd‰|<‰|xxd z cc<‰d z ŠŒitˆˆfd „‰D¦«¦«S) zF Return associated unicode ranges in a single byte code page. z.Function not supported on multi-byte code pagez encodings.{}Úignore)Úerrorsré@éÿNFr có2•—g|]}‰|‰z dk¯|‘ŒS)g333333Ã?©)Ú.0Úcharacter_rangeÚcharacter_countÚ seen_rangess €€úL/opt/cloudlinux/venv/lib64/python3.11/site-packages/charset_normalizer/cd.pyú z*encoding_unicode_range..3s8ø€ð ð ð àØ˜?Ô+¨oÑ=ÀÒEÐEð àEÐEÐEó) rÚIOErrorÚ importlibÚ import_moduleÚformatrÚrangeÚdecodeÚbytesrrÚsorted)rÚdecoderÚpÚiÚchunkr!r"r#s @@r$Úencoding_unicode_ranger3sIøø€õ˜iÑ(Ô(ðHÝÐFÑGÔGÐGåÔ%Ø×Ò˜iÑ(Ô(ñôäð ð$˜G¨8Ð4Ñ4Ô4€AØ"$€KØ€Oå �4˜Ñ Ô ð %ð %ˆØ—X’X�e Q C™jœjÑ)Ô)ˆà ð %Ý-:¸5Ñ-AÔ-AˆOàÐ&Øå)¨/Ñ:Ô:¸eÐCÐCØ"¨+Ð5Ð5Ø34�K Ñ0ؘOÐ,Ð,Ô,°Ñ1Ð,Ð,Ñ,Ø 1Ñ$�øå ð ð ð ð ð à#.ð ñ ô ñ ô ðr&Ú primary_rangecóš—g}tj¦«D]4\}}|D],}t|¦«|kr| |¦«nŒ-Œ5|S)z> Return inferred languages used with a unicode range. )r ÚitemsrÚappend)r4Ú languagesÚlanguageÚ charactersÚ characters r$Úunicode_range_languagesr<;so€ð€Iå +Ô 1Ñ 3Ô 3ððш�*Ø#ð ð ˆIݘYÑ'Ô'¨=Ò8Ð8Ø× Ò  Ñ*Ô*Ð*Ø�ð9øð Ðr&cóf—t|¦«}d}|D] }d|vr|}nŒ |€dgSt|¦«S)zœ Single-byte encoding language association. Some code page are heavily linked to particular language(s). This function does the correspondence. NÚLatinú Latin Based)r3r<)rÚunicode_rangesr4Úspecified_ranges r$Úencoding_languagesrBJs]€õ !7°yÑ AÔ A€NØ#'€Mà)ððˆØ ˜/Ð )Ð )Ø+ˆMØ ˆEð *ðÐØˆÐå " =Ñ 1Ô 1Ð1r&có—| d¦«s0| d¦«s| d¦«s|dkrdgS| d¦«s |tvrddgS| d ¦«s |tvrd gSgS) z› Multi-byte encoding language association. Some code page are heavily linked to particular language(s). This function does the correspondence. Úshift_Ú iso2022_jpÚeuc_jÚcp932ÚJapaneseÚgbÚChinesezClassical ChineseÚ iso2022_krÚKorean)Ú startswithrr )rs r$Úmb_encoding_languagesrN^s¶€ð ×Ò˜XÑ&Ô&ðà × Ò   Ñ -Ô -ðð × Ò  Ñ (Ô (ðð ˜Ò Ð àˆ|ÐØ×Ò˜DÑ!Ô!ð0 Yµ(Ð%:Ð%:ØÐ.Ð/Ð/Ø×Ò˜LÑ)Ô)ð¨Y½(Ð-BÐ-B؈zÐà €Ir&)Úmaxsizer9có‚—d}d}t|D]*}|st|¦«rd}|rt|¦«durd}Œ+||fS)zg Determine main aspects from a supported language if it contains accents and if is pure Latin. FT)r rr)r9Útarget_have_accentsÚtarget_pure_latinr;s r$Úget_target_featuresrSssn€ð !&ÐØ"Ðå  Ô*ð&ð&ˆ Ø"ð '¥~°iÑ'@Ô'@ð 'Ø"&Ð Ø ð &¥¨)Ñ!4Ô!4¸Ð!=Ð!=Ø %Ð øà Ð 1Ð 1Ð1r&Fr:Úignore_non_latinc󂇗g}td„‰D¦«¦«}tj¦«D]q\}}t|¦«\}}|r|durŒ|dur|rŒ%t |¦«}t ˆfd„|D¦«¦«} | |z } | dkr| || f¦«Œrt |d„d¬¦«}d„|D¦«S) zE Return associated languages associated to given characters. c3ó4K—|]}t|¦«V—ŒdS©N)r)r r;s r$ú z%alphabet_languages..Œs*èè€ÐTÐT¸I�n¨YÑ7Ô7ÐTÐTÐTÐTÐTÐTr&Fcó•—g|]}|‰v¯|‘Œ Srr)r Úcr:s €r$r%z&alphabet_languages..›sø€Ð ?Ð ?Ð ?�1¨q°J¨¨ˆQ¨¨¨r&gš™™™™™É?có—|dS©Nr r©Úxs r$úz$alphabet_languages..£s €°°!´€r&T©ÚkeyÚreversecó—g|] }|d‘Œ S)rr)r Úcompatible_languages r$r%z&alphabet_languages..¥s€Ð HÐ HÐ HÐ':Ð  Ô "Ð HÐ HÐ Hr&)Úanyr r6rSÚlenr7r.) r:rTr8Úsource_have_accentsr9Úlanguage_charactersrQrRr"Úcharacter_match_countÚratios ` r$Úalphabet_languagesrk„sø€ð *,€IåÐTÐTÈÐTÑTÔTÑTÔTÐå)4Ô):Ñ)<Ô)<ð0ð0Ñ%ˆÐ%å1DÀXÑ1NÔ1NÑ.ÐÐ.à ð Ð 1°UÐ :Ð :Ø à  %Ð 'Ð 'Ð,?Ð 'Ø å"Ð#6Ñ7Ô7ˆå%(Ø ?Ð ?Ð ?Ð ?Ð+Ð ?Ñ ?Ô ?ñ& ô& Ðð-¨Ñ>ˆà �CŠ<ˆ<Ø × Ò ˜h¨Ð.Ñ /Ô /Ð /øå�y n n¸dÐCÑCÔC€Ià HÐ H¸iÐ HÑ HÔ HÐHr&Úordered_characterscó¢—|tvr"td |¦«¦«‚d}tt|¦«}|D�]s}||vrŒt|dt| |¦«…}t|t| |¦«d…}|d| |¦«…}|| |¦«d…}t t|¦«t|¦«z¦«} t t|¦«t|¦«z¦«} t |¦«dkr | dkr|dz }�Œ t |¦«dkr | dkr|dz }�Œ@| t |¦«z dks| t |¦«z dkr|dz }�Œs�Œu|t |¦«z S)aN Determine if a ordered characters list (by occurrence from most appearance to rarest) match a particular language. The result is a ratio between 0. (absolutely no correspondence) and 1. (near perfect fit). Beware that is function is not strict on the match in order to ease the detection. (Meaning close match is 1.) z{} not availablerNér gš™™™™™Ù?)r Ú ValueErrorr*ÚsetÚindexrf) r9rlÚcharacter_approved_countÚFREQUENCIES_language_setr;Úcharacters_before_sourceÚcharacters_after_sourceÚcharacters_beforeÚcharacters_afterÚbefore_match_countÚafter_match_counts r$Úcharacters_popularity_comparerz¨s€ð•{Ð"Ð"ÝÐ+×2Ò2°8Ñ<Ô<Ñ=Ô=Ð=à$%ÐÝ"¥;¨xÔ#8Ñ9Ô9Ðà'ð&ñ&ˆ Ø Ð4Ð 4Ð 4Ø å.9¸(Ô.CØ • ˜HÔ%×+Ò+¨IÑ6Ô6Ð 6ô/ Ð õ.9¸Ô-BÝ ˜Ô !× 'Ò '¨ Ñ 2Ô 2Ð 4Ð 4ô. Ðð(:Ø Ð"×(Ò(¨Ñ3Ô3Ð 3ô( Ðð'9Ø × $Ò $ YÑ /Ô /Ð 1Ð 1ô' Ðõ#&Ý Ð!Ñ "Ô "¥SÐ)AÑ%BÔ%BÑ Bñ# ô# Ðõ"%Ý Ð Ñ !Ô !¥CÐ(?Ñ$@Ô$@Ñ @ñ" ô" Ðõ Ð'Ñ (Ô (¨AÒ -Ð -Ð2DÈÒ2IÐ2IØ $¨Ñ )Ð $Ù å Ð&Ñ 'Ô '¨1Ò ,Ð ,Ð1BÀaÒ1GÐ1GØ $¨Ñ )Ð $Ù ð ¥Ð%=Ñ!>Ô!>Ñ >À#Ò EÐ EØ ¥3Ð'>Ñ#?Ô#?Ñ?À3ÒFÐFà $¨Ñ )Ð $Ù ñGð $¥cÐ*<Ñ&=Ô&=Ñ =Ð=r&Údecoded_sequencecób—i}|D]Š}| ¦«durŒt|¦«}|€Œ+d}|D]}t||¦«dur|}nŒ|€|}||vr| ¦«||<Œh||xx| ¦«z cc<Œ‹t | ¦«¦«S)a Given a decoded text sequence, return a list of str. Unicode range / alphabet separation. Ex. a text containing English/Latin with a bit a Hebrew will return two items in the resulting list; One containing the latin letters and the other hebrew. FN)ÚisalpharrÚlowerÚlistÚvalues)r{Úlayersr;r!Úlayer_target_rangeÚdiscovered_ranges r$Úalpha_unicode_splitr„ásü€ð  €Fà%ð8ð8ˆ Ø × Ò Ñ Ô  %Ð 'Ð 'Ø å)6°yÑ)AÔ)Aˆà Ð "Ø à,0Ðà &ð ð Ð å0Ð1AÀ?ÑSÔSØððð&6Ð"Ø�ð ð Ð %Ø!0Ð à  VÐ +Ð +Ø)2¯ªÑ):Ô):ˆFÐ%Ñ &Ø àÐ!Ð"Ð"Ô" i§o¢oÑ&7Ô&7Ñ7Ð"Ð"Ñ"Ð"å �— ’ ‘”Ñ Ô Ð r&Úresultscó´‡—iŠ|D]2}|D]-}|\}}|‰vr|g‰|<Œ‰| |¦«Œ.Œ3ˆfd„‰D¦«}t|d„d¬¦«S)z‹ This function merge results previously given by the function coherence_ratio. The return type is the same as coherence_ratio. c 󆕗g|]=}|tt‰|¦«t‰|¦«z d¦«f‘Œ>S)rn)ÚroundÚsumrf)r r9Úper_language_ratioss €r$r%z*merge_coherence_ratios..sdø€ð ð ð ð ð Ý ÝÐ'¨Ô1Ñ2Ô2µSÐ9LÈXÔ9VÑ5WÔ5WÑWØñ ô ð ð ð ð r&có—|dSr\rr]s r$r_z(merge_coherence_ratios..!s € q¨¤t€r&Tr`)r7r.)r…ÚresultÚ sub_resultr9rjÚmergerŠs @r$Úmerge_coherence_ratiosr�s²ø€ð 35ÐØð8ð8ˆØ ð 8ð 8ˆJØ(‰OˆH�eØÐ2Ð2Ð2Ø16°Ð# HÑ-ØØ  Ô )× 0Ò 0°Ñ 7Ô 7Ð 7Ð 7ð  8ð ð ð ð ð,ð ñ ô €Eõ �%˜^˜^°TÐ :Ñ :Ô :Ð:r&içš™™™™™¹?Ú thresholdÚ lg_inclusionc ó0—g}d}d}|�| d¦«ng}d|vrd}| d¦«t|¦«D]º}t|¦«}| ¦«} t d„| D¦«¦«} | t krŒJd„| D¦«} |pt| |¦«D]Q} t| | ¦«} | |krŒ| d kr|d z }|  | t| d ¦«f¦«|d krnŒRŒ»t|d „d¬¦«S)z¨ Detect ANY language that can be identified in given sequence. The sequence will be analysed by layers. A layer = Character extraction by alphabets/ranges. FrNú,r?Tc3ó K—|] \}}|V—Œ dSrWr©r rZÚos r$rXz"coherence_ratio..;s&èè€Ð"=Ð"=©¨¨A 1Ð"=Ð"=Ð"=Ð"=Ð"=Ð"=r&có—g|]\}}|‘ŒSrrr–s r$r%z#coherence_ratio..@s€Ð/JÐ/JÐ/J±d°a¸°Ð/JÐ/JÐ/Jr&gš™™™™™é?r rnécó—|dSr\rr]s r$r_z!coherence_ratio..Ss €¨¨1¬€r&r`) ÚsplitÚremover„rÚ most_commonr‰rrkrzr7rˆr.)r{r‘r’r…rTÚsufficient_match_countÚlg_inclusion_listÚlayerÚsequence_frequenciesr�r"Úpopular_character_orderedr9rjs r$Úcoherence_ratior£$s~€ð(*€GØ"Ðà"#Ðà3?Ð3K˜ ×*Ò*¨3Ñ/Ô/Ð/ÐQSÐØÐ)Ð)Ð)ØÐØ× Ò  Ñ/Ô/Ð/å$Ð%5Ñ6Ô6ððˆÝ18¸±´ÐØ*×6Ò6Ñ8Ô8ˆ å"Ð"=Ð"=°Ð"=Ñ"=Ô"=Ñ=Ô=ˆà Õ0Ò 0Ð 0Ø à/JÐ/J¸kÐ/JÑ/JÔ/JÐ!à)ð Õ-?Ø %Ð'7ñ. ô. ð ð ˆHõ9ØÐ3ñôˆEð�yÒ Ð ØØ˜#’�Ø&¨!Ñ+Ð&à �NŠN˜H¥e¨E°1¡o¤oÐ6Ñ 7Ô 7Ð 7à%¨Ò*Ð*Ø�ð+øõ �'˜~˜~°tÐ <Ñ <Ô <Ðr±s@ðØÐÐÐØ%Ð%Ð%Ð%Ð%Ð%ØÐÐÐÐÐØÐÐÐÐÐØFÐFÐFÐFÐFÐFÐFÐFÐFÐFÐFÐFÐFÐFàÐÐÐÐÐØVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVØ0Ð0Ð0Ð0Ð0Ð0Ø$Ð$Ð$Ð$Ð$Ð$ððððððððððððððð$ cð$¨d°3¬ið$ð$ð$ð$ðN ¨3ð °4¸´9ð ð ð ð ð €�„ð2 #ð2¨$¨s¬)ð2ð2ð2ñ „ð2ð& €�„ð Sð¨T°#¬Yðððñ „ðð( €Ð+Ð,Ñ,Ô,ð 2 #ð 2¨%°°d° Ô*;ð 2ð 2ð 2ñ-Ô,ð 2ð"5:ð!Ið!IØ�S” ð!IØ-1ð!Ià ˆ#„Yð!Ið!Ið!Ið!IðH6>Øð6>Ø'+¨C¤yð6>à ð6>ð6>ð6>ð6>ðr$!¨#ð$!°$°s´)ð$!ð$!ð$!ð$!ðN; DÐ)9Ô$:ð;Ð?Oð;ð;ð;ð;ð8 €�4ÐÑÔàQUð.=ð.=Øð.=Ø&+ð.=ØAIÈ#Äð.=àð.=ð.=ð.=ñÔð.=ð.=ð.=r&