Pro tu arabštinu skutečně může mít smysl zkoušet nahradit třeba jen počáteční nebo koncové formy písmen, nebo třeba vyhledávat podle počátečních forem apod. Ale říkal jsem si, jestli někoho nenapadne nějaký pěkný příklad z "latinky" kdy bude počítáno s tím že to nahradí skutečně vše a bude nežádoucí, když to [navzdory očekávání ze slůvka VŠE] nenahradí vše, ale nahradí to jen něco :-).
Nevím jestli je to správná kolonka (Chyba programu). Spíš by to mělo být například v kolonce co se jinam nehodí, nebo jiné vhodnější. To co uvádíte je rozšířená funkcionalita - nikoliv chyba programu.
S tou kombinatorikou máte pravdu. Bez rozlišení druhu jde o "varianty" ať už jde o kombinace, či variace "s" nebo "bez" opakování, nebo permutace.
V každém případě je to zralé spíš na vícenásobný výběr který by se musel dělat případ od případu, což v rámci představy volby dialogu znamená "najít další". Teprve zde lze udělat výběr pro správnou náhradu, která by se měla rozbalit (možná i s uvedením toho - kterého významu). Kliknutím na správnou volbu by došlo k náhradě a program by šel automaticky na další nález.
Pokud by to bylo provedeno jako dávka najednou, bylo by potřebné na konci vytvořit raport který by měl mít vlastnost kontextu změněného slova (nejbližší slova před a za, nebo celou větu - pokud arabština obsahuje "frázovací logiku jako anglina ap."). Pak by zde měla být další vlastnost - schopnost kliknout a skočit na komentovaný případ. To by mohlo znamenat, například tolik, že byl nalezen jenom jeden hledaný příznak a mohlo by jít o chybu textu, nebo chybu makra.
Nyní ke kombinatorické představě :
Ta musí vycházet ze známe definice Pascalova trojúhelníku. Asi to znáte, tak jen stručně pro připomenutí.
1. řádek, n => n^0(= součet řádku ve formě variací bez opakování)
2. řádek, n => n^1(= součet řádku ve formě variací bez opakování)
3. řádek, n => n^2(= součet řádku ve formě variací bez opakování)
4. řádek, n => n^3(= součet řádku ve formě variací bez opakování)
5. řádek, n => n^4(= součet řádku ve formě variací bez opakování)
----------------------------------------------------------------------------
Například 1. řádek je vždy 1 (někdy se vůbec neuvádí), druhý řádek má dva výrazy v podobě počtu kombinací C(1;0) | C(1;1). Pro 5. řádek je to už C(4;0) | C(4;1) | C(4;2) | C(4;3) | C(4;4) konkrétně :
1 | 4 | 6 | 4 | 1 => v součtu 16 = 2^4.
Konkrétně každý řádek Pascalova trojúhelníku je dán počtem "n" = všech možných, a "sloupce" (jsou dány) počtem všech různých tříd od nulté až k n-té. Přestože se ve sloupcích vyskytují jen "čisté" kombinace (bez opakování - to je stejně definiční nesmysl), jejich numerický součet je dán výrazem pro variace. Zápisy kombinací jsou prováděny standardně binomem (v závorce bez zlomkové čáry - jako "n" nad "k"). To se dá nahradit automaticky jen výsledkem (nejčastěji), nebo já v tomto případě uvádím v podobě vzorce pro tabulkové procesory.
----------------------------------------------------------------------------
Problém je v tom, že obecné varianty jsou dány jednak variacemi "čistých kombinací", a pak také permutacemi čistých kombinací jako souhrn od n(1)^0 do n^(x)0. Varianty ale nemusí obsahovat všechny různé permutace ani variace. Jen třeba některé. Bohu žel musíme také uvažovat o pojmech s opakováním. To když by se hledala možnost například AAA, BBB, ABB, BAB, BBA, AAB, ABA, BAA pro třetí třídy prvků A,B. Ve Vašem případě záleží na tom, zda je něco z toho pro arabštinu relevantní. Pak by se zahrnuly pouze relevantní tvary.
----------------------------------------------------------------------------
Z technického pohledu jde o zadání nejspíš 3. tříd pomocí regulárních výrazů takto : Prefix(CaseSensitive = PCS), jeden, nebo několik znaků) : Sufix(CaseSensitive = SCS), jeden, nebo několik znaků) : a jakýkoliv text(CaseNonSensitive libovolný počet znaků a více různých, CNS_1, CNS_2....) :
PCS + CNS
CNS + SCS
PCS + CNS + SCS,
nebo také vícenásobné řetězení například ještě se středním členem (CNS_2..), nebo jen (CS_2..) :
PCS + CNS_1 + CNS_2 + SCS, nebo
PCS + CNS_2 + CNS_1 + SCS a podobně.
----------------------------------------------------------------------------
Pokud znáte dobře možnosti stačí je soustředit intuitivně do jednoho inkrementálního vyhledávání. Ovšem pro zadání takového komplikovaného výrazu se musí vytvořit patřičný dialog. Ten může být volitelně nastavený na dávku, nebo jednotlivá potvrzování. Nespíš se třemi dalšími volbami : ANO (nahradit), NE(přeskočit) a ZRU3IT (pro vložení záložky ke které se později vrátíte).
Také je možné například barevně označit jednotlivé segmenty, nebo vypsat hned do textu všechny možnosti relevance plus záložku, nebo poznámku.
Pokud to chcete udělat opravdu dobře nemůže to být jenom automatická náhrada bez dalšího opatření kterým by se dalo dodatečně (a rychle) dát jinou variantu, nebo význam ap. Takže můj názor je ten, že by to neměly být v žádném případě automatické opravy, nebo dokončování.
Omlouvám se za mentorování, ale dostal jsem dojem, že Vy sám si nejste jist formou té nové funkcionality, respektive prostředky které je nutné použít. Pokud byste potřeboval makro pro iterace inkrementálního hledání (samozřejmě na jediný průchod) popište laicky co má dělat. Pokud víte přesně co lze, vystačíte s explicitním Select..Case.
]]>Smysl příspěvku má být v tom, že pomocí Nahradit Vše vlastně nemusí jít nahradit všechny varianty - a mě zajímalo, jestli se s tím někdo někdy setkal nebo to řešil -> že počítal s tím, že nahrazením vše se nahradí skutečně vše a poté přišel na to, že vše ale nahrazeno nebylo. A nebylo to nahrazeno tedy z důvodu, že jakmile je nalezena vyhledávaná varianta, tak další nález se hledá až od začátku znaku za nálezem a nikoliv třeba od druhého znaku té nalezené varianty, aby to prohledalo skutečně vše.
Když budu mít 1234 a dám hledat regulár (12|23), tak mi to nejprve najde 12, ale další hledání bude zkoušet až od trojky, čímž mi nenajde variantu 23 -> leda že bych to pustil třeba na druhý průchod [což ale opět může začít hledat od 1 a tedy opět najde 12 ale nikdy 23], nebo dal kurzor za jednotku aby hledal až od dvojky.
No a já potřeboval přidat nějaké znaky k nějakým arabským počátečním písmenům a dal jsem odkliknout Nahradit Vše a počítal že mi to skutečně nahradí vše, a ejhle, pak jsem zjistil že něco to nenahradilo. A nenahradilo to z toho důvodu že prostě aktuálně nalezenou část nijak na další hledání neuvažuje.
Což se asi nedá považovat za chybu, hledání je prostě tak koncipováno, ale je to trochu jazykově matoucí když počítám s tím že to nahradí vše a ono to pak vše nenahradí.
Pro tu arabštinu skutečně může mít smysl zkoušet nahradit třeba jen počáteční nebo koncové formy písmen, nebo třeba vyhledávat podle počátečních forem apod. Ale říkal jsem si, jestli někoho nenapadne nějaký pěkný příklad z "latinky" kdy bude počítáno s tím že to nahradí skutečně vše a bude nežádoucí, když to [navzdory očekávání ze slůvka VŠE] nenahradí vše, ale nahradí to jen něco :-).
Jinak nahrazovat si to umím, třeba na dva průchody Nahradit Vše - nejprve dát před počáteční formy třeba nějaký speciální znak a pro druhý průchod už je jasné že speciální znak je ryze jen počáteční forma a nikoliv možná část nějaké varianty.
Napadly mě i dvě makra ale ještě jsem se k tomu nedostal - v dialogu Ctrl+H jsou zaškrtávátka Rozlišovat kašídu a Rozlišovat diakritiku, která pro arabštinu setsakra využívám, avšak jejich nasazení do těch maker může být dost pracné ošetřit a jsem zvědav jak se Libre bude na ty mé vymyšlené algoritmy vlastně chovat :-) -> protože v současnosti ta zaškrtávátka pěkně fungují pro hledání, ale pro nahrazení jsou schopné dělat i další neplechu - např. když se nerozlišuje diakritika tak jí to nahradí (resp. smaže) i když by jí to mělo nechat být.
Ale chci to poslat na bugzillu jestli by nestálo za to dát pro Nahradit Vše nějaké zaškrtávátko aby to skutečně projelo všechny varianty tak jak jdou za sebou na jeden průchod.
]]>Nechápu - má se zobrazit plná možnost kombinací, nebo variací pro výběr toho správného řešení? Jistě není možné použít první další (relativě z generátoru následující) variantu od té testované. Navíc ve finéle může být více správných "variant" které lingvisticky odlišuje třeba tón nebo úšklebek.
Také nechápu jestli s tím potřebujete pomoci, nebo informujete, že jste vyřešil něco, co jiní nechápu :-( - omluva uniká mi smysl příspěvku. Pokud byste potřeboval spustit všechny možné varianty udělám to - je to pro mne snadné.
]]>Někdy by se však možná hodilo mít jistotu, že skutečně byly nalezeny a nahrazeny úplně všechny kombinace.
Příklad je zde https://uloz.to/file/3t1Sl69nKWRy/nahra … binace-odt
Už jsem to dal dohromady i v anglině a chci to poslat jako požadavek na bugzillu. Kdybyste někdo měl nějaký dobrý příklad kde by se to nahrazování skutečně všech kombinací hodilo v latince - a pokud by nebyly nahrazeny všechny kombinace tak by to bylo třeba nějak tristní, tak bych to chtěl potenciálně přidat k tomu uváděnému arabskému příkladu.
]]>