[vastaus aiempaan viestiin]
Kirjoittaja: | Seppo Mustonen |
---|---|
Sähköposti: | - |
Päiväys: | 13.6.2004 19:15 |
Olen nyt kehittänyt ratkaisun myös täsmennyssanojen tarkkailuun. Tietyllä edellytyksellä edellisen viestini alussa mainitsemassani Petri Palmun pulmassa ratkaisu näyttäytyy seuraavasti: Kun siis virheellinen komentorivi FILE SAVE testi2.txt,KOE1 / NAMES=1 / DELIMETER=TAB / FIRST=2 aktivoidaan, komennon alle tulee ilmoitus Tuntematon täsmennys DELIMETER, Paina ENTER! Vaihtoehtoja: DELIMITER Luulisi sen todella auttavan tämäntapaisissa virhetilanteissa. (Huom. myös komentosanojen outoudet tiedotetaan nyt tähän tyyliin, jolloin on helpompi nähdä - allekkain olevista sanoista - mikä meni pieleen.) Jotta Survon saa huomaamaan virheitä, joudutaan täsmennyksiä käyttäviin ojelmamoduleihin tekemään pieni lisäys. Kunkin ohjelman alussa tulee luetella kaikki tuolle ohjelmalle ominaiset täsmennyssanat. Toimenpide ei lankea käyttäjien harteille vaan ainoastaan ohjemantekijöiden - ennen muuta meikäläisen, valitettavasti. Olen liittänyt täsmennystunnistuksen toistaiseksi FILE SAVE:n lisäksi CORR- ja STAT-ohjelmiin sekä (kohteista ehkä hankalimpaan) kaikkiin piirto-ohjelmiin (PLOT, GPLOT, jne.) ja havainnut, että muutostyön saa hyvin pitkälle automatisoitua Survon itsensä avulla; Survon C-kielistä lähdekoodiahan hallitaan suoraan toimituskentistä. Myös Kimmo on kokeillut näitä muutoksia omissa ohjelmissaan. Tulee kuitenkin viemään aikaa, ennenkuin kaikki ohjelmat on saatettu uuteen uskoon. Toisaalta ei ole välttämätöntä, että täsmennystunnistus on mukana joka ohjelmamodulissa; jos se puuttuu, virheistä ei tule ilmoituksia. Täsmennyssanojen tarkkailua säätelee (SURVO.APU-tiedostossa) uusi systeemiparametri 'spec_check', joka arvolla 1 aktivoi tarkkailun. Oletusarvo on 0 (ei tarkkailua eli nykyinen käytäntö). Komennolla SYSTEM spec_check=1 täsmennystarkkailu astuu voimaan Survoistunnon aikana ja tätä toimen- pidettä varten on määritelty uusi pehmopainike SPEC (SYSTEM-painikkeen alle). Täsmennysten tunnistusta ei ole syytä pitää jatkuvasti päällä. Aikaa se ei tosin juuri kuluta, mutta saattaa mutkikkaammissa sovelluksissa antaa aiheettomia huomautuksia silloin, kun käyttäjä on kirjoittanut toimituskenttään omia, vakiotäsmennyksiä muistuttavia määrittelyjä. Esim. Kun aktivoi GPLOT-kaavion ...................................................................... GPLOT G:\E\U\D\KUNNAT,Tulotaso,SYNT POINT=Kunta XSCALE=(*log),7000,10000,20000,30000 SIS=1 ...................................................................... tulee huomautus Tuntematon täsmennys SIS Vaihtoehtoja: SIZE koska SIS sattuu olemaan mitan 2 päässä oikeasta täsmennyksestä SIZE. Täsmennysten tarkkailu käy samoilla periaatteilla kuin komentosanojen tunnistaminen. Nyt verrataan komennon aktivoinnin jälkeen jokaista käyttäjän kirjoittamaa täsmennyssanaa (esim. RESULTS täsmennyksessä RESULTS=0) po. komennon mahdollisten täsmennyssanojen luetteloon. Levenshteinin mitan avulla pyritään paljastamaan virheelliset tapaukset. Huom. Komentosanojen tunnistus on aina voimassa. Sekä komento- että täsmennyssanojen yhteydessä "parannetun" Levenshteinin mitan arvot vaikuttavat virheilmoituksiin siten, että jos tutkittavan sanan minimietäisyys tunnettuihin sanoihin on korkein- taan 2 ja samalla minimietäisyydellä olevia sanoja on korkeintaan 5, virheilmoituksessa tarjotaan vaihtoehtoja. Muissa tapauksissa komento- sanojen osalta tulee pelkkä tiedotus tuntemattomasta sanasta, kun taas täsmennyssanat hyväksytään "asiaankuulumattomina". Tähän tyyliin päädyin tehtyäni kokeiluja uudella STRDIST-komennolla. Siis aivan älyttömille sanoille ei tyrkytetä korvikkeita. Survon C-kielisten ohjelmien tekijöille --------------------------------------- Jotta täsmennyssanojen tunnistus toimii, ohjelman alkuun tulee lisätä seuraavanlaiset rivit (esimerkkinä STAT-moduli): char *spec_stat[]={ "VARS", "MASK", "IND", "CASES", "SELECT", "CLASSMAX", "RESULTS", "SUMS", "MAXSTRING", "#MASK", "PRIND", "CONFMEAN", "FRACTILES", "MEANS", "!" }; char **specs=spec_stat; Huom. Nimen 'spec_stat' paikalla voi olla mikä tahansa muu. Tässä 'spec_stat' on lista STAT-komennon käyttämistä täsmennyssanoista. Ne löytyvät helposti ohjelmalistauksesta (spfind-funktiokutsut). Listan tulee päättyä sanaan "!". Täsmennystiedot pitää ohjelmassa etsiä uudemmalla spec_init:llä (sp_init:in asemasta) tyyliin i=spec_init(r1+r-1); if (i<0) return; spec_init (etsittyään kaikki täsmennykset) tekee täsmennystarkistuksen sanalistaan kohdistetun osoitinmuuttujan specs avulla. Listan osoittaminen pointterin (specs) kautta on välttämätöntä, sillä joskus samassa ohjelmatiedostossa voi olla useita Survon komentoja, joilla on eri täsmennykset. Esim. STAT-operaation kanssa on ohjelmaan _STAT.EXE liitetty myös STATMSF-operaation ohjelmakoodi. Sen koodin alussa on lisäykset char *spec_msf[]={ "VARS", "MASK", "IND", "CASES", "SELECT", "PRIND", "TRESHOLDS", "LIMITS", "!" }; extern char **specs; op_statmsf() { ... specs=spec_msf; ... jolloin specs pannaan tässä tapauksessa osoittamaan listaa spec_msf. Nämä toimenpiteet edellyttävät, että ohjelmoijalla on käytössään uusimmat versiot SURVO MM:n ohjelmakirjastoista, jotka mielelläni lähetän kaikille tarvitsijoille. * * * Olisi muuten hauska tietää, onko missään muussa järjestelmässä (yleisten oikolukuohjelmien ulkopuolella) tämänkaltaista sanojen tunnistus- menettelyä. On kyllä yleistä, että ohjelmistot sisältävät syntaksi- tarkistuksia, jolloin käyttäjä kirjoittaessaan ohjelmiston edellyttämää koodia näkee ohjelman tuntemat rakenteet värjättyinä. Mutta jos kirjoittaa jonkin systeemisanan väärin, havaitsee vain sen, ettei sana tule värjätyksi mutta ei sitä, millä tavalla se on virheellinen. * * * Levenshteinin mitan avulla on mahdollista saada jonkinlaista huumorintajua ja joustavuutta myös Survon hakutoimintoihin. Esim. FIND Survo~ osaa jo omassa koeversiossani etsiä toimituskentästä sanaa (merkkijonoa) Survo eniten muistuttavan sanan. Tästä aiheesta kerron pian lisää erillisessä viestissä. -Seppo
Vastaukset: |
---|
Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!