Re: Virheiden tunnistusta

[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:
[ei vastauksia]

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!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.