kamlan v příspěvku #3 napsal(a)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.
Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ