Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 29. 5. 2020 10:42:46

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 203

Nahradit Vše nenahradí všechny kombinace

Při zpracování arabštiny jsem narazil na to, že Nahradit Vše neudělá všechny kombinace. Když něco nalezne, tak tuto nalezenou část ani nějakou její podčást nebere jako možnou kombinaci pro další hledání.

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.

Offline

#2 30. 5. 2020 20:52:49

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,118

Re: Nahradit Vše nenahradí všechny kombinace

Celkem nerozumím ani věcně ani formálně. Víte jistě jestli mluvíte o kombinacích, nebo variacích? Omluvte mne za nemístnou přednášku, ale kombinace jsou dány jako C(n;k) a variace jako k!C(n+k).


    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é.


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É

Offline

#3 30. 5. 2020 23:52:19

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 203

Re: Nahradit Vše nenahradí všechny kombinace

neutr: omlouvám se za laickou terminologii, ale pojmy kombinatoriky skutečně neznám (navíc jsem jí měl v těžké neoblibě - to víte, já mám rád kompresi, což je poněkud z jiného soudku - byť pravdou je, že v terminologii bych byl i v kompresi stejný laik - či ňouma, dosaďte co uznáte za vhodné :-)]), tudíž pod pojmem kombinace možná používám něco, co vás jako kombinatorika zvedá ze židle; dál tedy budu používat "varianta", tím snad nic nezhorším :-).


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.

Offline

#4 31. 5. 2020 06:26:33

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,118

Re: Nahradit Vše nenahradí všechny kombinace

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É

Offline

Zápatí