804

  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 804 as PDF for free.

More details

  • Words: 28,262
  • Pages: 280
Mihail Radu Solcan

Managementul informaţiei

Mihail Radu Solcan

Managementul informaţiei

3

Curs pentru învăţământul la distanţă (master)

Bucureşti 2005 JJ

II

J

I

Back J Doc Doc I

c

2005 Mihail Radu Solcan.

5

Avertisment Textul acestei cărţi reflectă experienţa autorului. El reflectă, de asemenea, o serie de preferinţe ale autorului. Este important să înţelegeţi că toate explicaţiile referitoare la folosirea computerului sunt rodul practicii personale a autorului şi oglindesc în mod inevitabil şi limitele acestei practici. Toate soluţiile şi programele descrise în carte au fost testate de către autor, inclusiv pe parcursul elaborării cărţii ca atare. Autorul nu-şi asumă însă nici un fel de răspundere directă sau indirectă pentru eventuale neajunsuri sau daune care ar putea rezulta din folosirea cărţii sau a programelor de calculator prezentate în carte. Această clauză concordă cu spiritul şi litera licenţelor programelor de computer folosite în carte. JJ

II

J

I

Back J Doc Doc I

6

Utilizarea programelor şi a soluţiilor descrise în carte trebuie făcută de cititoare sau cititori pe propriul lor risc. În sfârşit, autorul nu se angajează sub nici o formă să asigure sprijin în dezvoltarea de noi programe sau soluţii de aplicare a unor programe pentru nici o categorie de persoane. Multe denumiri sunt folosite de către firme sau creatorii de programe individuali pentru a distinge produsele lor. Unele dintre ele sunt menţionate în carte, respectând forma proprie denumirii respective. Cititoarele şi cititorii trebuie să ştie că aceste denumiri nu pot fi utilizate de către alte firme sau persoane individuale decât pentru desemnarea produselor respective. Pentru alte precizări şi informaţii suplimentare consultaţi situl pe Internet al cursului. JJ II J I Back J Doc Doc I

Table of Contents 1. Perspectiva algoritmică asupra informaţiei 1. Complexitatea informaţiei 2. Informaţie şi cunoaştere 3. Reflexivitatea în sensul lui Soros 4. Managementul şi tehnologia informaţiilor 5. Costuri şi beneficii 2. Informaţia din texte 1. Căutarea informaţiilor cu ajutorul tiparelor 1.1. Limbajul tiparelor de căutare în text 1.2. Căutarea cu ajutorul grep 2. Capcanele sortării

Table of Contents (cont.)

8

3. Textele ca surse de date 3. Informaţia din dicţionare 1. Dicţionarul pentru corectorul ortografic 2. Managementul informaţiei din dicţionarele bilingve 3. Managementul definiţiilor lexicale 4. Limbajul SQL 1. Un exemplu de bază de date SQLite 2. Căutarea în baza de date 3. Ordonarea informaţiilor 4. Prezentarea informaţiei din tabelele sqlite 5. Managementul logic al informaţiilor Toc

JJ

II

J

I

Back J Doc Doc I

Table of Contents (cont.)

9

1. Reţelele semantice 2. WordNet pentru utilizare 3. WordNet pentru meşterit 3.1. Fişierele Prolog ale WordNet 3.2. SWI-Prolog şi încărcarea WordNet 3.3. Explorarea bazei de date 3.4. Descoperirea conexiunilor dintre informaţii 6. Comunicarea informaţiilor 1. Avantajele folosirii bazelor de date 2. Vizualizarea informaţiilor 2.1. Pachetul GraphViz 2.2. Diagrame pentru argumente Toc

JJ

II

J

I

Back J Doc Doc I

Table of Contents (cont.)

10

7. Proiecte 1. Structurarea arborescentă a informaţiilor 1.1. Schema compoziţională • Folosirea programului Leo • Folosirea VimOutliner-ului 2. Prezentarea proiectului Bibliografie Indice

Toc

JJ

II

J

I

Back J Doc Doc I

Table of Contents (cont.)

11

Lista figurilor 1

Modelul unei fişe de lectură . . . . . . . . .

16

2.1 2.2 2.3 2.4 2.5

O căutare simplă . . . . . . . . . . . . . Căutarea unui cuvânt la început de rând Căutarea unui cuvânt întreg . . . . . . . Tipar de căutare care foloseşte punctul . Un tipar de căutare mai complex . . . .

87 88 89 90 91

3.1 3.2

Exemplu de utilizare a corectorului aspell . . 118 Căutare în dicţionarul român-englez al Radei Mihalcea cu ajutorul DING . . . . . . . . . 119

Toc

JJ

II

J

I

. . . . .

. . . . .

Back J Doc Doc I

Table of Contents (cont.)

12

3.3

Căutare de definiţii în baza de date Dexonline cu ajutorul programului Dixit . . . . . . 120

4.1 4.2 4.3 4.4 4.5 4.6 4.7

Crearea unei baze de date SQLite . . . . . . Crearea câmpurilor înregistrărilor dintr-un tabel . . . . . . . . . . . . . . . . . . . . . . . Conţinutul fişierului bib.sql văzut cu Vim . . Tabelul carti în sqlitebrowser . . . . . . . . . Fişierul bibdata.sql . . . . . . . . . . . . . . Vizualizarea datelor din tabelul carti . . . . Extras dintr-un tabel sqlite . . . . . . . . . .

5.1 5.2

Un exemplu de reţea semantică . . . . . . . 159 Startul WordNet . . . . . . . . . . . . . . . 160

Toc

JJ

II

J

I

129 130 131 132 133 134 147

Back J Doc Doc I

Table of Contents (cont.)

13

5.3 5.4

Pisica este un soi de. . . . . . . . . . . . . . . 161 Un exemplu de utilizare a WordNet Connect 162

6.1 6.2

Fragment dintr-o sursă de date bibtex . . . . Raţiuni pro şi contra unei soluţii în problema notării . . . . . . . . . . . . . . . . . . . . . Reprezentarea presupoziţiei problemei . . . . Versiunea modificată a diagramei argumentării în problema notării . . . . . . . . . . .

6.3 6.4

7.1 7.2 7.3

Toc

238 239 240 241

Schemă compoziţională în Leo . . . . . . . . 254 Schemă compoziţională în VimOutliner . . . 259 Un proiect structurat cu ajutorul LATEX . . . 268 JJ

II

J

I

Back J Doc Doc I

Table of Contents (cont.)

7.4 7.5 7.6

Toc

14

Inserarea modulelor în alte module cu ajutorul LATEX . . . . . . . . . . . . . . . . . . . . 269 Prima pagină a proiectului formatat de LATEX 270 A doua pagină a proiectului formatat de LATEX271

JJ

II

J

I

Back J Doc Doc I

Utilizarea manualului

15

Ghid de utilizare a manualului Acest curs vă oferă o introducere în studiul managementului informaţiei. Cum trebuie folosit acest manual? Faceţi o primă lectură pentru a vedea despre ce este vorba. Următoarele lecturi trebuie însă să ducă la pregătirea examenului. Nu uitaţi, de asemenea, să folosiţi indicii de la sfârşitul manualului. Indicele vă ajută să parcurgeţi manualul întrun mod neliniar. Luaţi o foaie de hârtie normală, format A4, şi rupeţi-o în patru. Obţineţi patru fişe. Luaţi una dintre ele şi trageţi o linie orizontală la o distanţă de marginea de sus a fişei care să vă permită să scrieţi un rând. Trageţi apoi o linie Toc

JJ

II

J

I

Back J Doc Doc I

Utilizarea manualului

16

verticală pornind de la linia orizontală pe care tocmai aţi trasat-o. Rezultatul ar trebui să arate ca-n figura 1.

Figura 1: Modelul unei fişe de lectură Aveţi acum modelul unei fişe de lectură. Ea este împărJJ II J I Back J Doc Doc I

Toc

Utilizarea manualului

17

ţită în trei „câmpuri“. În primul câmp puneţi o abreviere de genul „minf“ (Managementul informaţiei). Abrevierea aceasta este importantă pentru a recunoaşte repede despre ce fişă este vorba, dacă se rătăceşte printre alte hârtii. Mai important este însă să notaţi acolo numărul capitolului sau secţiunii pe care o citiţi şi să adăugaţi un număr pentru alineatul pe care-l parcurgeţi. Numărul alineatului nu este pus explicit în text, dar îl puteţi stabili dumneavoastră. În câmpul care ocupă cea mai mare parte a fişei veţi nota ideea-cheie în alineatul respectiv. Este foarte important să nu copiaţi alineatul ca atare, ci să extrageţi doar tema în câteva cuvinte şi să precizaţi, tot în câteva cuvinte, ce se spune pe tema respectivă în alineatul dat. Nu neglijaţi faptul că alineatul ar putea să introducă o întrebare pe tema respectivă. Întrebările sunt foarte semToc

JJ

II

J

I

Back J Doc Doc I

Utilizarea manualului

18

nificative pentru că de la ele porneşte orice investigaţie. În cazul lor nu este atâta necesară o rezumare, o desprindere a aspectului-cheie, cât o analiză. Încercaţi să vedeţi de ce este pusă întrebarea respectivă. Nu uitaţi niciodată să analizaţi ce anume presupune întrebarea: acceptarea anumitor sensuri ale unor concepte, un anumit statut ontologic al referentului unor termeni, existenţa unui tip de obiecte, de relaţii, anumite condiţii. Nu treceţi deci cu uşurinţă peste modul în care sunt formulate interogaţiile. În câmpul care a rămas liber veţi trece două cuvinte sau expresii-cheie. Acestea sunt cuvinte pe care, de exemplu, le puteţi întâlni în indicele manualului. Pot fi, desigur, termeni pe care i-aţi remarcat dumneavoastră. Un cuvânt vă ajută

Toc

JJ

II

J

I

Back J Doc Doc I

Utilizarea manualului

19

să identificaţi tema alineatului; celălalt cuvânt vă permite să regăsiţi ceea ce se spune pe tema dată în alineat.1 Cu cele patru fişe pe care le-aţi confecţionat deja faceţi o probă cu patru alineate diferite din manual. Acestea vor fi primele fişe de lectură a manualului. Sondajul mai are însă şi rolul de a vă familiariza cu stilul manualului, pentru a-l putea parcurge mai rapid. Când citiţi n-are desigur sens să faceţi o fişă de lectură pentru fiecare alineat din manual. Nu are rost, de pildă, să fişaţi acest ghid introductiv. Fişele de lectură se fac pen1

Mai multe sugestii privitoare la lucrul cu fişe găsiţi în Mihail Radu Solcan, Eseul filosofic (Bucureşti: Editura Universităţii din Bucureşti, 2004). Cartea are şi o pagină de web cu informaţii suplimentare, pe care o puteţi accesa la adresa http://www.ub-filosofie. ro/~solcan/eft. Toc

JJ

II

J

I

Back J Doc Doc I

Utilizarea manualului

20

tru capitolele numerotate, alegând de acolo alineatele care introduc elemente noi. Ţineţi fişele de lectură a manualului separat de alte fişe, într-un plic sau o cutie specială. Separat de fişele de lectură a manualului, construiţi un mic „fişier“ cu cazuri (cu fişe de hârtie precum cele descrise mai sus!). Pentru fiecare caz reţineţi un număr de idei-cheie. Nu uitaţi să folosiţi descrieri structurale şi cuvinte-cheie în modul prezentat mai sus. Cazul 1.1, de pildă, ar putea fi prezentat pe cinci fişe. Cuvinte precum „problema“, „soluţii“, „tehnici“, „management“, „costuri“ sunt cuvinte-cheie obligatorii în cazul fişelor pentru cazuri din domeniul managementului. Desigur, un caz mai complicat s-ar putea să ceară recursul la mai mult de cinci fişe. În contextul de faţă, cinci pare însă un Toc JJ II J I Back J Doc Doc I

Utilizarea manualului

21

număr rezonabil pentru fişele oricărui caz care ar putea constitui obiect de discuţie. Cum alegeţi cazurile? Manualul foloseşte cazuri de management al informaţiei familiare autorului. Găsiţi şi dumneavoastră acele cazuri de management al informaţiei care vă sunt familiare. Lăsaţi pe fişele cu cazuri, în câmpul principal, loc pentru adnotări ulterioare. Pentru a distinge de restul fişei aceste adnotări, puteţi folosi un creion sau un pix de altă culoare. Pe exemplarul personal din manual sau din lucrări din bibliografie nu este rău să faceţi evidenţieri şi sublinieri. Acestea au rolul de a pregăti elaborarea fişei de lectură. De asemenea, ele uşurează o lectură rapidă ulterioară. Cu cele două seturi cu fişe, cel cu fişele de lectură a manualului şi cel cu fişele care descriu cazuri, veniţi la examen. Toc JJ II J I Back J Doc Doc I

Utilizarea manualului

22

Trataţi aceste fişe ca pe nişte bilete de examen. Respectaţi deci formatul lor! Nu scrieţi totul pe foi mari şi nu puneţi mai mult de o idee pe o fişă!

Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 1. PERSPECTIVA ALGORITMICĂ ASUPRA INFORMAŢ

Capitolul 1: Perspectiva algoritmică asupra informaţiei Întâlnim adesea expresia „depozit de informaţii“. Este o metaforă utilă, dar trebuie să sesizăm şi diferenţele. Nu te poţi plimba printr-un depozit de informaţii aşa cum te plimbi printr-unul de materiale de construcţii. În depozitul cu materiale de construcţii poţi pune mâna pe scânduri. Poţi evalua din ochi dimensiunile. Poţi compara desenul lemnului. Într-un anume fel, şi-n depozitul de informaţii poţi evalua dimensiuni, compara sau sorta. Operaţiile aceste sunt însă mult mai abstracte. În practică, oamenii au nostalgia vizualului şi preferă tot soiul de interfeţe grafice colorate, pline de butoane şi decoraţiuni atunci când explorează magaziile cu informaţii. Toc JJ II J I Back J Doc Doc I

CAPITOLUL 1. PERSPECTIVA ALGORITMICĂ ASUPRA INFORMAŢ

Invizibilitatea informaţiei poate fi însă foarte înşelătoare. În întreprindere se poate lesne uita că informaţia serveşte acţiunea. Sentimentul că informaţiile ar avea ceva tainic generează ideea că informaţiile ar fi un lucru cu care se ocupă doar sectoare speciale ale întreprinderii. Folosirea computerelor accentuează foarte mult acest sentiment. Programarea computerelor are şi ea invizibilitate şi este înconjurată de o aură de mister. În realitate legătura dintre informaţie şi scândurile din depozitul de construcţii este mult mai mare decât se crede îndeobşte. Să zicem c-am vrea să ne facem un raft. Ne procurăm scândurile necesare, dar trebuie s-avem idee despre ceea ce vrem să facem cu ele: trebuie s-avem idee cum să le tăiem, s-avem idee cum le îmbinăm, s-avem idee cum fixăm Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 1. PERSPECTIVA ALGORITMICĂ ASUPRA INFORMAŢ

toată construcţia la locul de destinaţie. Conceptul de idee, în asemenea contexte, se va dovedi mai valoros decât pare. Mai sus am examinat doar o anume problemă: cea a construirii unui (anume) raft. Gândiţi însă din perspectiva unei clase de probleme. Nu trebuie să fie probleme din matematică! Poate fi vorba şi despre desfacerea dopurilor de la sticle. Aici vom examina, în primul rând, dopul: este de plută, este un dop metalic precum cel de la sticlele de bere, este un dop de sticlă de şampanie? După ce avem răspunsul, alegem modul adecvat de a proceda. Din nou avem însă o idee, o idee despre rezolvarea unei clase de probleme. Cu un termen generic, o astfel de idee se numeşte algoritm. Conceptul de algoritm este unul foarte general. Nu vă aşteptaţi la o definiţie care să facă apel la un concept mai general şi să evidenţieze ce anume distinge algoritmii de alte Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 1. PERSPECTIVA ALGORITMICĂ ASUPRA INFORMAŢ

elemente din sfera conceptului respectiv. Cartea de faţă nu numai că nu-şi propune să discute la modul general asemenea concepte foarte abstracte, ci chiar adoptă perspectiva meşterului. Ce-ar fi de „meşterit“ însă în cazul informaţiilor? Răspunsul este foarte simplu: programe de calculator! Chiar să le meşterim? Cititoarele şi cititorii pot proceda cum cred de cuviinţă: dacă dezvoltă o pasiune pentru programare, pot chiar să meşterească la programele respective; altfel, pot să le trateze ca pe nişte cazuri în care este implicat managementul informaţiilor şi să citească despre ele. Analogia cu meşteritul raftului din scânduri este acum destul de simplă. Calculatoarele sunt capabile să stocheze date, înstructurate în diverse moduri. Aceste date sunt prelucrate, aşa cum prelucrăm scândurile: după o anumită idee. Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 1. PERSPECTIVA ALGORITMICĂ ASUPRA INFORMAŢ

Cu alte cuvinte, folosim un algoritm sau o serie de algoritmi pentru a aduce datele la o altă formă. Adevărul este că prelucrarea datelor se poate face şi-ntrun mod mult mai tradiţional, folosind mai degrabă creionul şi hârtia. Citiţi o carte mai veche de documentare, cum ar fi cea editată de A. I. Mihailov et al.[6]. La urma urmei, lectura unei asemenea cărţi poate fi pusă tot sub grila managementului informaţiei (mai ales la nivelul unei biblioteci sau al unui institut de cercetare). Chiar dacă utilizarea calculatoarelor este, ca să zic aşa, noutatea revoluţionară anunţată în cartea respectivă, tehnicile de bază descrise acolo ţin de epoca anterioară calculatoarelor. Oricum, în acel moment, calculatoarele personale nici nu fuseseră inventate. De asemenea, nici Internetul nu fusese descoperit. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Complexitatea informaţiei

28

1. Complexitatea informaţiei În această secţiune ne vom permite totuşi ceva teorie abstractă. În locul unor date ceva mai concrete, ne vom închipui că trebuie să generăm şiruri de semne 0 şi 1. Nu ne punem întrebarea la ce sunt bune aceste şiruri de semne atât de simple. Le tratăm drept ceea ce, la urma urmei, şi sunt: nişte obiecte matematice. Legendarul matematician rus Andrei Kolmogorov a avut ideea examinării lungimii programelor care generează şiruri precum cele descrise mai sus. Cum adică „lungimea programelor“? Programele (unui calculator fizic sau ale unuia abstract) sunt texte: aceste texte permit maşinii să facă ceea ce „ştie“. De pildă maşina poate să adauge la un şir dat un 1 sau poate să-l şteargă Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Complexitatea informaţiei

29

ş.a.m.d. Tot secretul constă în „citirea“ acestor programe de către maşină. Programul nu conţine neapărat instrucţiuni; i.e. nu este neapărat nevoie ca algoritmul să fie dat în mod explicit. Programul poate să conţină doar o descriere; în acest caz, maşina şi programele deja stocate în ea vor genera algoritmul, care – la rândul său – va produce rezultatul dorit. Dacă programul poate fi o descriere, n-ar fi cel mai simplu ca el să fie chiar şirul de 0 şi 1 pe care dorim să-l generăm? Nu tocmai. S-ar putea să nu fie chiar cea mai simplă soluţie. Dacă şirul are o regularitate în el, o instrucţiune scurtă s-ar putea să-l genereze foarte uşor.1 Gregory Chaitin şi alţii au dezvoltat o întreagă teorie 1

Pentru exemple şi o discuţie mai amplă despre complexitatea Kolmogorov vedeţi, pe Internet, articolul pe această temă din Wikipedia. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Complexitatea informaţiei

30

algoritmică a informaţiei. În această teorie conceptul de mărime (size) a unui program joacă un rol deosebit. Definiţia exactă este însă foarte sofisticată. Chaitin foloseşte limbajul Lisp pentru a lucra cu liste de simboluri. Mărimea programului este mărimea programului scris în Lisp.2 Teoria lui Chaitin este foarte diferită de clasica teorie a informaţiei formulată de Claude Shannon. Perspectiva lui Shannon era cea a statisticii. Ea oferă în special un model teoretic pentru electronică (pentru comunicaţiile electronice). Este important de reţinut din perspectiva teoretică a lui Chaitin că informaţia este legată de liste de simboluri şi 2

A se vedea Gregory Chaitin, Algorithmic Information Theory (Cambridge University Press, 1990), versiunea plasată de Chaitin pe Internet, la 2 aprilie 2003, în special cap.6, pp.157 ş.u. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Informaţie şi cunoaştere

31

algoritmii capabili să genereze respectivele liste. Se observă că vorbim despre liste de simboluri şi nu doar despre liste de cifre (care sunt şi ele simboluri – pentru numere). Nu este vorba doar de măcinarea unor numere enorme, ci de prelucrarea de liste de simboluri în general şi de limitele acestei prelucrări. 2. Informaţie şi cunoaştere Este informaţia tot una cu cunoaşterea, în sensul de cunoaşterea de care dispun oamenii ? Răspunsul depinde de perspectiva pe care-o adoptăm. Din punctul de vedere prezentat în secţiunea 1, informaţia nu este formată doar din datele pe care le-am stoca în computer. De pildă, am putea avea o listă cu tot felul de Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Informaţie şi cunoaştere

32

date despre pantofii pe care-i avem în depozit. Importanţi sunt însă algoritmii cu care prelucrăm aceste date. Cu alte cuvinte, avem atâta informaţie câte idei avem despre ceea ce putem face cu datele respective. În orice caz, trebuie să ştim să le extragem din calculator. Şi n-ar fi deloc rău să facem acest lucru rapid. Mulţi filosofi obiectează împotriva ideii c-am stoca în calculator cunoaştere. Doar pentru noi oamenii datele respective au un înţeles. Altfel spus, noi oamenii înţelegem ce intră şi ce iese din computer. Computerul manevrează doar nişte simboluri lipsite de înţeles pentru maşină. O face foarte repede, mult mai repede decât noi, dar prelucrează informaţii, nu cunoaştere. Maşina are informaţii în sensul că are şi datele, şi algoritmii care specifică modul lor de prelucrare. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Informaţie şi cunoaştere

33

Mulţi experţi în management sunt şi ei convinşi că trebuie să facem o distincţie între cunoaştere şi informaţie. Pentru cei de la Information Management Office de pe lângă guvernul Australiei, putem împărtăşi altora cunoaşterea de care dispunem, în vreme ce informaţia doar o răspândim. Cunoaşterea ar ţine de „trăirea umană şi de capacitatea oamenilor de a formula aprecieri complexe bazate pe experienţa trecută“. Informaţia ar ţine de „datele ca atare, în vreme ce cunoaşterea este «potenţial de acţiune»“.3 Ideea de mai sus că informaţia ar ţine doar de datele ca atare mi se pare mai mult decât discutabilă. Fără algoritmi datele respective sunt precum inscripţiile într-o limbă pe 3

Apud A Sample of Contributions to Worldwide Management Practices, pe situl www.brint.com. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Informaţie şi cunoaştere

34

care n-o ştie nimeni. Simbolurile respective sunt ca nişte decoraţiuni ale suportului pe care sunt scrise. Voi adopta totuşi aici ceea ce aş numi versiunea pesimistă a distincţiei dintre informaţie şi cunoaştere: informaţia este ceea ce manipulează computerele; doar oamenii operează cu cunoaştere. S-ar putea ca această versiune pesimistă să fie eronată: distincţia dintre informaţie şi cunoaştere ar fi mai degrabă una graduală. Fapt este că actualele tehnologii ale informaţiei nu ne permit să dăm exemple de programe de calculator care manevrează informaţiile aşa cum manevrăm noi cunoaşterea. Luaţi orice program de traducere la care aveţi acces şi puneţi-l la „grea încercare“; va produce rezultate curioase. Am introdus, de pildă, versurile lui Shakespeare (As You Like It 2/7): Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Informaţie şi cunoaştere

35

All the world’s a stage, And all the men and women merely players: They have their exits and their entrances; într-un program de traducere4 şi rezultatul a fost (în germană): Ein Stadium der ganze Welt, Und alle Männer und der Frauen Spieler bloß: Sie haben ihre Ausgänge und ihre Eingänge; În germană, cuvântul „Stadium“ are sensul de stadiu sau de stadion. Shakespeare vrea însă să spună că lumea este o 4

Pe Internet, în decembrie 2005. Din motive de ordin etic, nu pot indica locul. Programul este unul comercial. Nu cred că este etic să faci publicitate negativă, aşa cum nu este etic să faci publicitate pozitivă. După câte ştiu eu, alte programe ar da rezultate asemănătoare. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Informaţie şi cunoaştere

36

scenă.5 Algoritmul pare a fi acelaşi şi pentru franceză, căci rezultatul este asemănător: Une étape de tout le monde, Et tous les hommes et de femmes joueuses simplement : Ils ont leurs sorties et leurs entrées ; Versurile lui Shakespeare s-au frânt şi totul arată precum un morman de cuvinte din care ne este greu să înţelegem ceva. 5

Iată cum arată traducerea lui August Wilhelm von Schlegel: Die ganze Welt ist Bühne Und alle Fraun und Männer bloße Spieler. Sie treten auf und geben wieder ab,

(pe situl www.william-shakespeare.de). Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Reflexivitatea în sensul lui Soros

37

Prin urmare, orice persoană care răspunde de managementul unei organizaţii, cel puţin în stadiul actual al dezvoltării tehnologiei, trebuie să ţină cont de diferenţa dintre cunoaştere şi informaţie. 3. Reflexivitatea în sensul lui Soros George Soros nu este numai un om de afaceri de succes. În tinereţea sa a studiat filosofia (cu Karl R. Popper) şi cultivă ideea că filosofia este importantă pentru strategia sa a investiţiilor.6 George Soros a formulat o teorie a reflexivităţii, care se distanţează de o serie de asumpţii din manualele de econo6

A se vedea biografia lui George Soros de pe situl Open Society Institute. Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Reflexivitatea în sensul lui Soros

38

mie. Soros susţine că preţurile de pe o piaţă nu sunt doar rodul jocului cererii şi al ofertei. Aşteptările celor care participă la schimburi joacă un rol important.7 Cercetătorii din ştiinţele naturii au de a face cu fenomene care au loc independent de ceea ce cred oamenii sau zic oamenii. Acest lucru nu se întâmplă însă pe o piaţă financiară.8 Soros distinge între două funcţii: una, cea cognitivă, exprimă dependenţa participanţilor într-un proces precum cel de pe o piaţă financiară de situaţia de pe piaţă; cealaltă funcţie, cea participativă, exprimă dependenţa situaţiei de 7

George Soros[14, p.29]. George Soros[14, p.32]. În acest punct Soros se distanţează de profesorul său, Karl R. Popper (v. The Alchemy of Finance[14, pp.35– 40]). 8

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Reflexivitatea în sensul lui Soros

39

pe piaţă de deciziile participanţilor, luate în funcţie de valorile furnizate de către funcţia cognitivă. Raportul care se stabileşte între cele două funcţii este denumit de către George Soros reflexivitate 9 George Soros a formulat iniţial teoria sa despre reflexivitate ca o speculaţie filosofică. Ulterior a testat însă această teorie pe terenul care-i este cel mai familiar, cel al bursei de valori. Reflexivitatea în sensul lui Soros este un concept util şi pentru a înţelege ceea ce se-ntâmplă în cazul managementului unei firme. Managerul nu este o persoană ale cărei decizii să aibă eficienţă doar pentru că examinează în mod corect o serie de indicatori şi face o mulţime de calcule. Felul în 9

George Soros[14, p.42].

Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Managementul şi tehnologia informaţiilor

40

care este privit managerul de cei din firmă are o importanţă la fel de mare ca şi examinarea „indicatorilor“. 4. Managementul şi tehnologia informaţiilor În cele ce urmează termenul „manager“ se referă la o persoană, de gen feminin sau masculin, nu la un automat. O asemenea persoană este prinsă în angrenajul reflexivităţii în sensul lui Soros. Părintele managementului ca disciplină academică, Peter Drucker, vorbea despre cinci operaţii de bază în munca unui manager:10 • stabilirea obiectivelor; • organizarea; 10

Peter Drucker[1, p.400] Toc JJ II J

I

Back J Doc Doc I

Section 4: Managementul şi tehnologia informaţiilor

41

• crearea unei motivaţii la cei cu care lucrează; • măsurarea şi comunicarea rezultatelor; • dezvoltarea persoanelor cu care lucrează, inclusiv a propriei persoane. Care ar fi însă profilul muncii unui manager al informaţiilor? Dac-ar fi să imităm schema propusă de Peter Drucker, atunci managerul informaţiilor:11 • stabileşte obiectivele activităţilor legate de computerele firmei; • organizează activităţile legate de computerele firmei; • crearea unei motivaţii la cei cu care lucrează; 11

A se vedea şi descrierea rolului managerului informaţiilor pe situl Ministerului Muncii al SUA. Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Managementul şi tehnologia informaţiilor

42

• măsurarea şi comunicarea rezultatelor; • dezvoltarea persoanelor cu care lucrează cu computere, inclusiv a propriei persoane. Dacă ne amintim de reflexivitate, ne dăm imediat seama că prima activitate (stabilirea obiectivelor) trebuie făcută în coordonare cu ceilalţi manageri ai firmei şi în funcţie de obiectivele fixate de managerul general al firmei. Nici celelalte activităţi nu pot fi scoase de sub cupola reflexivităţii. Problema dezvoltării persoanelor care lucrează cu computerele este totdeauna una acută. Un computer cu programe oricât de sofisticate este inutil dacă este folosit precum vechile maşini de scris. Oferă personalului firmei numai satisfacţia de a se destinde din când în când cu jocuri pe calculator. Ce ar trebui să ştie persoanele care sunt manageri, dar nu Toc JJ II J I Back J Doc Doc I

Section 4: Managementul şi tehnologia informaţiilor

43

manageri ai informaţiilor, despre managementul informaţiilor? În diversele cărţi care încearcă să răspundă la această întrebare există două strategii fundamental diferite: • Prima strategie este aceea de a privi sistemul de computere al firmei ca pe un sistem făcut din cutii negre; persoanele care n-au atribuţii tehnice legate de aceste sisteme ar trebui să-nţeleagă doar ce intră şi ce iese din cutii. • A doua strategie este cea a deschiderii cutiilor negre, pentru a vedea cum funcţionează. Cartea de faţă adoptă a doua strategie, cea a deschiderii cutiilor. Punctul nevralgic al acestei strategii este că deschiderea cutiilor seamănă cu deschiderea cutiei Pandorei. Sistemele computerizate sunt cele mai complicate sisteme concepute de om. Toc JJ II J I Back J Doc Doc I

Section 4: Managementul şi tehnologia informaţiilor

44

Pentru a para efectul de tornado al complexităţii o strategie ar fi cea a folosirii unor sisteme-jucărie. Noi am optat pentru o altă strategie: cea a „meşteritului“ cu programe de computer cât se poate de reale. Nici măcar exemplele nu sunt totdeauna foarte simple. Fiecare caz de „meştereală“ poate să dea însă o idee despre ceea ce se-ntâmplă efectiv în sistemul informaţional. Scopul este s-avem o înţelegere mai bună a ceea ce se-ntâmplă în sistem. George Soros vorbeşte despre deficitul de înţelegere al celor care participă la schimburile pe o piaţă. Un deficit de înţelegere există şi atunci când interacţionăm cu sistemul informatic. Cazurile reale pot fi uneori uimitoare din perspectiva deficitului de înţelegere. Am văzut firme care au achiziţionat baze de date scumpe pentru a evidenţele lor electronice. În Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Managementul şi tehnologia informaţiilor

45

practică reuşeau să instaleze sistemul doar pe un computer aflat undeva într-un birou. Restul computerelor erau prea vechi pentru a instala pe ele noul sistem. Apoi nu se concepuse nimic pentru a transfera automat datele de pe vechiul sistem pe noul sistem. Şi la urma urmei câte articole de inventar aveau în depozit? Câteva zeci de mii! Or sistemul achiziţionat va fi avut sens la sute sau poate milioane de articole de inventar. Managerii care au luat deciziile n-aveau efectiv idee despre ceea ce se-ntâmplă într-un sistem informatic.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 5: Costuri şi beneficii

46

5. Costuri şi beneficii Dacă parcurgem un bun manual de economie12 vom descoperi repede importanţa costurilor. Şi manualele de economie matematică pentru manageri13 ne vor convinge de importanţa analizei costurilor. Rob Mattison, în cartea sa despre bazele de date[5], ne prezintă o serie de cazuri în care managerii trebuie să ia decizii cu privire la bazele de date. Personajul său iniţial este managerul unui mic magazin de pantofi. El ar putea învăţa şi singur să scrie programele pentru baza sa de date. 12

Deosebit de potrivit pentru învăţarea tehnicilor standard din ştiinţa economică este manualul lui David Friedman[3]. Cartea este scrisă cu mult umor şi combină explicaţiile în limbaj natural cu tehnicile matematice. 13 A se vedea bunăoară cel al lui William F. Sharpe[13]. Toc

JJ

II

J

I

Back J Doc Doc I

Section 5: Costuri şi beneficii

47

Mattison crede că va recurge totuşi la consultanţă. De ce? Totul este o chestiune de evaluare a costurilor şi beneficiilor. O prezentare sistematică a unui caz ar arăta precum cazul1.1, cel al anticarului. Anticarul aflat în căutarea unei baze de date are o serie de opţiuni. Ar putea folosi, de pildă, o bază de date de tip SQLite, precum cea descrisă aici în capitolul 4? Desigur că da, dar cred c-ar trebui să apeleze la consultanţă.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 5: Costuri şi beneficii

48

Adaptare după Rob Mattison[5, pp.1–2] anticariatului Toc Tabelul JJ 1.1: IICazul Jmanagerului I J Doc Doc I Back

Section 5: Costuri şi beneficii

49

Nu este oare periculos faptul că oricine are acces la fişierul cu baza de date SQLite are acces la toate datele? Nu cred că lucrul acesta are mare importanţă într-un mic magazin. S-ar putea ca personajul nostru să fie oricum singura persoană care foloseşte baza de date. Într-o firmă foarte mare problema accesului selectiv la date s-ar pune desigur altfel. Managerii par a iubi de multe ori birourile luxoase, maşinile scumpe şi sistemele informatice costisitoare. Acestea sunt precum nişte blănuri scumpe. V-aţi întrebat vreodată de ce unele animale au blana atât de bogată? Un cotoi fără blană este o fiinţă care pare foarte pricăjită; blana îl face să fie nu doar mai frumos, ci şi mai mare. Dacă pare mai mare, atunci poate impresiona mai lesne prada sau adversarii. Blana este un atu din perspectiva luptei pentru supraToc

JJ

II

J

I

Back J Doc Doc I

Section 5: Costuri şi beneficii

50

vieţuire. La urma urmei, lucrul acesta este valabil şi pentru manageri. Ţine de reflexivitatea la care se referă George Soros: contează ceea ce cred alţii despre tine. Programele de computer sunt şi ele învelite uneori în tot felul de blănuri: interfeţe grafice care-ţi iau ochii, tot felul de asistenţi care-ţi sar în ajutor. Nu trebuie însă niciodată pierdute din vedere costurile acestor sisteme şi ceea ce fac ele efectiv. Un sistem mai prietenos reduce costurile legate de consultanţă. Este însă şi suficient de flexibil pentru a se adapta la obiectivele firmei? Ce se-ntâmplă dacă fişierele în care sunt stocate datele au un format secret şi producătorul renunţă să le mai folosească în produsele sale şi nu dezvăluie nici secretul formatului? Am încercat s-aplic considerentele legate de costuri şi beneficii şi-n cazul cărţii de faţă. Toate exemplele folosesc Toc

JJ

II

J

I

Back J Doc Doc I

Section 5: Costuri şi beneficii

51

programe care pot fi descărcate gratuit de pe Internet. Formatele fişierelor sunt publice. Mai mult decât atât, programele au sursa deschisă. Este costul lor nul, din punctul de vedere al cititoarei sau cititorului. Nici vorbă că nu. Programele mai trebuie şi instalate. Limbajul lor trebuie cât de cât învăţat ş.a.m.d. Informaţiile despre aceste programe contează!

Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 2. INFORMAŢIA DIN TEXTE

52

Capitolul 2: Managementul informaţiei conţinute în texte Ni se întâmplă de multe ori să scriem pe petice de hârtie. La restaurant: notăm pe şerveţele nume, adrese, numere de telefon. Ne folosim poate de invitaţia la recepţie pentru a nota idei. Ca să-mi fac schiţa proiectului acestei cărţi am căutat prin geantă, prin buzunare o bucată de hârtie. Cu un creion am aşternut obiectivele principale ale proiectului pe o hârtie a cărei destinaţie iniţială era să slujească drept ambalaj. În jurul computerului la care scriu această carte sunt tot felul

Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 2. INFORMAŢIA DIN TEXTE

53

de fişe de hârtie cu nume, idei, numere şi alte notaţii dintre cele mai diverse. Managerul modern s-ar putea să aibă pe birou un teanc de fişe frumos tăiate, special pregătite pentru însemnări. Are probabil la îndemână şi acele hârtiuţe cu lipici care pot fi ataşate direct paginilor unei cărţi sau unui document trimis de cei care se ocupă cu finanţele organizaţiei sau cu computerele şi aşa mai departe. Hârtiile acestea reprezintă, în fond, un mare progres. Ideea ca atare de a nota ceva, de a ţine însemnări a reprezentat un mare pas înainte. Folosirea hârtiei este relativ recentă. Oamenii şi-au făcut noduri la fulare sau chiar ţineau funii speciale cu noduri. Au scris pe cioburi de lut. Arheologii au o mare satisfacţie când descoperă asemenea însemnări. De multe ori ele nu sunt texte religioase sau Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

54

scrieri literare. Sunt însemnări cu caracter comercial. Sunt evidenţe ale unor vechi depozite ş.a.m.d. Cu alte cuvinte, sunt informaţiile cu care lucrau vechii manageri. Managerul actual s-ar folosi desigur de computer, nu de sfori, oase şi cioburi de lut. Locul cioburilor şi bucăţilor de hârtie este luat în acest caz de fel şi fel de fişiere. Când produci însă fişiere căutarea informaţiei stocate se face altfel decât atunci când răscoleşti printre hârtii. 1. Căutarea informaţiilor cu ajutorul tiparelor Fişierele de tip text au o importanţă crucială în computerele actuale. Utilizatorii obişnuiţi s-ar putea să le găsească urâte: atunci când aceste fişiere sunt vizualizate pe ecran ele seamănă cu vechile pagini dactilografiate. Adevărul este că Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

55

programele de calculator sunt scrise iniţial sub forma acestor fişiere! Acestea sunt sursele programelor care ne încântă apoi ochiul. Multe lucruri utile se pot face cu fişiere text. Din păcate, sistemul de operare Windows nu include unelte sofisticate pentru lucrul cu fişierele text. Dacă sunteţi curioase sau curioşi şi vreţi să vedeţi cum funcţionează pe viu exemplele de mai jos, recomandarea mea ar fi să instalaţi un editor special pentru fişiere text. Cel pe care-l folosesc eu se numeşte Vim. Găsiţi lesne o versiune pentru Windows la http://www.vim.org/. Toată lumea ştie să caute cu Find. Pui şirul de semne căutat (deobicei un singur cuvânt) şi-l regăseşti în textul afişat pe ecran. Este foarte raţional să procedezi aşa când cauţi, de pildă, printr-o pagină de web foarte mare. Meşterii într-ale informaticii recurg însă la tipare. Pentru Toc JJ II J I Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

56

a regăsi informaţii într-un text folosesc un limbaj! Limbajul expresiilor regulate cum se numeşte tehnic acest limbaj este adesea invizibil pentru ochiul muritorilor-utilizatori de rând. Vezi doar casete de dialog frumos desenate şi tot felul de opţiuni. 1.1. Limbajul tiparelor de căutare în text Adevărul este că nici un limbaj nu este uşor de învăţat. . . în partea sa subtilă. Gândiţi-vă însă la marinarii care colindă porturile lumii. Un număr limitat de cuvinte din engleză sau malaieză sau altă limbă pot să-i ajute să se descurce foarte bine. O astfel de versiune a limbajului tiparelor de căutare în text vă este propusă şi aici. Am să folosesc chiar textul la care lucrez. Caut „ciob“ într-un mod mai puţin uzual. Toc JJ II J I Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

57

Editorul Vim este un editor modal.1 Ceea ce se-ntâmplă, de pildă, dacă apăs tasta „\“ depinde de modul în care se află editorul. Apăsaţi tasta „Esc“ şi veţi trece în modul comandă al editorului. În acest mod al editorului, apăsarea tastei pe care se află semnul „\“ mută cursorul pe ultimul rând al ecranului şi permite căutarea unei porţiuni de text care se potriveşte cu tiparul descris în limbajul expresiilor regulate. În Figura 2.1 se vede exact acest lucru: cursorul a fost mutat pe ultimul rând şi am scris „ciob“. Prima apariţie a lui „ciob“ a fost marcată cu un fond de culoare neagră. Când apăsăm tasta pe care scrie „Enter“ toate şirurile care se potrivesc cu tiparul căutat vor avea fondul galben.2 1

Pentru mai multe informaţii despre Vim a se vedea anexele la cartea mea Eseul filosofic. 2 Figurile sunt concepute pentru a fi văzute cu vizualizorul de pdf. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

58

Până aici nimic deosebit. Afară poate de faptul că modul de a căuta în texte pare cam chinuit. Să căutăm însă un cuvânt care se află la început de rând. Atenţie! Este vorba de rândurile logice, nu de cele vizuale. Cum eu scriu aici fiecare frază pe alt rând, aceasta înseamnă – cu oarecare aproximaţie – că rândurile logice sunt cele care încep cu majusculă. În orice caz, pentru a termina un rând apăs tasta pe care scrie „Enter“. Parcă era undeva, la început de rând cuvântul „Arheologii“. În Figura 2.2 se vede cum decurge această căutare. Dacă tiparul după care se caută se termină cu simbolul dolarului, atunci şirul de litere căutat este la sfârşitul rândului. Măriţi-le pentru a le vedea detaliile. Tipărirea s-ar putea să conducă la rezultate nesatisfăcătoare. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

59

Cum căutăm un cuvânt întreg? În Figura 2.3 se vede că secvenţa căutată este precedată de o bară oblică inversă urmată de deschiderea unei paranteze unghiulare şi se încheie cu bara oblică inversă urmată de închiderea parantezei unghiulare. Dacă nu ne amintim un semn, putem pune un punct. Tot aşa am putea proceda dacă, dintr-un motiv sau altul nu putem introduce de la tastatură un semn. A se vedea Figura 2.4. O altă tehnică utilă este indicarea şirului sau intervalului în care se află literele potrivite. Tiparul de mai jos [em][an][gl][al][i]*eză a fost folosit pentru a genera căutarea ilustrată în Figura 2.5. Steluţa pusă după [i] are următoarea semnificaţie: semnul Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

60

(sau semnele) din paranteză apar o dată sau niciodată în expresia care se potriveşte tiparului. Cam acestea ar fi rudimentele unui limbaj de căutare. În situaţiile uzuale nici nu este nevoie de mai mult. Pentru a afla însă şi alte lucruri despre limbajul tiparelor de căutare ar trebui să consultaţi o carte special consacrată lor sau o carte precum cea a lui Quigley[10, pp.67–79], care are un capitol consacrat limbajului tiparelor de căutare în texte. 1.2. Căutarea cu ajutorul grep Numele programului grep este format din primele litere care compun sintagma „Global Regular Expression Print“. Este o unealtă familiară meşterilor programatori care folosesc sistemul de operare Unix. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

61

Pentru a avea unelte de programare Unix sub Windows trebuie să le instalaţi separat. Puteţi folosi GnuWin32, un sistem care recurge direct la resursele Windows. Puteţi instala msys sau puteţi recurge la Cygwin. Citiţi cu atenţie documentaţia acestor sisteme înainte de a instala. În orice caz, un sfat bun pare a fi acela de a instala iniţial o versiune minimă, dar funcţională, a uneltelor Unix. Desigur, sub un sistem Unix autentic, unelte precum grep vor funcţiona mult mai bine. Exemplele date în continuare sunt lucrate sub sistemul de operare GNU/Linux Fedora 3. De fapt la ce este bun grep? Cu grep putem căuta prin mai multe fişiere deodată, fără să deschidem un editor. Să vedem un exemplu practic: grep ^Arheologii *.tex 02-text.tex:Arheologii au o mare satisfacţie Toc JJ II J I Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

62

când descoperă asemenea însemnări. Deschideţi o consolă Unix sau, după caz, o fereastră MSdos (dacă aveţi unelte Unix instalate) sau o fereastră a emulatorului msys sau Cygwin. Tastaţi apoi numele uneltei grep urmat de o expresie scrisă în limbajul tiparelor de căutare (regular expression) şi apoi numele fişierului. Eu am folosit o steluţă urmată de „.tex“ pentru a indica orice fişier al cărui nume se termină în „.tex“. Dacă pun doar steluţa, căutarea are loc prin toate fişierele, inclusiv cele binare! grep Arheologii *.tex 02-text.tex:02-text.tex:Arheologii au o mare satisfacţie când descoperă asemenea însemnări. Binary file minf.dvi matches Am slăbit, de altfel, şi cerinţa ca „Arheologii“ să fie la începutul rândului! Toc JJ II J I Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

63

Să revenim însă la căutarea iniţială. Ce răspuns am primit? Mi s-a comunicat numele unui fişier, urmat de un semn de separare (două puncte) şi de un rând din text. Unealta grep furnizează prin urmare şi contextul în care apare termenul căutat. Grep are ceea ce se numesc în limbajul Unix-ului „opţiuni“. Să zicem, de pildă, că nu vreau să apară numele fişierului. Atunci procedez în felul următor: grep -h ^Arheologii *.tex Arheologii au o mare satisfacţie când descoperă asemenea însemnări. Opţiunea -h îi spune lui grep să nu afişeze numele fişierului. Observaţi felul în care este scrisă opţiunea. Grupul grep -h formează, de fapt, un singur bloc. Continuă să existe deci trei blocuri în comanda de mai sus: numele programului Toc JJ II J I Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

64

apelat, tiparul de căutare şi numele fişierului (fişierelor) în care se caută. Comenzile date în consola unui sistem Unix sunt „comenzi în linie“. Trebuie să acordăm o mare importanţă în aceste comenzi spaţiilor albe. Ele separă elementele din care este făcută comanda. Este absolut nerecomandabil să folosiţi spaţii albe în numele fişierelor. Dacă ţineţi morţiş să aveţi spaţii albe în numele fişierelor, procedaţi ca-n exemplul de mai jos: grep ^Arheologii 02-text\ copie.tex Arheologii au o mare satisfacţie când descoperă asemenea însemnări. Bara oblică inversă nu face parte din numele fişierului. Trebuie pusă însă înaintea spaţiului alb. Chiar şi aşa grep nu Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Căutarea informaţiilor cu ajutorul tiparelor

65

poate afişa numele fişierului! Funcţionează ca şi cum ar avea activată opţiunea -h. Ca manageri ai unei organizaţii gândiţi-vă, pornind de la acest exemplu banal, ce probleme creează pentru organizaţia dumneavoastră lucrul cu computere care lucrează atât sub Windows, cât şi sub Unix. Evident, un sistem de computere hibrid este perfect posibil. Trebuie însă să nu fiţi surprinsă sau surprins când informaticienii dumneavoastră vor solicita resurse sau vor trebui să găsească soluţii pentru problemele legate de reţeaua hibridă de computere. Să ne întoarcem acum la rândul care începe cu „Arheologii“. Între timp, am mai scris în fişierul respectiv, aşa c-ar trebui să apară mai multe rânduri în rezultat. Ar fi bine să afişăm numărul rândului pe care apare expresia căutată. grep -n ^Arheologii 02-text.tex Toc JJ II J I Back J Doc Doc I

Section 2: Capcanele sortării

66

30:Arheologii au o mare satisfacţie când ... 192:Arheologii au o mare satisfacţie când ... 207:Arheologii au o mare satisfacţie când ... Deşi n-am pus opţiunea -h, n-am decât numere pentru c-am indicat exact numele fişierului. Adăugarea lui -h ar putea fi însă o măsură prudentă. Verificaţi oricum felul în care funcţionează grep. 2. Capcanele sortării În exemplul care urmează nu conţinutul informaţiilor contează, ci modul în care sunt manevrate. Am creat un mic fişier de tip text în care am trecut pe fiecare dintre cele trei rânduri o dată calendaristică şi valoarea unei unităţi de Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

67

investiţii la un ipotetic fond mutual.3 Iată ce conţine acest fişier: 1/31/69 12/31/76 12/31/84

40 300 3000

În Unix există o unealtă sort care sortează rândurile dintr-un fişier text. Chiar dacă sunteţi în Windows v-aş sfătui să eliminaţi programul sort, moştenit din vechiul msdos şi să folosiţi versiunea Unix a lui sort. Să vedem ce rezultat produce apelarea lui sort: sort curs1.txt 3

Exemplul este inspirat în mod liber din tabelul de la pagina 146 a cărţii lui George Soros[14]. Valoarea unităţii de investiţii este în sensul NAVPS Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

12/31/76 12/31/84 1/31/69

68

300 3000 40

Datele calendaristice au fost sortate ca şi cum ar fi un text! Operez câteva modificări în fişier şi-l aduc la forma: 12/31/76 01/31/69 15/31/84

300 40 3000

Sortarea se va face acum altfel. Fireşte, se va face după luni! 01/31/69 05/31/84 12/31/76

40 3000 300

Folosind subtilităţile programului sort din Unix pot sorta după ani. Toc JJ II J I Back J Doc Doc I

Section 2: Capcanele sortării

69

sort -t/ -k3,3 curs2.txt 01/31/69 40 12/31/76 300 05/31/84 3000 De data aceasta fişierul este văzut ca având pe fiecare rând câmpuri. Bara oblică separă câmpurile. Semnul care urmează după opţiunea -t îi spune programului de sortare ce separator să folosească. După opţiunea -k urmează numerele care arată câmpurile după care se sortează. Atenţie însă la faptul că ultimul câmp cuprinde atât anul, cât şi valoarea unităţii de investiţii! Având în vedere problemele ridicate de datele calendaristice cred că este mai prudent să folosim date calendaristice de forma „an-lună-zi“. Iată şi a treia formă a micului meu fişier: Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

76-12-31 69-01-31 84-05-31

70

300 40 3000

Chiar şi-n această formă datele calendaristice pot fi problematice. Nu vă amintiţi de problema anului 2000? Dacă rezultatele fondului sunt gândite pe termen lung? Ar putea fi vorba despre ceva de genul: 1976-12-31 2069-01-31 3084-05-31

300 40 3000

Folosirea formei complete a anului este evident dezirabilă în cazuri de acest tip.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

71

Cum s-ar face sortarea după valoarea unităţilor de investiţii? Voi construi o a cincea formă a fişierului. În această formă separ două câmpuri în felul următor: 1969-01-31 1976-12-31 2004-05-31

: 0400 : 0030 : 3000

Cele două puncte de pe fiecare rând servesc drept separator. Pe primul câmp apar date calendaristice (într-o formă sperăm - uşor de sortat) şi pe al doilea câmp apar valori ale unităţii de investiţii. M-am gândit că al doilea câmp este văzut ca un text şi am pus zerouri pentru ca sortarea să aibă loc corect: 1976-12-31 : 0030 1969-01-31 : 0400 2004-05-31 : 3000 Toc JJ II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

72

Valoarea acţiunilor ipoteticului fond este cea mai scăzută la 31 decembrie 1976! Adevărul este că sort din Unix poate recunoaşte numere. Un fişier de genul: 1969-01-31 1976-12-31 2004-05-31

: 400 : 30 : 3000

poate fi sortat. Procedăm în felul următor: sort -t: -k2,2 -n -b curs6.txt 1976-12-31 : 30 1969-01-31 : 400 2004-05-31 : 3000 Opţiunea -n îi spune programului sort să considere că are de face cu numere. Opţiunea -b cere ignorarea spaţiilor albe. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

73

S-ar putea ca ea să fie activată automat. Oricum, dacă o puneţi acest lucru n-are de ce să dăuneze. Capcane chiar mai complicate întinde sortarea în momentul în care am lucra cu un fişier cu nume de familie româneşti. Să zicem că este vorba de data naşterii unor persoane: Stere Tomescu Ştefan

: : :

1987-10-23 1979-03-15 1984-07-04

Sortarea lor după data naşterii nu prezintă nici o problemă. Tomescu este, evident, cel mai în vârstă. Ba pot sorta uşor şi-n ordine inversă: sort -t: -k2,2 -b -r data-nasterii.txt Stere : 1987-10-23 Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

Ştefan Tomescu

: :

74

1984-07-04 1979-03-15

Pentru a sorta în ordine inversă folosesc opţiunea -r. Sortarea după nume este însă problematică. În calculator literele au asociate nişte coduri. Programul sort se foloseşte, de fapt, de aceste coduri pentru a sorta. În fond trebuie să sorteze după un criteriu! Problema este că S are, de pildă, codul 83 şi T are codul 84, iar Ş are codul 350. Astfel numele „Ştefan“ va fi fi în fruntea listei la sortarea fără opţiuni: sort data-nasterii.txt Ştefan : 1984-07-04 Stere : 1987-10-23 Tomescu : 1979-03-15 Sortarea în ordine inversă nu rezolvă desigur problema: Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

75

sort -r data-nasterii.txt Tomescu : 1979-03-15 Stere : 1987-10-23 Ştefan : 1984-07-04 Gândiţi-vă la ce probleme creează celelalte litere româneşti care au diacritice. Mai ales că ele au coduri numerice diferite în diverse sisteme de coduri!4 Soluţionarea problemei de mai sus depăşeşte cadrul cărţii de faţă. Putem oferi doar o sugestie. Experimentând ca mai sus (sau citind sursa programului sort) putem să ne dăm seama că literele alfabetului englez sunt corect sortate. De asemenea, sunt corect sortate cifrele. O idee ar fi să înlocuim 4 Diferenţele acestea de coduri se simt lesne în paginile de web. Renunţarea însă la diacritice în paginile de web nu cred că este o soluţie.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Capcanele sortării

76

pe S cu S1 şi pe Ş cu S2. Acesta ar fi un prim pas. Apoi sortăm şi resubstituim pentru a obţine literele româneşti normale. Într-un plan mai general, din perspectiva managementului informaţiei, sortarea unui fişier de tip text ne oferă două principii utile. Ambele principii pornesc de la ideea că trebuie să acordăm atenţie operaţiilor pe care vrem să le executăm cu informaţiile respective. Desigur, mai devreme sau mai târziu, vrem, să zicem, să le sortăm. Atunci trebuie să fim atente şi atenţi la faptul că forma în care este stocată informaţia contează (vezi mai sus problema formei datei calendaristice). Primul principiu este deci acela că informaţiile noastre trebuie să aibă o formă care să ne permită să operăm lesne cu ele. Al doilea principiu ne spune că este bine Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

77

să dăm o structură explicită fişierelor. A se vedea mai sus introducerea unui separator pentru câmpurile unui rând. 3. Textele ca surse de date Deşi sintagma sună pompos, „baze de date“, în fapt noi am avut de a face parţial în secţiunile 1 şi 2 cu baze date. Pentru a avea de a face cu o bază de date ne trebuie mai întâi un fişier de genul celor în care am înscris cursurile unităţilor de investiţii la un fond mutual. Aceasta este sursa noastră de date. Mai avem nevoie şi de un limbaj pe care săl înţeleagă programe cu care introducem şi extragem date din sursa noastră de date. Evident, programe precum grep şi sort joacă doar parţial acest rol. Limbajul programului grep este limitat la căutarea cu ajutorul tiparelor. Limbajul pe care-l înţelege sort este limitat la operaţiuni de sortare. Toc JJ II J I Back J Doc Doc I

Section 3: Textele ca surse de date

78

Un limbaj veritabil de manevrare cu sursele de date este awk. Creatorii awk sunt trei vestiţi specialişti în ştiinţa computerelor: Alfred Aho, Brian Kernighan şi Peter Weinberger. Ei au scris şi o carte despre awk. Puteţi citi despre Aho, Weinberger şi Kernighan în enciclopedia Wikipedia pe Internet. Pentru a lucra cu awk vă trebuie mai întâi un editor de texte precum Vim ca să scrieţi fişierele cu sursele de date. Acestea sunt fişiere de tip text, precum versiunea extinsă a fişierului cu valorile unităţilor de investiţii: 1969-01-31 1972-12-31 1976-12-31 1978-12-31 1979-12-31 Toc

JJ

30 100 300 500 1000 II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

1981-12-31 1984-05-31

79

700 3000

Mai avem nevoie, de asemenea, de programul awk ca atare. Orice distribuţie Linux include acest program. De asemenea, dacă instalaţi unelte de programare Unix sub Windows aveţi posibilitatea de a folosi awk. În exemplele de mai jos awk este apelat într-o consolă a unui sistem Linux, respectiv Fedora Core 3. În awk avem posibilitatea să folosim tiparele de căutare aşa cum au fost ele introduse în secţiunea 1. Pot să caut, de pildă, un anumit an în fişierul de mai sus: awk ’/1981-[0-9][0-9]-[0-9][0-9]/’ curs7.txt 1981-12-31 700 Se observă că ziua şi luna sunt descrise ca perechi formate Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

80

din cifre din intervalul care începe cu 0 şi se termină cu 9. Aş fi putut pune doar anul în tipar, dar lucrul acesta ar fi riscant în cazul unui fişier real, unde anul ar putea coincide cu un şir de cifre aflat pe alt câmp. Pe lângă tipare, limbajul awk ne permite să ne referim la acţiuni. Cea mai simplă acţiune este cea de afişare a conţinutului unui câmp. În sursa noastră de date primul câmp conţine ani: awk ’{print $1}’ curs7.txt 1969-01-31 1972-12-31 1976-12-31 1978-12-31 1979-12-31 1981-12-31 Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

81

1984-05-31 Cuvântul-cheie print din limbajul awk desemnează după cum ne dăm uşor seama o comandă de afişare. Câmpurile sunt desemnate prin semnul dolarului urmat de numărul câmpului. În sursa de date câmpurile sunt separate prin tab-uri. Putem combina tiparele cu acţiunile în felul următor:

awk ’/1981-[0-9][0-9]-[0-9][0-9]/{print $2}’ curs7.t 700 Atenţie la semnele de punctuaţie! Ghilimelele simple închid porţiunea scrisă în limbaj awk. Barele oblice cuprind între ele tiparul. Acţiunea este indicată de ceea ce este pus între acolade. La început este, evident, invocat awk, iar la sfârşit este indicat fişierul cu sursele de date. Dacă nu se introduce explicit o altă specificaţie, fiecare Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

82

rând din sursa de date reprezintă pentru awk o înregistrare (record, în limba engleză). Este vorba desigur despre rândurile logice, separate prin apăsarea tastei pe care scrie „Enter“. Dacă nu se introduce altă specificaţie, câmpurile unei înregistrări sunt separate prin spaţii albe (obţinute prin apăsarea taste pentru spaţiu alb sau a tastei „Tab“). Putem afla cu ajutorul awk numărul de câmpuri din fiecare înregistrare: awk ’{print "Numărul de câmpuri: "NF}’ curs7.txt Numărul de câmpuri: 2 Numărul de câmpuri: 2 Numărul de câmpuri: 2 Numărul de câmpuri: 2 Numărul de câmpuri: 2 Numărul de câmpuri: 2 Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

83

Numărul de câmpuri: 2 În comanda awk de mai sus ghilimelele duble indică o porţiune de text. Această porţiune este afişată ca atare de către awk. Perechea de majuscule NF este numele unei variabile interne awk. Într-un limbaj de programare o variabilă este precum un sertar sau o cutie în care ţin valori. În acest caz, awk are din construcţie un sertar în care ţine valoarea pentru numărul de câmpuri. Această valoare se poate schimba desigur de la o înregistrare la alta. De aici şi numele de „variabilă“. Limbajul awk are multe construcţii familiare celor care ştiu alte limbaje de programare. Are însă şi multe elemente subtile, bine adaptate lucrului cu sursele de date. Iată, de pildă, cum pot extrage pentru fiecare înregistrare din sursa Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

84

mea de date luna din data calendaristică aflată pe primul câmp: awk ’{split($1,dc,"-");print dc[2]}’ curs7.txt 01 12 12 12 12 12 05 După cum am văzut mai sus acţiunile sunt invocate în acolade. Aici avem de a face cu două acţiuni. Prima este aceea de „spargere“ (în engleză split) a primului câmp. Ar trebui ceva mai multă familiarizare cu limbajele de programare pentru a înţelege mai exact sintaxa acestei acţiuni. Toc JJ II J I Back J Doc Doc I

Section 3: Textele ca surse de date

85

Chiar dacă vă lipsesc asemenea cunoştinţe, puteţi vedea că paranteza rotundă cuprinde trei elemente (numite tehnic „argumente“) ale acţiunii: un prim element indică numărul câmpului, al doilea arată că se va introduce o variabilă botezată „dc“, iar al treilea element indică separatorul folosit în notarea datei calendaristice. Astfel datele calendaristice de pe primul câmp vor fi desfăcute în trei bucăţi. Nu rămâne decât să indicăm awk a doua acţiune: cea de afişare a lunii (ea fiind a doua „bucată“ din data calendaristică). Programul awk este într-un fel uimitor. El ilustrează felul în care se poate construi o maşinărie complexă de extras date din aparent modeste fişiere de tip text. Maşinăria aceasta este, de pildă, utilizată intens de cei care administrează computere cu sisteme de operare de tip Unix. S-ar Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

86

putea, de asemana, ca ea să se ascundă undeva în spatele unor interfeţe grafice pline de butoane şi casete de dialog.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

Toc

JJ

II

J

87

I

Back J Doc Doc I

Section 3: Textele ca surse de date

88

Figura 2.2: Căutarea unui cuvânt la început de rând

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

89

Figura 2.3: Căutarea unui cuvânt întreg

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

90

Figura 2.4: Tipar de căutare care foloseşte punctul

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Textele ca surse de date

91

Figura 2.5: Un tipar de căutare mai complex

Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 3. INFORMAŢIA DIN DICŢIONARE

92

Capitolul 3: Managementul informaţiei conţinute în dicţionare Unul dintre cele mai interesante dicţionare ale limbii române este Dicţionarul invers (Bucureşti: Editura Academiei, 1957). La prima vedere nu pare mare lucru. Pare doar o listă de cuvinte ce se întinde pe mai mult de şapte sute de pagini. La o privire mai atentă te va şoca bogăţia vocabularului limbii române. Ai toate şansele să găseşti aproape la tot pasul cuvinte pe care nu le înţelegi. Omul grăbit va strâmba din nas pentru că n-are şi explicaţia cuvintelor respective. Utilitatea dicţionarului invers este însă alta. Ordonarea cuvintelor din listă este făcută examinând întâi ultima literă. Toate cuvintele care se termină cu litera „a“ Toc JJ II J I Back J Doc Doc I

CAPITOLUL 3. INFORMAŢIA DIN DICŢIONARE

93

vor fi puse la începutul dicţionarului. Apoi ele sunt ordonate după a doua literă din finalul lor şi aşa mai departe. Consultând acest dicţionar poţi afla care sunt substantivele care se termină în a sau care sunt adjectivele care se termină în e sau în re. Dicţionarul invers este desigur în primul rând un instrument de lucru, o unealtă pentru lingvişti. Este însă şi un excelent exemplu de management al informaţiei. O simplă ordonare diferită a materialului permite obţinerea rapidă de informaţii. Să culegi toate adjectivele terminate în e este o treabă considerabil mai complicată dacă te-ai sluji de un dicţionar în care cuvintele sunt ordonate normal, după literele de la începutul lor. Exemplul dicţionarelor nu este câtuşi de puţin fără legătură cu managementul unor lucruri mult mai puţin sacre Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 3. INFORMAŢIA DIN DICŢIONARE

94

decât cuvintele limbii române. Până şi-n cazul celui mai umil depozit te poţi ciocni de liste cu materiale, aparatură etc. Dimensiunile listelor contează. În acest capitol vom avea de a face cu liste foarte mari. Ceea ce ar pute fi rezolvat în cazul unor liste scurte printr-o simplă examinare vizuală devine o problemă complicată în cazul unei liste foarte lungi. Nu ordonăm nici normal, nici invers, nici altfel lista de cumpărături pe care o alcătuim zilnic în casă. Aceasta este un simplu petic de hârtie pe care sunt scrise câteva cuvinte. Problema organizării listei s-ar pune însă cu totul altfel dacar fi vorba despre 300 000 de cuvinte sau mult mai mult.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

95

1. Dicţionarul pentru corectorul ortografic Pentru a corecta fişierele din care se compune sursa cărţii de faţă folosesc un corector ortografic creat de Kevin Atkinson şi denumit aspell. Corectorul aspell este parte integrantă din Linux Fedora Core1 Precum toate celelalte programe din această distribuţie aspell este un program cu sursă deschisă (şi modificabilă, atâta timp cât respecţi licenţa GNU). Piesa pe care vreau s-o înlocuiesc şi să o examinez este chiar lista de cuvinte de care se foloseşte corectorul. Invocarea corectorului se face din linia de comandă, precum în cazul de mai jos: 1

Există şi versiuni pentru Windows ale corectorului aspell, inclusiv o interfaţă grafică, botezată freespell. Ca deobicei aş recomanda însă utilizarea aspell sub Linux. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

96

aspell --lang ro -c 02-text.tex La început se tastează numele corectorului. Opţiunea –lang este cea care indică limba textului care va fi corectat. Există un mod standard de a nota limbile. În cazul limbii române notaţia este „ro“. Opţiunea -c indică programului că trebuie să verifice (în limba engleză check ) fişierul denumit „02text.tex“. Atenţie la faptul că acesta este un fişier de tip text, nu unul binar! Să vedem acum ce rezultate produce invocarea corectorului. Ceea ce vedeţi în figura 3.1 este o consolă urxvt în care apare textul, cu sublinieri, sugestii şi un meniu care permite operarea corecturilor. Cuvântul „Managerul“ este pus pe un fond de culoare neagră pentru că n-a fost găsit de către aspell în dicţionar. Tot pe baza dicţionarului aspell face o serie de sugestii. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

97

Dicţionarul cu care lucrează aspell este creat dintr-o listă de cuvinte cu o comandă de genul: aspell --lang=ro create master ./ro.rws < ro.wl În Unix perechea de semne ./ îi spune programului să creeze ro.rws în directorul curent (în directorul unde a fost apelat aspell). Tot acolo trebuie să se afle o listă de cuvinte. Eu am botezat lista mea de cuvinte ro.wl.2 Dicţionarul ro.rws are o formă specială, pe care o poate folosi aspell, dar care nu este lesne lizibilă pentru noi. Cum facem ca dicţionarul ro.rws să devină funcţional? Asta depinde de versiunea programului aspell. Eu am insta2

Puteţi găsi pe Internet un pachet gata pregătit pentru limba română. Eu descriu aici felul în care se poate construi un propriul dicţionar. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

98

lat versiunea 0.60 pentru că aceasta poate lucra cu texte în unicod. În acest caz, ro.rws trebuie copiat în directorul /usr/lib/aspell-0.60. Mai trebuie puse acolo fişierele ro.dat, ro.multi şi ro_affix.dat. Fişierul ro.dat are un conţinut de genul: name ro charset iso8859-2 affix ro special - -*soundslike generic Observaţi mai ales rândul al doilea, unde se spune că dicţionarul de limba română foloseşte setul de caractere iso8859-2. Nu vă faceţi probleme dacă textul dumneavoastră este scris în codificarea utf-8 a sistemului unicod. Versiunea 0.60 a programului aspell descifrează corect textul respectiv, dar Toc JJ II J I Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

99

foloseşte un dicţionar iso8859-2. De altfel, pentru limba română nici nu este nevoie de întreaga putere a unicod, capabil să reprezinte texte scrise în limbi din India sau în japoneză. Versiunile mai vechi ale aspell nu pot corecta însă texte scrise în unicod. Fişierul ro.multi are un conţinut destul de simplu: add ro.rws El spune aspell să folosească pentru română dicţionarul ro.rws. Dacă vreţi să faceţi pe ucenica-vrăjitoare sau ucenicul-vrăjitor, atunci acordaţi atenţie faptului că eu am desemnat româna doar cu ro. Despre fişierul ro_affix.dat voi spune mai multe mai jos. El lipseşte de altfel din pachetul pentru limba română de pe Internet. Sistemul poate funcţiona şi fără el. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

100

Piesa pe care o putem însă examina vizual şi care constituie dicţionarul ortografic de bază este lista de cuvinte. Explicarea felului în care am construit lista de cuvinte pe care o folosesc efectiv ar depăşi scopurile acestei cărţi. În esenţă, este vorba despre extragerea de cuvinte din propriile mele cărţi şi din surse liber accesibile pe Internet.3 Pe scurt, este nevoie de un program care să transforme texte în liste de cuvinte. Apoi aceste liste sunt sortate, dublurile sunt eliminate şi listele sunt combinate într-o singură listă. Se pune desigur problema şi unui examen vizual al listei, 3

Lista de cuvinte pentru limba română este deocamdată un proiect aflat în lucru. Când proiectul respectiv va atinge un stadiu acceptabil de dezvoltare am de gând să afişez lista de cuvinte şi dicţionarul pe Internet şi să le plasez sub licenţa GPL.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

101

precum şi confruntarea ei cu dicţionare ortografice tipărite. Acest proces este desigur laborios. Să examinăm însă lista de cuvinte ca atare. Lista mea, în forma ei actuală, are 288771 de intrări. Ar fi impropriu să vorbesc despre cuvinte, deoarece lista cuprinde şi forme ale aceluiaşi cuvânt. În jurul cuvântului „manager“ lista arată în felul următor: management managementul managementului manager manageri managerial managerială manageriale Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

102

manageriali managerii managerilor Forma articulată „managerul“ lipseşte din listă. Această absenţă ridică o problemă interesantă. Are oare rost să adaug fiecare formă, cu mâna, pe măsură ce o găsesc? Lista ar creşte foarte mult. În plus, ar fi şi foarte multe operaţii şi corecturi de făcut manual. Aici intervine rolul fişierului ro_affix.dat. Să ne uităm în lista de cuvinte la nişte termeni precum „fir“ şi „cadru“: .... cadru/N .... fir/N .... Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

103

Bara oblică este un separator, un semn special care-i spune programului aspell că urmează un aşa-numit „steag“. Steagul este o literă. Am ales aici o literă care să sugereze că este vorba despre substantive neutre. În ro_affix.dat se află definiţiile necesare pentru steaguri. De exemplu, pentru steagul N definiţia ar putea arăta aşa: SFX SFX SFX SFX SFX SFX SFX SFX SFX

N Y 11 N 0 N 0 N 0 N 0 N 0 N u N 0 N 0

Toc

JJ

e ul ului ele elor e l lui II

[^aeiouă] [^aeiouă] [^aeiouă] [^aeiouă] [^aeiouă] [^aeiouăâî]u [^aeiouăâî]u [^aeiouăâî]u J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

SFX N SFX N SFX N

0 u u

le ele elor

104

[^aeiouăâî]u [^aeiouăâî]u [^aeiouăâî]u

Pe primul rând stă scris că este vorba despre sufixe, că steagul este N, că se combină eventual cu prefixe şi că definiţia care urmează are 11 rânduri. Cele 11 rânduri sunt divizate în cinci coloane. Primele două coloane coincid cu cele de pe primul rând. A treia coloană indică dacă trebuie sau nu eliminat ceva din finalul cuvântului înainte de a adăuga sufixul. Dacă se pune 0 (zero), atunci nu se taie nimic. Pe rândul şase se vede însă că trebuie eliminat u. Sufixele care se adaugă sunt pe coloana a patra. Pe coloana a cincea este tiparul finalului cuvântului din listă. Pe primele cinci rânduri tiparul spune că respectivul cuvânt nu se termină în Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Dicţionarul pentru corectorul ortografic

105

vocală. Pe ultimele şase rânduri tiparul ne spune că este vorba de cuvinte terminate în consoană plus u. Programul aspell are comenzi speciale care ne permit să testăm steagurile, pe măsură ce le definim: echo fir/N | aspell --lang ro expand fir firelor firele firului firul fire Primul rând este la consolă (în linia de comandă, cu alte cuvinte) şi este urmat evident de o apăsare pe „Enter“. Al doilea rând ne arată cum expandează fir/N. Chiar dacă naveţi aspell instalat puteţi citi documentaţia pe Internet. Putem testa şi a doua parte a definiţiei steagului N în felul următor:

echo cadru/N | aspell --lang ro expand cadru cadrelor cadrele cadrule cadrului cadrul cadre Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Managementul informaţiei din dicţionarele bilingve

106

Folosirea sufixelor sau prefixelor definite în ro_affix.dat ne ajută să comprimăm lista. Comprimarea informaţiei este importantă. Ceea ce am văzut mai sus este însă şi un exemplu practic de comprimare. Comprimarea utilizează faptul că anumite părţi ale informaţiilor noastre se repetă. Este suficient să stocăm undeva tiparul comun şi să notăm doar ce tipar este folosit într-un punct sau altul. 2. Managementul informaţiei din dicţionarele bilingve Pentru a construi un dicţionar bilingv simplu putem folosi structuri de genul celor studiate în capitolul 2. De pildă, pe pagina de web a Radei Mihalcea, de la University of North Texas, puteţi găsi, sub licenţă GPL, un dicţionar românenglez. Toc JJ II J I Back J Doc Doc I

Section 2: Managementul informaţiei din dicţionarele bilingve

107

Este interesant să căutăm prin dicţionarul Radei Mihalcea cu ajutorul grep: grep -hw curent romanian-english.txt curent <> course curent <> current curent <> daily curent <> draught curent <> fluent curent <> fluently curent <> generally curent <> instant curent <> legal curent <> present curent <> running curent <> trend Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Managementul informaţiei din dicţionarele bilingve

108

curent <> usual curent <> usually Opţiunea -hw combină opţiunile -h, care cere să nu se afişeze numere de linie, şi -w, care cere ca tiparul să fie confruntat doar cu cuvinte întregi.4 Se observă că Rada Mihalcea foloseşte drept separator combinaţia de semne <>. Am putea folosi sort pentru a sorta după al doilea câmp. Un editor precum Vim ne poate ajuta apoi să decupăm al doilea câmp şi să-l punem pe prima poziţie. Se obţine astfel un dicţionar englez-român. N-are însă prea mare rost să facem aceste manevre. grep ne poate veni în ajutor. 4 Dacă nu punem opţiunea -w ne vom trezi cu toate rândurile în care apare şirul definit în tiparul de căutare.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Managementul informaţiei din dicţionarele bilingve

109

În căutarea de mai sus ajunge să adăugăm un singur r şi obţinem un efect interesant: grep -hw current romanian-english.txt curent <> current curs <> current uzitat <> current valabil <> current Ideea de a folosi grep cu astfel de dicţionare am văzut-o prima dată la Frank Richter în programul DING (DIctionary Nice Grep). Când îl descarci de pe Internet DING are automat instalat un dicţionar german-englez. Nu este dificil însă să-i adaugi dicţionarul Radei Mihalcea. Cu dicţionarul român-englez al Radei Mihalcea, căutările cu ajutorul DING arată în felul următor: Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Managementul informaţiei din dicţionarele bilingve

110

Combinând două programe puse sub licenţa GPL în felul arătat aici, putem obţine un instrument de lucru excelent. Licenţa GPL este foarte importantă în acest caz: ea garantează accesul la surse. Programul obţinut este extrem de flexibil. Poate fi adaptat la cele mai diferite întrebuinţări. Chiar fără să ştim prea multe despre managementul informaţiilor putem să construim instrumentele de lucru adecvate organizaţiei noastre. Inutil să spun că o organizaţie ar putea folosi forţa colectivului ei pentru a dezvolta - în situaţiile discutate mai sus - liste de cuvinte adaptate specificului ei, dicţionare potrivite cu specificul muncii şi alte instrumente. Ideea este însă departe de a fi aceea că exemplele de mai sus au doar o semnificaţie practică. Ele sunt interesante şi pentru felul în care pun în lumină aspectele teoretice ale Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

111

organizării muncii de stocare şi de prelucrare a informaţiei. Dicţionarul român-englez al Radei Mihalcea este, de exemplu, un produs colateral al muncii ei de cercetătoare în domeniul prelucrării limbajului natural cu ajutorul calculatoarelor. Lucrul acesta se vede, de altfel, din seriile subtile de sinonime pe care le conţine dicţionarul. 3. Managementul definiţiilor lexicale Voi începe această secţiune cu o invitaţie la o călătorie pe Internet. Mergeţi la pagina de web a lui Cătălin Frâncu. Veţi găsi acolo o trimitere către „copilul“ său favorit: o formidabilă colecţie de definiţii lexicale disponibile pe Internet. Cătălin Frâncu a iniţiat alcătuirea colecţiei de definiţii şi se ocupă cu partea tehnică a proiectului Dexonline. Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

112

Dacă vreţi să examinaţi definiţiile din proiectul Dexonline şi fără a vă conecta la Internet puteţi descărca programul dixit. Dixit este scris de către Octavian Procopiuc. Programul foloseşte baza de date a proiectului Dexonline. Dixit este disponibil atât în versiune Linux, cât şi-n versiune Windows. Figura 3.3 ne oferă un exemplu de căutare de definiţii cu ajutorul Dixit. Dacă reuşiţi să instalaţi Dixit veţi vedea că foloseşte un fişier dixit.qdb. Aceasta este sursa de date. Ce înseamnă însă extensia qdb? Despre ce fel de baze de date este vorba? Baza aceasta de date este creaţia lui Mikio Hirabayashi. Proiectul se numeşte QDBM (Quick Database Manager). Quick Database Manager-ul nu era parte a distribuţiei Fedora Core 3 instalate pe computerul meu, aşa că a trebuit să-l adaug. Dacă dispuneţi de un sistem Linux care foloseşte Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

113

pachete rpm, atunci următoarea căutare vă va spune ceva despre ceea ce este instalat pe sistemul cu care este scrisă cartea de faţă: rpm -q qdbm qdbm-1.8.33-1 rpm -q qdbm-devel qdbm-devel-1.8.33-1 Citiţi evident documentaţia de pe pagina proiectului QDBM pentru a şti mai bine ce şi cum să instalaţi. Să vedem acum câteva comenzi simple ale QDBM. O sursă de date (un depozit, ca să folosesc metafora din proiectul QDBM) este creată cu o comandă de genul: dpmgr create dic.qdb Am creat practic un fişier qdb. Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

114

Adăugarea de informaţii la sursa de date se face în felul următor: dpmgr put dic.qdb pisica "Mamifer carnivor de talie şi cu ghearele ascuţite, retractile." Comanda invocă mai întâi managerul bazei de date. Urmează comanda put (adaugă în depozitul de date). După aceea trebuie pus numele fişierului în care sunt stocate datele. După numele fişierului urmează o cheie. Eu am folosit drept cheie cuvântul „pisica“. Ceea ce vedeţi în finalul comenzii între ghilimele este o valoare asociată cu cheia respectivă. Eu am folosit aici o versiune prescurtată a unei definiţii găsite în proiectul Dexonline. Secretul unei baze de date QDBM este foarte simplu: intrările din baza de date sunt formate dintr-o pereche cheievaloare. De altfel, informaticienii numesc o astfel de strucToc JJ II J I Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

115

tură de date „dicţionar“. Felul în care este organizat în interior un fişier qdb iese în afara sferei de interese a cărţii de faţă. Ideea de bază este că un astfel de fişier are o structură care permite optimizarea căutărilor. Aşa se face că Dixit găseşte atât de repede informaţiile dintr-o bază de peste un sfert de milion de definiţii lexicale. Eu am în fişierul meu dic.qdb doar o definiţie. Să vedem totuşi cum o extrag de acolo: dpmgr get dic.qdb pisica Mamifer carnivor de talie mică şi cu ghearele ascuţite, retractile. Nu este greu de văzut c-am folosit cheia pentru a regăsi valoarea asociată ei.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

116

Fişierele de genul lui dic.qdb nu sunt fişiere de tip text. Putem însă să le transformăm în fişiere de tip text. dpmgr exportdb dic.qdb dic.txt Fişierul dic.txt este de tip text şi poate fi lesne citit. Aceste minime cunoştinţe ne permit acum să înţelegem ce se petrece în spatele interfeţei grafice a programului Dixit. Voi folosi tot cheia „pisica“:

dpmgr get dixit.qdb pisica 32424 PISICA @PIS’IC~A $pisici, $ s.f. @I.@ @1.@ Mamifer domestic carnivor familia felinelor, cu corpul suplu, acoperit cu blan deas~a \si moale de diferite culori, cu capul rotund cu botul foarte scurt, cu maxilarele puternice \si c ghearele retractile \si ascu\tite ... Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

117

N-am reprodus decât începutul rezultatului acţiunii de căutare a valorii asociate cheii „pisica“. Se vede că valoarea respectivă are o structură. Se văd de asemenea formatările folosite în proiectul Dexonline pentru literele româneşti. Proiectul Dexonline este în sine un proiect remarcabil. Îmi este de folos şi când scriu cartea de faţă şi i-ar fi de mare utilitate oricui scrie un text în limba română. Dincolo de această utilitate practică a proiectului respectiv am avut însă posibilitatea să mai facem un pas înainte în lumea bazelor de date.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

Toc

JJ

II

J

I

118

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

119

Figura 3.2: Căutare în dicţionarul român-englez al Radei Mihalcea cu ajutorul DING Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Managementul definiţiilor lexicale

Toc

JJ

II

J

I

120

Back J Doc Doc I

CAPITOLUL 4. LIMBAJUL SQL

121

Capitolul 4: Limbajul SQL Dacă studiaţi o carte de informatică pentru managementul firmei, precum cea scrisă de profesorul Ioan Radu şi colaboratorii săi[11], veţi găsi acolo o descriere conceptuală a fluxurilor care asigură aducerea la zi a informaţiilor şi obţinerea de informaţii din baza de date. Nici un program din cele descrise în cartea amintită nu se descurcă de fapt fără a avea acces la informaţii. O bună bază de date este esenţială pentru funcţionarea oricărei organizaţii moderne. Studiind capitolele anterioare v-aţi dat desigur seama că pentru a interacţiona cu o sursă de date trebuie să folosim un limbaj. Pentru bazele de date „de întreprindere“ există un limbaj standard: SQL. Numele limbajului vine Toc JJ II J I Back J Doc Doc I

CAPITOLUL 4. LIMBAJUL SQL

122

de la iniţialele componentelor sintagmei „Structured Query Language“. Adevărul este că SQL e mai mult decât un limbaj de căutare în sursele de date. Toate bazele de date importante înţeleg SQL şi poţi face o sumedenie de operaţii cu ajutorul SQL. Problema cea mare a bazelor de date „de întreprindere“ este că sunt destul de greu de instalat acasă sau pe computerul de la serviciu pe care am vrea să învăţăm SQL. În principiu, lucrul acesta este posibil — chiar şi pe un sistem Windows98. Administrarea bazei de date este însă dificilă (mai ales în cazul începătorilor sau al persoanelor care vor să-şi facă doar o idee despre SQL). Soluţia pe care v-o propun aici este să folosiţi SQLite. Autorul principal al SQLite este D. Richard Hipp. Marele avantaj al SQLite este că sursa de date este într-un Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 4. LIMBAJUL SQL

123

singur fişier şi nu trebuie să porneşti nici un fel de server pentru a avea acces la ea. Este o soluţie excelentă pentru cei care învaţă SQL. Este, de asemenea, o soluţie de luat în seamă în practică: pentru bazele de date ale paginilor de web, de exemplu. În întreprindere trebuie să fiţi însă atenţi la problemele de securitate a datelor: cine are acces la fişierul cu datele stocate de SQLite are acces la toate datele. Accesul nu este selectiv. Pentru învăţarea SQL (dacă porniţi de la zero) cartea scrisă de Ben Forta[2] este excelentă. Nu folosiţi însă exemplele din traducerea românească. Cel puţin versiunea din 2002, pe care am citit-o, este plină de erori. Trebuie să ştii deja SQL ca să foloseşti exemplele de acolo. Descărcaţi exemplele de pe situl autorului. În limita capacităţilor SQLite, exemplele de pe situl autorului merg fără probleme, Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 4. LIMBAJUL SQL

124

iar dacă nu ştiţi decât prea puţină engleză traducerea românească este totuşi utilă pentru a prinde sensul exemplelor. Programul SQLite se poate descărca de pe Internet. SQLite este, de pildă, parte a Fedora 3 extra. Exemplele date în continuare sunt lucrate cu sqlite-2.8.16. Această versiune a SQLite este în principal şi-n atenţia lui Chris Newman în cartea sa despre SQLite[8].1 SQLite este disponibilă atât pentru Linux, cât şi pentru Windows. Consultaţi situl SQLite pentru a vedea ce vi se potriveşte. Instalarea programului SQLite nu este deloc complicată. Trebuie să fiţi doar atente şi atenţi să aveţi acces la executabilul sqlite. În Unix aceasta înseamnă că puteţi purta un dialog de acest gen: 1

Există şi sqlite3. Aceasta este versiunea pe care o dezvoltă în prezent D. Richard Hipp. Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 4. LIMBAJUL SQL

125

which sqlite /usr/bin/sqlite Citiţi însă cu grijă instrucţiunile de instalare. Programul SQLite ca atare este un instrument apelat prin intermediul comenzii în linie (într-o consolă Unix sau o fereastră MSDos). S-ar putea să vreţi să aveţi la îndemână şi o unealtă care are interfaţă grafică. Pentru aceasta descărcaţi sqlitebrowser. SQLite Database Browser este capabil să creeze baze de date de tip SQLite. Atenţie însă la problemele de compatibilitate. Pentru exemplele din această carte folosesc versiunea 1.1, care creează baze de date compatibile cu SQLite 2.x (vedeţi ce scrie în meniul Help la About).

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

126

1. Un exemplu de bază de date SQLite Conform principiului acestui manual ar trebui ca fiecare să lucreze cu exemple familiare. Cum eu lucrez într-o universitate unele dintre „articolele de inventar“ cel mai frecvent întâlnite sunt cărţile. Aşa că exemplul meu foloseşte cărţi. Puteţi vedea însă alte exemple în cartea lui Forta[2] sau în alte cărţi despre SQL. Pentru crearea bazei de date deschid sqlitebrowser şi apăs prima iconiţă din stânga sau merg în meniul File şi apăs New. Apare o fereastră de dialog precum cea din Figura 4.1. Eu am ales drept nume pentru fişierul în care SQLite stochează datele „bib.db“ pentru că „bib“ aminteşte de cărţi, iar „db“ este extensia standard pentru aceste baze de date. În continuare, va apărea imediat o altă casetă de dialog. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

127

În ea trebuie să precizaţi numele câmpurilor şi tipurile de date care vor fi stocate în câmpurile unei înregistrări. Ideea de câmp al unei înregistrări ne este deja familiară. Ce nu ne este familiar este conceptul de table (tabel). O bază de date SQLite poate conţine mai multe tabele. Dau un nume tabelului şi apoi apăs Add. Apare o nouă casetă de dialog (a se vedea Figura 4.2). Câmpul botezat „inv_id“ va stoca numere. Aceste numere sunt unice pentru fiecare carte. Adevărul este că sqlitebrowser este mai bun ca vizualizor rapid al unei baze de date, dar este o unealtă cam nesigură când trebuie creat un tabel. Eu m-am slujit de un fişier bib.sql, precum cel din Figura 4.3 şi de o comandă în linie pentru a crea tabelul carti din bib.db, aşa cum se vede el în Figura 4.4. Am folosit comanda în linie (comanda dată în consolă sau fereastră MSDos): Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

128

sqlite bib.db < bib.sql pentru a crea fişierul ca atare şi tabelul respectiv. Pentru a pregăti date în vederea introducerii în tabelul carti am construit un alt fişier sql, botezat bibdata.sql. Puteţi vedea în Figura 4.5 cum apare acest fişier în fereastra grafică a editorului Vim. Din nou, introducerea datelor ca atare se face printr-o comandă în linie: sqlite bib.db < bibdata.sql Putem folosi sqlitebrowser-ul pentru a vedea datele introduse (v. Figura 4.6).

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

Toc

JJ

II

J

I

129

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

Toc

JJ

II

J

I

130

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

131

Figura 4.3: Conţinutul fişierului bib.sql văzut cu Vim

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

Toc

JJ

II

J

I

132

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

Toc

JJ

II

J

I

133

Back J Doc Doc I

Section 1: Un exemplu de bază de date SQLite

Toc

JJ

II

J

I

134

Back J Doc Doc I

Section 2: Căutarea în baza de date

135

2. Căutarea în baza de date Este important să ne dăm seama că fişierul bib.db este o jucărie. Are un singur tabel şi cinci înregistrări. O bază de date reală poate să fie imensă. În timp ce, dacă ne uităm în Figura 4.6, ne facem rapid o idee despre datele din tabel, într-un tabel real acest lucru n-ar fi posibil. Aici ne vine în ajutor limbajul SQL. Instrucţiunile SQL sunt destul de transparente pentru cine ştie limba engleză. În continuare deschid sursa de date bib.db cu ajutorul sqlite şi cer să fie afişat conţinutul câmpului aut: [solcan@baloo 04-sql]$ sqlite bib.db SQLite version 2.8.16 Enter ".help" for instructions Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Căutarea în baza de date

136

sqlite> SELECT aut ...> FROM carti; Forta Foucault Rothbard Nola Wittgenstein Observaţi că apare un prompt sqlite> specific managerului bazei de date. După SELECT aut am apăsat tasta „Enter“. De asemenea, după FROM carti; am apăsat tasta „Enter“. Nu uitaţi să puneţi punct şi virgulă! Programul sqlite are o istorie a comenzilor; dacă apăsaţi pe tasta cu săgeata în sus sau pe cea cu săgeata în jos puteţi naviga printre comenzi. N-are rost să tastaţi de mai multe ori aceeaşi comandă. De asemenea, puteţi transforma Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Căutarea în baza de date

137

lesne o comandă într-altă comandă. Istoria comenzilor funcţionează şi după promptul ...> ceea ce mi se pare o idee extraordinar de bună. Pot selecta şi mai multe câmpuri o dată. De exemplu, dacă vreau să văd aşa-numitele fapte legate de publicare (locul, editura, anul) procedez în felul următor: sqlite> SELECT adr, ed, an ...> FROM carti; Bucuresti|Teora|2002 Pitesti|Paralela 45|2005 Bucuresti|Inst.Mises Romania|2005 Bucuresti|ALL|2001 Bucuresti|Humanitas|2004 Cred că este foarte important să experimentaţi cu aseToc

JJ

II

J

I

Back J Doc Doc I

Section 2: Căutarea în baza de date

138

menea comenzi. Puteţi experimenta, de pildă, cu condiţiile căutării descrise mai jos. Căutarea descrisă anterior era necondiţionată. La un volum mare de date asemenea căutări mai mult ne-ar încurca. Să încercăm să găsim autorii şi titlurile pentru cărţile care costă mai puţin de 20 de RON. sqlite> SELECT aut, titlu ...> FROM carti ...> WHERE pret<20; Forta|SQL Rothbard|Banii Nola|Diavolul Condiţia este pusă după cuvântul-cheie WHERE. Dacă am pune pret>20 aceasta ar însemna că valoarea din câmpul pret este mai mare de 20. Semnificaţia operatorului = este Toc JJ II J I Back J Doc Doc I

Section 2: Căutarea în baza de date

139

desigur evidentă. Operatorul != serveşte la negarea egalităţii. O construcţie interesantă este BETWEEN . . . AND . . . (cuvinte care înseamnă în engleză între . . . şi . . . ). Efectul ei poate fi văzut mai jos: sqlite> SELECT aut, titlu ...> FROM carti ...> WHERE pret BETWEEN 17 AND 21; Forta|SQL Foucault|A supraveghea Rothbard|Banii

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Ordonarea informaţiilor

140

3. Ordonarea informaţiilor Închipuiţi-vă că titlurile din baza de date reprezintă cărţile achiziţionate de o bibliotecă. Ele sunt înregistrate pe măsură ce sunt cumpărate. Pentru a regăsi informaţia sau pentru a construi un catalog al bibliotecii ar trebui să sortăm informaţiile. Să vedem puţin titlurile cărţilor din baza de date: SELECT titlu FROM carti; SQL A supraveghea Banii Diavolul Cercetari Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: Ordonarea informaţiilor

141

Nu sunt evident în ordine alfabetică. Să le ordonăm alfabetic! sqlite> SELECT titlu FROM carti ...> ORDER BY titlu; A supraveghea Banii Cercetari Diavolul SQL Putem experimenta ordonări după diverse câmpuri. Putem ordona descendent: sqlite> SELECT titlu FROM carti ...> ORDER BY pret DESC; Cercetari Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Prezentarea informaţiei din tabelele sqlite

142

A supraveghea Banii SQL Diavolul 4. Prezentarea informaţiei din tabelele sqlite Înainte de a spune câte ceva despre prezentarea informaţiei din tabelele sqlite, ar trebui reamintit un principiu important al învăţării oricărui program: află cum ieşi din programul respectiv! Aţi văzut probabil că sqlite are o comandă .help, apelând la care obţinem ajutor: sqlite bib.db SQLite version 2.8.16 Enter ".help" for instructions Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Prezentarea informaţiei din tabelele sqlite

143

sqlite> .help ............................ .exit Exit this program .header(s) ON|OFF Turn display of headers on or .help Show this message .mode MODE Set mode to one of "line(s)", "column(s)","insert", "list", or "html" ............................ .width NUM NUM ... Set column widths for "column Eu am selectat din mesajele sqlite doar pe cele relevante aici. Se vede în orice caz că .exit este o comandă de ieşire din program. În continuare puteţi vedea un exemplu de afişare a informaţiei pe coloane: Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Prezentarea informaţiei din tabelele sqlite

144

sqlite> .mode column sqlite> .headers on sqlite> SELECT aut, titlu FROM carti ...> ORDER BY pret DESC; aut titlu ------------ ---------Wittgenstein Cercetari Foucault A supraveg Rothbard Banii Forta SQL Nola Diavolul Informaţiile din tabelele sqlite pot fi lesne incluse în pagini de web. În continuare se vede cum sqlite produce un fragment de cod html (pe care-l putem insera într-un tabel html). Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Prezentarea informaţiei din tabelele sqlite

145

sqlite> .mode html sqlite> SELECT aut, titlu FROM carti ...> ORDER BY pret DESC; auttitlu Wittgenstein Cercetari Foucault A supraveghea Rothbard Banii Forta SQL Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Prezentarea informaţiei din tabelele sqlite

146

Nola Diavolul În Figura 4.7 se poate vedea tabelul produs cu ajutorul sqlite. Includerea informaţiei din tabelele sqlite în paginile de web se poate face automat, cu ajutorul unor programe (scrise în limbajul php). Obţinem astfel o pagină de web în care informaţia este adusă la zi în mod dinamic (fără intervenţii manuale, ca mai sus).

Toc

JJ

II

J

I

Back J Doc Doc I

Section 4: Prezentarea informaţiei din tabelele sqlite

Toc

JJ

II

J

I

147

Back J Doc Doc I

CAPITOLUL 5. MANAGEMENTUL LOGIC AL INFORMAŢIILOR148

Capitolul 5: Managementul logic al informaţiilor Ideea pe care o prezentăm în acest capitol este foarte simplă: este ideea de a folosi forţa logicii predicatelor în construcţia şi administrarea de baze de date. Aplicaţiile practice ale acestei idei ne conduc către domeniul cu rezonanţă de film ştiinţifico-fantastic al inteligenţei computaţionale. 1. Reţelele semantice Vom începe cu elemente de teoria reprezentării cunoaşterii într-un program de computer. Dacă termenul „cunoaştere“ vi se pare nepotrivit în acest context, gândiţi în termeni de Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Reţelele semantice

149

informaţii (stocate în calculator) despre ceea ce ştiu oamenii. De exemplu, eu ştiu câte ceva despre pisica din casa noastră şi despre ceea ce ştiu despre pisica din casă: • ştiu că este un cotoi; • ştiu că pisica din casă este color-point (i.e. mascată); • ştiu că un cotoi este un soi de animal; • ştiu că un cotoi are blană. Desigur mai ştiu multe alte lucruri, dar ceea ce pare frapant este felul în care pot conecta toate aceste cunoştinţe într-o reţea. Reprezentarea grafică din Figura 5.1 este

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Reţelele semantice

150

inspirată de un exemplu din cartea lui LiMin Fu[4, p.286, fig.11.2(c)].1 Reţeaua semantică este formată din „noduri“ conectate între ele prin „săgeţi“. Se observă că în fiecare nod este o etichetă, care arată conţinutul semantic al nodului respectiv. Săgeţile sunt, de asemenea, etichetate. Dacă examinăm Figura 5.1 simţim imediat că reţeaua poate fi extinsă. Putem spune ceva despre „animal“ şi aşa mai departe. Foarte interesant ar fi apoi să traducem toată această schemă într-un limbaj de calculator. Am putea programa atunci calculatorul ca să producă inferenţe: din informaţia cu privire la faptul că pisica noastră este un cotoi 1

LiMin Fu are un câine, ceea ce nu-i cazul familiei mele! A se vedea şi pagina mea de web. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

151

şi din informaţia că un cotoi are blană am putea trage o concluzie cu privire la faptul că şi pisica noastră are blană. Dacă sursele de informaţii organizate în felul descris mai sus ar fi uriaşe, concluziile n-ar mai fi atât de evidente ca mai sus. Am putea stoca şi extrage informaţii într-un mod logic, fără ca ele să fie şi evidente pentru noi. 2. WordNet pentru utilizare Nu ştiu dacă v-aţi gândit vreodată ce programe extraordinare sunt disponibile în mod gratuit pe Internet. Vă doriţi un dicţionar al limbii engleze pe ecranul computerului dumneavoastră? WordNet este un dicţionar absolut fabulos, uşor de instalat şi nu foarte greu de folosit.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

152

WordNet este creaţia unui colectiv de cercetătoare şi cercetători de la Laboratorul de Ştiinţa Cogniţiei al Universităţii Princeton, coordonat de faimosul psiholog George A. Miller. WordNet are o pagină de pe care poate fi descărcat. Instalarea WordNet nu ridică probleme majore. Aş putea spune că sub Windows decurge chiar fără probleme. În cazul Linux trebuie să acordăm atenţie legăturilor simbolice către bibliotecile de funcţii pe care le foloseşte WordNet. Ele trebuie create în caz că WordNet emite un mesaj de eroare în care spune că nu găseşte o anume bibliotecă. Evident, biblioteca respectivă trebuie să existe efectiv în sistem. Interfaţa grafică WordNet foloseşte Tcl/Tk. Citiţi instrucţiunile de instalare WordNet cu atenţie. Dacă aveţi dificultăţi o soluţie este şi o căutare pe Internet: probabil Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

153

cineva s-a lovit deja de problema respectivă şi i-a găsit o rezolvare. WordNet foloseşte reţele semantice. Alegerea reţelelor semantice de către George A. Miller şi colectivul de la Princeton nu este întâmplătoare: ea reflectă teoriile lor despre memoria umană. Să vedem însă cum decurge practic lucrul cu WordNet. Fie dintr-o consolă, fie din caseta de dialog Run Application chemaţi wnb, care este interfaţa grafică a WordNet. Eu unul rămân la interesul pentru pisici şi introduc în caseta Search Word cuvântul cat. Nu uitaţi să apăsaţi pe tasta „Enter“! Trebuie să apară (în funcţie de versiunea WordNet desigur) ceva de genul a ceea ce puteţi vedea în Figura 5.2. Ceea ce puteţi face în continuare este mult mai interesant. De pildă, puneţi 1 în caseta Senses. Aceasta înseamnă Toc JJ II J I Back J Doc Doc I

Section 2: WordNet pentru utilizare

154

că vă interesează doar un prim sens. Aveţi apoi o alegere între substantiv (Noun) şi verb, în cazul cuvântului „cat“. La alte cuvinte alegerea va fi diferită (mai există adjective şi adverbe în WordNet). Apăsaţi butonul Noun şi aveţi din nou de făcut o alegere.2 Eu vă propun să alegem Hypernyms. Ceea ce rezultă se vede în Figura 5.3. Reţeaua semantică construită de către WordNet este mult mai complexă decât cea din Figura 5.1. Până să ajungem la „animal“ trecem prin nodul „carnivor“ şi prin nodul „mamifer“ şi alte două noduri. Urmăriţi sensul săgeţilor duble! WordNet vă poate oferi, de asemenea, o sumedenie de informaţii despre sinonimele unui cuvânt sau despre antonime. 2

Ar fi bine să studiaţi documentaţia WordNet pentru a înţelege mai bine terminologia folosită de echipa de cercetare de la Princeton. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

155

WordNet are noţiunea de meronim. Aceasta înseamnă că puteţi afla care sunt „părţile“ fiinţei sau ale obiectului etc. Pisica are, de pildă, labe, mustăţi şi aşa mai departe. Închipuiţi-vă aplicaţiile mai pedestre ale meronimelor! Să zicem că aţi avea de gospodărit un depozit. Orice obiect din acel depozit ar avea părţi. Un avion, de pildă, are o sumedenie de piese. Putem organiza toate informaţiile despre componentele avionului cu ajutorul unei baze logice de date. Informaţiile despre o organizaţie pot fi şi ele sistematizate cu ajutorul unei baze logice de date. Organizaţia are şi ea componente. Există, de asemenea, posibilitatea de a sistematiza în acest fel atribuţiile şi aşa mai departe. Să revenim însă la WordNet ca atare. Din punctul de vedere al practicii scrisului (în limba engleză) WordNet oferă Toc JJ II J I Back J Doc Doc I

Section 2: WordNet pentru utilizare

156

informaţii extrem de utile. Eu unul simt, de pildă, deseori nevoia de a găsi ce anume este a kind of. . . . De pildă, wildcat este un fel de pisică. Evident, house cat este un fel de pisică şi aşa mai departe. În terminologia WordNet aceşti termeni se numesc „hiponime“. Recursul la hiponime dă culoare şi concreteţe scrisului. În sensul acesta WordNet este şi un instrument de lucru preţios, nu doar unul pentru cercetare. Există multe aplicaţii care folosesc baza de date a WordNet, inclusiv aplicaţii comerciale. Eu mă voi referi aici la o aplicaţie fără caracter comercial, WordNet Connect. Instalarea acestei aplicaţii este ceva mai pretenţioasă, dar puteţi să vă faceţi o idee despre ea citind pagina de web a programului. Un exemplu de utilizare a WordNet Connect (pe scurt, wnconnect) aveţi şi-n Figura 5.4. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

157

Aşa cum sugerează şi numele aplicaţiei, wnconnect identifică drumuri prin reţeaua semantică. Poate stabili cel mai scurt drum sau poate afişa toate drumurile care leagă două cuvinte din baza de date WordNet. De exemplu, dacă solicit o legătură între tiger şi cat aflu că tiger,Panthera_tigris este o instanţiere a big_cat,cat. Mai interesant este dacă încerc să găsesc o legătură între cat şi sleepy (somnoroasă). Programul examinează 91708 noduri. Se duce mai întâi pe direcţia către fiinţă. Acest termen este apoi conexat cu stările de conştiinţă. Apoi se face o legătură cu unaware (a nu fi conştient, a nu-ţi da seama). De aici este făcută o legătură cu stările de somnolenţă. Programul wnconnect este capabil să reprezinte şi grafic drumurile identificate prin baza de date. Graficele pot să apară în fereastra principală a programului (v. un exemplu Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

158

în Figura 5.4) sau pot fi afişate şi salvate cu ajutorul unui program separat.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

159

Figura 5.1: Un exemplu de reţea semantică Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

Toc

JJ

II

J

160

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

Toc

JJ

II

J

161

I

Back J Doc Doc I

Section 2: WordNet pentru utilizare

Toc

JJ

II

J

162

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

163

3. WordNet pentru meşterit Când descărcaţi de pe Internet WordNet nu se poate să nu băgaţi de seamă că vă este oferită şi sursa bazei de date. Vi se spune că sursa este scrisă în Prolog. Ce este este Prolog? Un limbaj de calculator. Numele său vine de la sintagma „programare logică“. Dacă se-ntâmplă să ştiţi logica predicatelor, atunci înţelegeţi mai uşor sintaxa limbajului Prolog. Prolog este un limbaj cu vechi state de serviciu (în lumea atât de nouă a programelor de calculator). A fost creat de Alain Colmerauer la Universitatea Aix-Marseille, acum mai bine de treizeci de ani. Robert. A. Kowalski, pe acea vreme la Universitatea din Edinburgh (mai apoi la Imperial Co-

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

164

llege din Londra) a contribuit mult la dezvoltarea bazelor teoretice ale Prolog. Prolog n-are o faimă deloc bună printre programatori. Citiţi, de exemplu, ce scrie despre Prolog Nikolai Bezroukov pe situl Open Source Software Educational Society. În câteva cuvinte, putem spune că Prolog este un limbaj declarativ. Limbajele de calculator obişnuite sunt limbaje imperative, cu ajutorul acestor limbaje spunem calculatorului ce să facă, cum să acţioneze. În Prolog, ca şi-n logică, lucrăm cu enunţuri. Spre deosebire de logică, Prolog raportează aceste enunţuri la o bază de date. Prolog ne spune dacă enunţul corespunde sau nu cu ceva din baza de date. Dacă folosim variabile în enunţurile noastre, Prolog ne comunică ce anume din baza sa de date s-ar potrivi cu variabilele din enunţurile noastre. Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

165

Din cele spuse mai sus se deduce destul de lesne că, din perspectiva funcţionalităţii sale, Prolog se înrudeşte cu limbaje precum SQL. Nu este, prin urmare, o întâmplare că un limbaj cu origini logico-filosofice îşi are locul său într-o carte despre managementul informaţiilor. Pentru a lucra direct cu sursele de date WordNet aveţi nevoie de un mediu de dezvoltare Prolog. În exemplele de mai jos eu folosesc SWI-Prolog. Trebuie să descărcaţi versiunea care vi se potriveşte, Linux sau Windows. În principiu, instalarea SWI-Prolog este neproblematică. Eu prefer versiunea Linux, cu apelarea SWI-Prolog dintr-o consolă. Este foarte sigură. Nu uitaţi că aveţi de a face, în cazul WordNet, cu o bază de date uriaşă! Când instalaţi sursele Prolog ale WordNet observaţi desigur că aveţi de a face cu o serie de fişiere care încep cu Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

166

wn_ şi se termină cu extensia pl. Acestea sunt fişierele Prolog ale WordNet. Nu toate sunt foarte mari. Chiar şi pe cele mai mari le puteţi vedea cu uşurinţă cu ajutorul Vim. S-ar putea ca abia acum să înţelegeţi avantajele tiparelor de căutare. Încercaţi să căutaţi ceva în wn_g.pl şi veţi simţi rapid nevoia de a apela la tipare de căutare. Fişierul de pe calculatorul meu are 115424 de rânduri. 3.1. Fişierele Prolog ale WordNet Pentru o foarte bună descriere a fişierelor Prolog ale WordNet apelaţi la studiul Sarei Witzig[15]. Am folosit şi eu acest studiu pentru a mă documenta în vederea elaborării acestei secţiuni. Este scris simplu, clar şi pe alocuri oferă informaţii chiar mai explicite decât cele ale autorilor WordNet. Sarah Witzig începe cu descrierea fişierului wn_s.pl. Ea Toc JJ II J I Back J Doc Doc I

Section 3: WordNet pentru meşterit

167

presupune desigur că ştiţi Prolog. Eu nu voi presupune acest lucru. Aşa c-ar trebui să aflaţi mai întâi câte ceva despre predicatele Prolog. Dacă examinaţi wn_s.pl cu ajutorul Vim veţi constata că fişierul este compus din rânduri care au toate aceeaşi formă. Am să iau câteva dintre aceste rânduri drept exemplu: s(102037911,1,’domestic_cat’,n,1,0). s(102037911,2,’house_cat’,n,1,0). s(102037911,3,’Felis_domesticus’,n,1,0). s(102037911,4,’Felis_catus’,n,1,0). Dacă ignorăm ceea ce se află în interiorul parantezelor rotunde, dar reţinem virgulele, obţinem o structură de forma: s( Toc

, , JJ

II

, , , ). J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

168

Acesta nu este nimic altceva decât un predicat Prolog. Tot fişierul nu face decât să definească acest predicat. Gândiţi-vă la ceva de genul: parinti(maria, ana, ion). Structura aceasta din Prolog ar corespunde cu propoziţia „Părinţii Mariei sunt Ana şi Ion“. Dacă procedăm ca mai sus obţinem o formă cu lacune: parinti(

,

,

).

Acesta nu este altceva decât un predicat. Este desigur logic să spunem că nu toate modurile de a umple lacunele conduc la propoziţii adevărate. Aşa cum noi gândim în termeni de adevăr şi fals, Prolog se uită în baza de date pentru a afla dacă enunţul corespunde sau nu cu ceea ce se află în baza sa de date. Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

169

Să revenim acum la conţinutul fişierului wn_s.pl. El defineşte un singur predicat, care are şase asemenea „lacune“, şase locuri în care conţinutul introdus variază. Tehnic vorbind, acestor „lacune“ le putem zice argumente. Voi simplifica predicatul din wn_s.pl şi voi reţine doar trei argumente. Folosind exemplul de mai sus lucrurile ar arăta aşa: s(102037911,’domestic_cat’,n). s(102037911,’house_cat’,n). s(102037911,’Felis_domesticus’,n). s(102037911,’Felis_catus’,n). Acum este mai uşor de explicat ideea-cheie a bazei de date WordNet. Observaţi că primul argument este un număr din nouă cifre. Este acelaşi pentru toate cele patru rânduri simplificate. WordNet grupează cuvintele în ceea ce autorii bazei Toc JJ II J I Back J Doc Doc I

Section 3: WordNet pentru meşterit

170

de date numesc „synset“-uri (mulţimi de unu sau mai multe sinonime). Fiecare synset primeşte un număr unic. Primul argument ia deci drept valoare acest număr al unui synset. Argumentul de pe poziţia a doua este pus între ghilimele. În felul acesta sistemul Prolog ştie că trebuie să trateze argumentul respectiv ca pe un text (nu încearcă să găsească în el cuvinte-cheie Prolog sau alte elemente ce ţin de maşinăria programării în Prolog). Uitându-ne la valoarea celui de al doilea argument ştim că domestic_cat, house_cat, Felis_domesticus şi Felis_catus sunt elemente ale synsetului 102037911. Al treilea argument indică doar faptul că avem de a face cu un substantiv. Prescurtarea vine de la cuvântul englezesc noun. Să mergem mai departe cu descrierea fişierelor WordNet. Toc JJ II J I Back J Doc Doc I

Section 3: WordNet pentru meşterit

171

Dacă vă uitaţi doar la dimensiunile lor nu se poate să nu vă fi sărit în ochi fişierul wn_g.pl. Acum nu este greu să ne dăm seama că el defineşte un predicat cu două argumente: primul argument are drept valori numerele synseturilor; al doilea argument are drept valori glose. Folosind numărul de synset pentru pisici domestice dăm peste: g(102037911,’(any domesticated member of the genus Felis)’). Acum începem să ghicim şi rostul sistemului Prolog. Ca să facem asemenea căutări cu mâna ar fi imposibil — din pricina dimensiunilor fişierelor. Adevărul este că şi-n cazul unor programe care ar n-ar avea căutări optimizate timpul de lucru ar creşte considerabil. Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

172

Fişierul wn_hyp.pl conţine definiţia, de fapt, tot pentru un singur predicat. Putem însă să gândim lucrurile şi puţin altfel. Fiecare rând ne spune, pentru un synset, care este synsetul care conţine cuvinte cu un sens mai general decât cel din primul synset. În terminologia WordNet acestea sunt botezate „hipernim“-uri. Evident, dacă luăm relaţia în sens invers, dăm peste „hiponim“-uri. În felul acesta avem o serie bogată de legături în reţeaua semantică. Căutând cu ajutorul Vim în fişierul wn_hyp.pl dau peste rândul următor: hyp(102037911,102037721). Primul număr ne este deja cunoscut. Este numărul synsetului pentru pisici domestice. Al doilea număr mă trimite Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

173

la noţiunea de pisică. Reţeaua semantică a englezei diferă aici de cea a românei, dar chiar şi-n română noţiunea de pisică este mai generală decât aceea de pisică de casă: există şi pisici sălbatice. În engleză, spre deosebire de română, şi leii, tigrii (toate felinele) sunt „pisici“ (cats). Cele trei fişiere prezentate până acum constituie inima bazei de date a WordNet. Pentru celelalte fişiere consultaţi documentaţia WordNet sau articolul scris de Sarah Witzig[15]. 3.2. SWI-Prolog şi încărcarea WordNet În cazul oricărui mediu de dezvoltare de programe este important să ştii să-l porneşti şi să-l opreşti. Să vedem ce trebuie făcut în cazul SWI-Prolog: Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

174

pl % /home/solcan/.plrc compiled 0.00 sec, 420 bytes Welcome to SWI-Prolog (Multi-threaded, Version 5.4.6 Copyright (c) 1990-2003 University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to redistr it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). 1 ?- halt. Pornirea se face tastând pl şi „Enter“. Oprirea se face tastând halt. şi „Enter“. Nu uitaţi punctul final din comanda de oprire! Prolog, ca limbaj declarativ, nu ştie — ca să spun Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

175

aşa — de semnul de exclamare. Ştie de ceva care se termină cu punct. Următorul pas este reprezentat de încărcarea fişierelor WordNet. Lucrurile se petrec în felul următor: 1 ?- consult(wn_s). % wn_s compiled 2.91 sec, 26,139,232 bytes Yes 2 ?- consult(wn_g). % wn_g compiled 1.84 sec, 20,209,196 bytes Yes 3 ?- consult(wn_hyp). % wn_hyp compiled 0.74 sec, 6,070,392 bytes Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

176

Cuvântul-cheie este consult. Atenţie la faptul că nu se pune şi extensia din numele fişierelor. Am încărcat deci trei dintre fişierele WordNet. Adevărul este că încărcarea în acest mod a mai multor fişiere, de fiecare dată când „consultăm“ baza de date, ar fi foarte laborioasă. Comenzile de mai sus nu pot fi puse însă ca atare într-un fişier şi încărcate de acolo. Pentru uzul meu personal mi-am alcătuit un fişier, botezat wn.pl, care asigură încărcarea fişierelor WordNet: ::::::-

ensure_loaded(’wn_ant.pl’). ensure_loaded(’wn_at.pl’). ensure_loaded(’wn_cls.pl’). ensure_loaded(’wn_cs.pl’). ensure_loaded(’wn_der.pl’). ensure_loaded(’wn_ent.pl’).

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

::::::::::::-

177

ensure_loaded(’wn_fr.pl’). ensure_loaded(’wn_g.pl’). ensure_loaded(’wn_hyp.pl’). ensure_loaded(’wn_mm.pl’). ensure_loaded(’wn_mp.pl’). ensure_loaded(’wn_ms.pl’). ensure_loaded(’wn_per.pl’). ensure_loaded(’wn_ppl.pl’). ensure_loaded(’wn_sa.pl’). ensure_loaded(’wn_sim.pl’). ensure_loaded(’wn_s.pl’). ensure_loaded(’wn_vgp.pl’).

Dacă scrieţi un asemenea fişier folosiţi Vim sau Emacs ori alt editor de texte. Poate fi şi Notepad, dar nu Word, care are alte utilizări decât scrierea de programe. Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

178

Să vedem cum decurge acum încărcarea fişierelor WordNet: 1 ?- consult(wn). % wn_ant.pl compiled 0.07 sec, 639,964 bytes % wn_at.pl compiled 0.01 sec, 83,368 bytes % wn_cls.pl compiled 0.08 sec, 607,348 bytes % wn_cs.pl compiled 0.00 sec, 14,408 bytes % wn_der.pl compiled 0.38 sec, 3,439,500 bytes % wn_ent.pl compiled 0.00 sec, 26,636 bytes % wn_fr.pl compiled 0.18 sec, 1,537,296 bytes % wn_g.pl compiled 1.54 sec, 19,940,484 bytes % wn_hyp.pl compiled 0.73 sec, 6,070,348 bytes % wn_mm.pl compiled 0.10 sec, 781,576 bytes % wn_mp.pl compiled 0.06 sec, 553,160 bytes % wn_ms.pl compiled 0.00 sec, 50,824 bytes Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

179

% wn_per.pl compiled 0.07 sec, 634,060 bytes % wn_ppl.pl compiled 0.00 sec, 10,380 bytes % wn_sa.pl compiled 0.03 sec, 263,976 bytes % wn_sim.pl compiled 0.18 sec, 1,421,004 bytes % wn_s.pl compiled 3.26 sec, 26,404,536 bytes % wn_vgp.pl compiled 0.01 sec, 140,300 bytes % wn compiled 6.71 sec, 62,620,312 bytes Yes 3.3. Explorarea bazei de date Prolog, ca şi alte limbaje de programare, foloseşte variabile. Atâta doar că, pentru a le înţelege bazele conceptuale, ar fi bine să ştim logica predicatelor. Dacă n-avem cunoştinţe Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

180

de logica predicatelor, cred că o bună soluţie o reprezintă meşterirea de mici programe Programe prolog. Putem începe cu dialoguri directe cu sistemul Prolog: 7 ?- s(X,_,’cat’,n,_,_). X = 102037721 Yes Pe măsură ce dialogăm cu sistemul Prolog acesta afişează numere urmate de un semn de întrebare: sistemul aşteaptă să i se indice un „scop“. Felul în care i-am indicat eu un scop seamănă destul de bine cu operaţiunea de simplificare a predicatului s în secţiunea 3.1. În locul argumentelor care au

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

181

valori care nu mă interesează pun un spaţiu subliniat.3 Două dintre argumente au valorile fixate de către mine.4 În sfârşit, drept prim argument am pus o variabilă. Convenţia Prolog este că numele variabilelor încep cu litere mari. Eu am folosit chiar o singură majusculă. După ce apăs „Enter“ sistemul caută să vadă dacă poate pune ceva în locul lui X în aşa fel încât să obţină un enunţ care se găseşte în baza sa de date. Dacă găseşte o valoare pentru X, atunci o afişează şi aşteaptă apăsarea unei taste. Dacă apăs „Enter“ căutarea se încheie. Dacă apăs pe tasta 3

Atenţie! Aceste spaţii subliniate sunt foarte importante. Sistemul ştie că predicatul s are şase argumente. 4 Atenţie şi la poziţia în care se află ’cat’ şi n! Ordinea argumentelor contează.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

182

pe care este semnul pentru punct şi virgulă, atunci căutarea continuă. Un exemplu de continuare a căutării: 9 ?- s(X,_,’cat’,n,_,_). X = 102037721 ; X = 102043683 ; X = 102877229 ; X = 102879203 ; X = 103475580 ; X = 109269334 ; X = 109500444 ; No Dacă mă folosesc de numerele descoperite (care sunt numere de synseturi), pot să descopăr glose: Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

183

10 ?- g(102037721, N). N = ’(feline mammal usually having thick soft fur and being unable to roar; domestic cats; wildcats)’ No 11 ?- g(102037911, N). N = ’(any domesticated member of the genus Felis)’ ; No Să explorăm acum mai atent un synset: 4 ?- s(202047097,Ord,Cuvant,Cat,Sens,F). Ord = 1 Cuvant = experience Cat = v Sens = 3 F = 8 ; Toc JJ II J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

184

Ord = 2 Cuvant = receive Cat = v Sens = 4 F = 22 ; Ord = 3 Cuvant = have Cat = v Sens = 3 F = 220 ; Ord = 4 Cuvant = get Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

185

Cat = v Sens = 7 F = 36 ; Ord = 5 Cuvant = undergo Cat = v Sens = 1 F = 13 ; No De data aceasta am fixat numărul synsetului, dar în rest am folosit doar variabile. Variabila Ord are drept valoare numărul de ordine al cuvântului în synset. Numerele acestea de ordine sunt unice. Variabila Cuvant are rolul pe care-l Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

186

sugerează numele ei. Variabila Cat are drept valoare categoria gramaticală. Variabila Sens are drept valoare un număr; numărul acesta este cu atât mai mic cu cât sensul respectiv al cuvântului este mai des uzitat. Valoarea variabilei F este tot o frecvenţă: numărul de apariţii într-un corp de texte folosit drept referinţă de către echipa de cercetare WordNet. Extragerea de informaţii nu trebuie făcută neapărat dintrun singur synset. S-ar putea să vreau să văd un cuvânt în apariţiile sale în toate synseturile din care face parte: 7 ?- s(SynSet,Ord,’cat’,Cat,Sens,F). SynSet = 102037721 Ord = 1 Cat = n Sens = 1 Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

187

F = 18 ; SynSet = 102043683 Ord = 2 Cat = n Sens = 7 F = 0 ; SynSet = 102877229 Ord = 2 Cat = n Sens = 6 F = 0 ; SynSet = 102879203 Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

188

Ord = 2 Cat = n Sens = 5 F = 0 ; SynSet = 103475580 Ord = 5 Cat = n Sens = 4 F = 0 ; SynSet = 109269334 Ord = 1 Cat = n Sens = 3 Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

189

F = 0 ; SynSet = 109500444 Ord = 2 Cat = n Sens = 2 F = 0 ; SynSet = 200074101 Ord = 6 Cat = v Sens = 2 F = 0 ; SynSet = 201371307 Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

190

Ord = 1 Cat = v Sens = 1 F = 0 ; No Am extras, după cum se vede lesne, informaţii despre cuvântul ’cat’. Puteţi face o comparaţie cu Figura 5.2. 3.4. Descoperirea conexiunilor dintre informaţii În secţiunea 3.3 am folosit dialogurile directe cu sistemul SWI-Prolog. Ele au desigur limitele lor. Sunt, în fond, operaţiuni de căutare manuală când vine vorba de conexiuni:

Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

191

identifici un număr de synset, cauţi apoi glose şi alte operaţiuni de acest gen. Cum Prolog este un limbaj complet, se pot scrie însă programe care să caute ele prin baza de date. În fapt, orice program Prolog, oricât de simplu descrie o căutare sau o regulă de căutare. Cel mai simplu program, în orice limbaj de programare, este cel care scrie pe ecran ceva de genul „Salut lume!“.5 Iată-l aici în acţiune în cazul Prolog: 4 ?- consult(obs/salutare). % obs/salutare compiled 0.00 sec, 620 bytes Yes 5

Acest program se scrie deobicei când vrei să testeze dacă merge compilatorul sau interpretorul pentru limbajul respectiv. Desigur, este şi primul program pe care-l scrii când înveţi un limbaj de programare. Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

192

5 ?- salutare. Salut lume! Yes Am pornit SWI-Prolog din dosarul (folder -ul) în care se află fişierele Prolog ale WordNet. Pentru a nu amesteca observaţiile mele cu aceste fişiere am creat un dosar obs. În acest dosar se află fişierul salutare.pl; observaţi modul în care decurge consultarea acestui fişier. Trebuie neapărat indicată calea către el. De regulă, programele Prolog sunt mult mai scurte decât programele în alte limbaje de programare. Nu aşa stau lucrurile şi-n cazul salutare.pl, care este ceva mai complicat decât omoloagele sale într-alte limbaje: % prolog Toc JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

193

salutare :write(’Salut lume!’), nl. Primul rând este un comentariu. Comentariile sunt ignorate atunci când SWI-Prolog examinează fişierul. Ceea ce reţine sistemul Prolog ar putea fi tradus cam aşa în româneşte: acţiunea de salutare reuşeşte dacă reuşeşte acţiunea de a scrie în terminal (pe ecran, cu alte cuvinte) semnele Salut lume! şi reuşeşte acţiunea de a trece pe un rând nou. Semnul :- este săgeata implicaţiei din logică, orientată însă către stânga. Logicienii ar înţelege desigur mult mai uşor următoarea notaţie:6 6

Am folosit programul plTeX, creat de Michael A. Covington, pentru a transforma codul Prolog. Toc JJ II J I Back J Doc Doc I

Section 3: WordNet pentru meşterit

194

salutare ← write(’Salut␣lume!’), nl. Observaţi şi modul elegant în care este notat spaţiul alb din mesajul care va fi afişat pe ecran. Cum nu dispunem în setul de bază de semne cu care lucrează computerele de săgeata îndreptată către stânga, trebuie să lucrăm cu combinaţia :- care sugerează pe „se deduce din“. Dacă examinaţi atent dialogul cu sistemul Prolog (v. pagina 193), observaţi că sistemul încheie dialogul cu Yes. Normal, „căutarea“ a reuşit. Următorul program provoacă însă un dialog care se încheie cu No: % prolog Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

195

salut :write(’Salut lume!’), nl, !, fail. Să vedem ce se-ntâmplă când consultăm programul de mai sus şi-l punem să „caute“, să vadă dacă reuşeşte salut: 2 ?- consult(obs/salut). % obs/salut compiled 0.01 sec, 812 bytes Yes 3 ?- salut. Salut lume! No Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

196

Era şi normal să se încheie dialogul cu No. Căutarea fail este, prin convenţie, căutarea care nu reuşeşte niciodată. Folosirea semnului exclamării într-un program Prolog este o chestiune ceva mai complicată. Aici ne putem mulţumi cu ideea că el opreşte anumite manevre de căutare în baza de date. Marele avantaj al Prolog este tocmai acela că optimizează căutările în baza de date. Prolog este un limbaj universal. Orice program scris în alt limbaj poate fi tradus în Prolog. Ca multe alte limbaje de programare Prolog este însă mult mai bun într-o anume direcţie: căutarea în baza sa de date. Partea cea mai interesantă a unui program Prolog este colecţia de reguli de căutare. În continuare, este listat un program care caută să vadă ce alţi membri există într-un synset: Toc JJ II J I Back J Doc Doc I

Section 3: WordNet pentru meşterit

197

% prolog memset(Cuvant) :s(SynSet,_,Cuvant,_,_,_), s(SynSet,Ord,Membru,Cat,_,_), write(SynSet), write(’ > ’), write(Ord), write(’ > ’), write(Membru), write(’/’), write(Cat), nl, fail, !. Aici există o singură regulă, cea pentru cătarea şi afişarea Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

198

altor membri ai synseturilor. Să vedem ce se-ntâmplă concret: 8 ?- consult(obs/memset). % obs/memset compiled 0.00 sec, 776 bytes Yes 9 ?- memset(’cat’). 102037721 > 1 > cat/n 102037721 > 2 > true_cat/n 102043683 > 1 > big_cat/n 102043683 > 2 > cat/n 102877229 > 1 > Caterpillar/n 102877229 > 2 > cat/n 102879203 > 1 > cat-o’-nine-tails/n 102879203 > 2 > cat/n Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

103475580 103475580 103475580 103475580 103475580 103475580 103475580 109269334 109500444 109500444 109500444 109500444 200074101 200074101 200074101 Toc

> > > > > > > > > > > > > > >

JJ

1 2 3 4 5 6 7 1 1 2 3 4 1 2 3

> > > > > > > > > > > > > > >

199

kat/n khat/n qat/n quat/n cat/n Arabian_tea/n African_tea/n cat/n guy/n cat/n hombre/n bozo/n vomit/v vomit_up/v purge/v

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

200074101 200074101 200074101 200074101 200074101 200074101 200074101 200074101 200074101 200074101 200074101 200074101 200074101 200074101 200074101 Toc

> > > > > > > > > > > > > > >

JJ

200

4 > cast/v 5 > sick/v 6 > cat/v 7 > be_sick/v 8 > disgorge/v 9 > regorge/v 10 > retch/v 11 > puke/v 12 > barf/v 13 > spew/v 14 > spue/v 15 > chuck/v 16 > upchuck/v 17 > honk/v 18 > regurgitate/v II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

201

200074101 > 19 > throw_up/v 201371307 > 1 > cat/v No Să vedem un program elementar de căutare de glose pentru un cuvânt dat prin baza de date WordNet: % prolog cautare(Cuvant) :s(SynSet,_,Cuvant,Cat,_,_), g(SynSet,Glosa), write(Cuvant), write(’/’), write(Cat), write(’ ’), write(Glosa), nl, Toc JJ II J I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

202

fail, !. cautare_a(Cuvant) :s(SynSet,_,Cuvant,a,_,_), g(SynSet,Glosa), write(Cuvant), write(’/’), write(’a’), write(’ ’), write(Glosa), nl, fail, !. cautare_n(Cuvant) :s(SynSet,_,Cuvant,n,_,_), g(SynSet,Glosa), Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

203

write(Cuvant), write(’/’), write(’n’), write(’ ’), write(Glosa), nl, fail, !. cautare_v(Cuvant) :s(SynSet,_,Cuvant,v,_,_), g(SynSet,Glosa), write(Cuvant), write(’/’), write(’v’), write(’ ’), write(Glosa), nl, Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

204

fail, !. Voi încărca programul cautare.pl şi voi căuta glose pentru diversele înţelesuri ale substantivului ’cat’ (pisică): 6 ?- consult(obs/cautare). % obs/cautare compiled 0.00 sec, 1,780 bytes

Yes 7 ?- cautare_n(’cat’). cat/n (feline mammal usually having thick soft fur being unable to roar; domestic cats; wildcats) cat/n (any of several large cats typically able to roar and living in the wild) cat/n (a large vehicle that is driven by caterpill tracks; frequently used for moving earth in construction and farm work) Toc JJ II J I Back J Doc Doc I

Section 3: WordNet pentru meşterit

205

cat/n (a whip with nine knotted cords; "British sailors feared the cat") cat/n (the leaves of the shrub Catha edulis which are chewed like tobacco or used to make tea; has the effect of a euphoric stimulant; "in Yemen kat is used daily by 85% of adults") cat/n (a spiteful woman gossip; "what a cat she is cat/n (an informal term for a youth or man; "a nice guy"; "the guy’s only doing it for some doll No Putem compara informaţiile obţinute cu cele din Figura 5.2. Momentul cel mai important în programul de mai sus ţine de modul în care sunt folosite variabilele Cuvant şi SynSet. Variabilei Cuvant îi dăm o valoare atunci când îi inToc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

206

dicăm sistemului un scop (îi spunem să vadă dacă reuşeşte căutarea unor glose pentru ’cat’ ca substantiv). Dacă valoarea lui Cuvant se potriveşte cu un element al unui synset, atunci variabila SynSet capătă o valoare. Această valoare, la rândul ei, este folosită pentru o căutare: căutarea unei glose potrivite. În felul acesta am operat o conexiune între informaţiile din baza de date. În fond, am inferat, am dedus o nouă informaţie din baza de date. Căutarea unor conexiuni în baza de date nu reuşeşte întotdeauna. Următorul program Prolog caută cuvinte similare: % prolog similare(Cuvant) :s(SynSet1,_,Cuvant,Cat1,_,_), Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

207

sim(SynSet1,SynSet2), s(SynSet2,_,Similar,Cat2,_,_), write(Cuvant), write(’/’), write(Cat1), write(’ :=: ’), write(Similar), write(’/’), write(Cat2), nl, fail, !. Spre dezamăgirea mea, nu găsesc termeni similari pentru ’cat’: 10 ?- consult(obs/similare). % obs/similare compiled 0.00 sec, 868 bytes Toc

JJ

II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

208

Yes 11 ?- similare(’cat’). No Nu este nici o eroare în eşecul căutării de mai sus. WordNet defineşte relaţii de similaritate între adjective. În sens tehnic, în WordNet, între cuvintele care au categoriile gramaticale a sau s. Adjectivul ’good’ este similar cu: 22 ?- similare(’good’). good/s :=: advantageous/a good/s :=: ample/a good/a :=: good-hearted/s good/a :=: kind/s good/a :=: kindly/s good/a :=: openhearted/s Toc JJ II J I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

good/s good/s good/s good/s good/s good/s good/s good/s good/a good/a good/a good/a good/a good/a good/a Toc

:=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: JJ

209

close/a complete/a discriminating/a operative/a fortunate/a fresh/a genuine/a echt/a bang-up/s bully/s corking/s cracking/s dandy/s great/s groovy/s II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a Toc

:=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: JJ

210

keen/s neat/s nifty/s not_bad(p)/s peachy/s slap-up/s swell/s smashing/s good_enough/s goodish/s redeeming(a)/s satisfactory/s acceptable/s solid/s suitable/s II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a good/a Toc

:=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: JJ

211

superb/s well-behaved/s well_behaved/s hot/s angelic/s angelical/s beatific/s saintlike/s saintly/s sainted/s beneficent/s benevolent/s gracious/s white/s worthy/s II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

good/a good/a good/a good/a good/s good/s good/s good/s good/s good/s good/s good/s good/s good/s good/s Toc

:=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: :=: JJ

212

goody-goody/s redemptive/s redeeming(a)/s saving(a)/s healthful/a healthy/a intellectual/a nice/a opportune/a pleasing/a reputable/a righteous/a skilled/a sound/a superior/a II

J

I

Back J Doc Doc I

Section 3: WordNet pentru meşterit

213

No Programe mai sofisticate decât cele de mai sus mi-ar atrage atenţia când o căutare are sau n-are sens. Chiar şi aşa ne putem face o idee, meşterind programe Prolog de genul celor de mai sus, despre căutarea în bazele logice de date.

Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 6. COMUNICAREA INFORMAŢIILOR

214

Capitolul 6: Comunicarea informaţiilor Informaţiile care ar sta stocate în baze de date sau care ar avea o formă puţin sugestivă n-ar fi utile organizaţiei. Doar informaţiile care sunt comunicate sunt informaţii folositoare organizaţiei. Raman şi Sharma[12] disting între comunicarea orală şi comunicarea scrisă. Comunicarea orală include interviurile, comunicarea ocazională în grup, şedinţele etc. Comunicarea scrisă include scrisorile, rapoartele, proiectele, manualele ş.a. Indiferent de forma comunicării, un lucru este deosebit de important atunci când ne gândim la informaţiile pe care Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 6. COMUNICAREA INFORMAŢIILOR

215

le includem în mesajele noastre: auditoriul. Includerea de informaţii în mesaj nu este un scop în sine. Ele trebuie să aibă un rost şi o şansă de a fi înţelese de către publicul căruia ne adresăm. O altă idee importantă – de această dată la nivelul organizaţiei – este aceea de a evita ambuteiajele informaţionale, gâtuirile în circuitul informaţiilor, comunicarea de repetate ori a aceloraşi informaţii. Informaţiile trebuie să circule lin pe canalele de comunicare ale organizaţiei. În sfârşit, trebuie avansate recomandări numai pe baza cântăririi cu grijă a argumentelor în favoarea unei soluţii sau a alteia. Comunicarea trebuie să fie centrată pe argumente. Forma în care sunt prezentate argumentele este însă recomandabil să fie una vizuală. Formalismele abstracte capToc

JJ

II

J

I

Back J Doc Doc I

Section 1: Avantajele folosirii bazelor de date

216

tează mai greu interesul. Un grafic sau o imagine pot să-l menţină treaz sau să-l stârnească. 1. Avantajele folosirii bazelor de date Principalul pericol care pare a pândi managementul informaţiei într-o organizaţie este ruptura dintre informaţiile stocate şi comunicare. Nu vi s-a-ntâmplat să daţi de mai multe ori aceleaşi informaţii? Cineva vi le-a cerut, le-a folosit, dar nu s-a priceput să le stocheze în aşa fel încât să le poată folosi şi altă-dată. Nu doar managerii (sau mai precis subordonatele şi subordonaţii lor) suferă din pricina rupturii dintre stocul de informaţii şi comunicare. L-am auzit nu demult pe un cadru didactic suspinând că i se cerea lista de lucrări în altă Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Avantajele folosirii bazelor de date

217

formă decât până atunci. Avea lista în format electronic, dar acest format era cel al Word-ului. Se gândea desigur cât timp va pierde pentru a reface lista („tăind şi lipind“). Un exemplu foarte frecvent de management greşit al informaţiei îl oferă autoarele sau autorii de diverse lucrări, disertaţii şi teze. Bibliografia lucrării, disertaţiei sau tezei este alcătuită sub forma unui text mai mult sau mai puţin frumos formatat. Cum faci să păstrezi însă un format uniform în listă? Ce te faci dacă vrei să treci localitatea înaintea editurii? Sau dacă introduci noi titluri? Obţinerea unui rezultat bun cere ore întregi de muncă. Soluţia la problema de mai sus este folosirea unei baze de date. De pildă, în cazul bibliografiei acestei cărţi folosesc o bază de date numită bibtex. Un fragment din baza de date este vizibil în Figura 6.1. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Avantajele folosirii bazelor de date

218

Sursa datelor unei baze bibtex este într-un fişier al cărui nume are extensia bib. Sursa de date se compune din înregistrări. Fiecare înregistrare are un tip. În Figura 6.1 sunt doar înregistrări de tipul book (carte). Există însă şi alte tipuri de înregistrări. Fiecare tip de înregistrare are câmpurile sale. Numele acestor câmpuri sunt urmate de semnul egal şi sunt colorate aparte în Figura 6.1. Conţinutul informaţiilor stocate în câmpuri este sugerat de numele acestora. În sfârşit, o înregistrare are o etichetă unică. De exemplu, cartea lui George Soros are eticheta soros. Ca şi-n cazul oricărei baze de date, pe lângă sursa de date avem nevoie şi de programe care să preia datele şi să le plaseze acolo unde dorim. În cazul de faţă este vorba despre programul bibtex. Cum ştie însă programul bibtex ce formă vrem să dăm Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Avantajele folosirii bazelor de date

219

bibliografiei? Pentru aceasta programul foloseşte foi de stil. Schimbarea foii de stil ne permite să schimbăm forma bibliografiei. Foaia de stil ne permite, de asemenea, să ignorăm o serie de câmpuri ale bibliografiei. În cazul cărţii lui Peter Drucker, de exemplu, am folosit câmpul cv, creat ad hoc, pentru a introduce câteva date despre părintele managementului ca disciplină academică. Utilizarea bibtex este importantă nu doar din perspectiva listei bibliografice finale. În fapt bibtex creează un fişier pe care-l înţelege programul LATEX. În limbajul LATEX se pot da comenzi pentru introducerea unor trimiteri la bibliografie. În felul acesta informaţia bibliografică este integrată dinamic în textul cărţii: dacă introduc un nou titlu în bibliografie, sistemul trimiterilor se actualizează automat.1 1

Detalii despre utilizarea practică a bibtex găsiţi în anexele la car-

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Avantajele folosirii bazelor de date

220

În multe alte situaţii secretul este acelaşi ca şi-n cazul bibliografiei. Ce rost are să ţii liste cu angajaţi sau angajate în formatul Word? Sau diverse informaţii despre ei sau ele? Trebuie să te chinui mult ca să transformi un fişier Word într-o sursă de date. A pune de la început informaţiile într-o bază de date şi a asigura un flux optim al lor până ajung să fie comunicate este un lucru absolut esenţial. În secţiunea 2 vom prezenta, de altfel, un program care desenează grafuri. Este important să ne gândim la un astfel de program şi din perspectiva conectării cu bazele de date. De exemplu, programul wnconnect, introdus la pagina 156 tea mea Eseul filosofic (Bucureşti: Editura Universităţii din Bucureşti, 2004) sau în pagina de web a cărţii. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

221

ş.u., foloseşte această posibilitate pentru a crea grafuri folosind informaţiile din baza de date WordNet. 2. Vizualizarea informaţiilor Comunicarea informaţiilor este mult mai eficientă dacă este însoţită şi de o prezentare grafică a legăturii dintre informaţii. Programele pentru foi de calcul includ, de regulă, şi aplicaţii care construiesc grafice: cu bare, sub forma „feliilor unei plăcinte“, cu diverse linii etc. Ce te faci însă dacă trebuie să construieşti repede o diagramă cu noduri şi săgeţi? O astfel de reprezentare grafică este ideală pentru prezentarea sugestivă a dependenţei informaţiilor unele de altele. Poate v-aţi întrebat cu ce pachet am construit Figura 5.1. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

222

Cu pachetul GraphViz. GraphViz este un proiect cu sursă deschisă, dezvoltat la AT&T. Sub Linux Fedora Core 3, de exemplu, am instalat pachetul (folosind arhiva graphviz-2.6.tar.gz) în felul următor. Ca root am transferat pachetul arhivat în /usr/src/redhat/SOURCES şi am tastat (din directorul respectiv!) într-o consolă: rpmbuild -tb graphviz-2.6.tar.gz Restul rezolvă sistemul Fedora. Pentru instalare se folosesc rpm-urile din /usr/src/redhat/RPMS/i386 în felul uzual: rpm rpm rpm rpm rpm

-Uvh -Uvh -Uvh -Uvh -Uvh

Toc

graphviz-2.6-1.i386.rpm graphviz-devel-2.6-1.i386.rpm graphviz-tcl-2.6-1.i386.rpm graphviz-doc-2.6-1.i386.rpm graphviz-graphs-2.6-1.i386.rpm

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

223

Instalaţi în orice caz primul rpm şi pe cel care conţine documentaţia. Documentaţia este foarte bogată şi extrem de utilă pentru învăţarea limbajului folosit de programele din pachetul GraphViz. 2.1. Pachetul GraphViz De îndată ce veţi vedea că elaborarea unui graf cu GraphViz presupune scrierea unui program s-ar putea să daţi înapoi şi să ziceţi „asta nu-i pentru mine“. „Sunt un om grăbit; am puţin timp“ nu-i un bun argument aici. Dezvoltarea de diagrame cu GraphViz se face foarte repede. Într-un excelent articol despre GraphViz, publicat de Linux DevCenter pe 6 mai 2004, Michele Simionato explică avantajele GraphViz şi elementele sale de bază. Ideea din primul alineat al articolului este tocmai aceea că GraphViz Toc JJ II J I Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

224

este pachetul ideal pentru cine are de făcut mâine o prezentare şi n-are gata diagramele. Asta se poate întâmpla, de pildă, dacă vreţi să prezentaţi o schimbare în organigrama organizaţiei sau în multe alte situaţii. Pentru a lucra cu GraphViz aveţi nevoie de un editor precum Vim sau Emacs. Cea mai simplă diagramă (în afară de cea vidă) pare a fi cea scrisă de mine în fişierul prim.dot: // dot graph test { A } Într-o consolă, daţi apoi o comandă de genul: Toc JJ II J I Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

225

dotty prim.dot Apare o fereastră grafică şi-n ea un cerc în care stă scris A. Dacă vreţi o săgeată între două noduri, graful devine ceva mai „complicat“ de programat: // dot digraph test { Nod1 Nod2 Nod1 -> Nod2 } Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

226

Cum dăm conţinut nodurilor grafului? Simplu: // dot digraph test { Nod1 [label="Continutul primului nod"] Nod2 [label="Continutul celui de-al doilea nod"] Nod1 -> Nod2 } Cum etichetăm muchiile (conexiunile) dintre nodurile grafului? Punem, ca şi-n cazul nodurilor, un text între ghilimelele din label="". De exemplu: // dot Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

227

digraph test { Nod1 [label="Continutul primului nod"] Nod2 [label="Continutul celui de-al doilea nod"] Nod1 -> Nod2 [label="Eticheta pe sageata"] } Cum inversăm direcţia săgeţii? // dot digraph test { Nod1 [label="Continutul primului nod"] Toc JJ II J I Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

228

Nod2 [label="Continutul celui de-al doilea nod"]

Nod1 -> Nod2 [label="Eticheta pe sageata", dir=back] } Dacă studiaţi comparativ paşii de mai sus vă puteţi da seama imediat care sunt diferenţele şi cum fiecare corespunde cu o modificare în imaginea pe care-o vedeţi în fereastra grafică. Marele avantaj al GraphViz este că pot fi scrise programe care preiau informaţii dintr-o bază de date şi le introduc în textul programelor GraphViz. Apoi aceste programe sunt transformate în grafuri. În felul acesta procesul de prezentare a reţelei informaţiilor poate fi automatizat. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

229

2.2. Diagrame pentru argumente Anumite şcoli filosofice au un adevărat cult pentru argumentare. Orice idee trebuie susţinută cu argumente, în tradiţia de gândire a unor asemenea şcoli. Argumentele sunt importante nu doar pentru filosofi. La urma urmei, sunt prezente în discuţiile de zi cu zi. Sunt importante însă şi-n procesele de comunicare în care sunt angajaţi managerii. Pe scurt, ideea în favoarea căreia pledez aici este că najunge să susţii cu convingere o decizie. N-ajung simplele informaţii. Trebuie oferite argumente. Din fericire, argumentele formulate în limbajul natural pot fi vizualizate şi cu ajutorul tehnicilor logicii informale. În comunicările managerilor cred că aceste reprezentări viToc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

230

zuale nu sunt doar suficiente, ci chiar mai eficiente decât formalizările matematice. Ceea ce sugerez în continuare urmează linia din cartea lui C.A.Missimer[7]. Utilizez însă grafurile construite cu ajutorul GraphViz. C.A.Missimer[7, p.16] ne spune că orice argument argument porneşte de la o problemă. Nu este desigur uşor întotdeauna să descoperim problema aflată în discuţie. Dacă auzim însă pe cineva susţinând că n-ar trebui date note la şcoală,2 atunci ne dăm seama că problema în discuţie este cea a notării în şcoală. Fiind dată o problemă, diverse părţi pot să avanseze răs2

De altfel, mai nou, şi la noi în ţară, în primele patru clase, se dau calificative (nu tradiţionalele note de la 1 la 10). Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

231

punsuri diferite sau chiar diametral opuse. De pildă, unii pot fi pentru note, alţii contra lor. Miezul unui argument constă din raţiunile avansate în favoarea unei soluţii. Dacă soluţiile sunt opuse, precum în chestiunea notării, atunci putem vizualiza destul de lesne aceste raţiuni (a se vedea Figura 6.2, construită pornind de la Figura 3–3 din Good Arguments[7, p.35]). Cântărirea raţiunilor în favoarea unei soluţii sau a alteia este o parte importantă a argumentării. Figura 6.2 este construită folosind un fişier argcarg.dot cu următorul conţinut: // dot digraph test { Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

232

Problema [label="Trebuie renuntat la note?", shape=r Da [label="Da", color=blue] Nu [label="Nu", color=red] {rank=same; Da Nu}

Da -> Problema [label="ratiuni contra notare", dir=b Nu -> Problema [label="ratiuni pro notare", dir=back } Pentru a obţine fişierul argcarg.png, care conţine imaginea ca atare, se foloseşte următoarea comandă (într-o consolă): dot argcarg.dot -Tpng -o argcarg.png Un manager poate să argumenteze pro sau contra deschiderii unei noi filiale a organizaţiei. Poate să argumenteze Toc JJ II J I Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

233

pro sau contra unui nou magazin sau a introducerii în fabricaţie a unui produs ş.a.m.d. În toate aceste situaţii trebuie produse raţiuni în favoarea concluziei avansate şi trebuie indicate temeiuri pentru superioritatea acestor raţiuni în raport cu cele în favoarea unor concluzii diferite. Această carte tratează problema managementului informaţiei. N-avem drept scop discutarea modului în care dovezile disponibile înclină balanţa în favoarea unei concluzii sau a alteia. Aşa ceva face obiectul unui cărţi despre gândirea critică, argumentare şi logică informală. Aici ne interesează felul în care se poate manevra cu informaţiile conţinute în argumente şi modul în care ele pot fi prezentate grafic cât mai sugestiv. Unul dintre elementele cele mai importante legate de argumentare este identificarea presupoziţiilor. Modul de a Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

234

pune problema ca atare poate să conţină presupoziţii. Chiar dacă pare o întrebare de om necioplit, legendara chestiune din Vechea Grecie „Ai pierdut coarnele?“ are meritele ei. Ne atrage atenţia asupra presupoziţiilor problemei: trebuia să am ceva ca să pot pierde acel ceva. Odată scoase la lumină, presupoziţiile pot fi reprezentate grafic. Figura 6.3 este obţinută prin adăugarea a trei rânduri în fişierul argcarg.dot: Presupozitie [shape=rect] {rank=sink; Presupozitie} Presupozitie -> Problema Se observă indicarea destul de evidentă a rank-ului (rangului) presupoziţiei în graf. Multe cărţi de argumentare insistă asupra elementelor de Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

235

susţinere intermediare. Concluzia este avansată pe temeiul unor constatări intermediare. Am putea, de exemplu, susţine că notele încurajează reproducerea necritică a lecţiilor. De asemenea, un autor precum C.A.Missimer[7, cap.7] insistă şi asupra importanţei prescripţiilor. Dacă am ajunge la concluzia că trebuie renunţat la note, atunci trebuie să facem o recomandare. Pentru a introduce elementele intermediare în sprijinul concluziei, precum şi recomandări, putem modifica codul de până acum al grafului pentru a ajunge la forma următoare (comparaţi formele anterioare cu aceasta pentru a detecta schimbările): // dot digraph test { Toc JJ II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

236

Problema [label="Trebuie renuntat la note?", shape=r Da [label="Da", color=blue] Nu [label="Nu", color=red] {rank=same; Da Nu}

Sustinere -> Problema [label="ratiuni", dir=back] Da -> Sustinere [label="ratiuni", dir=back] Recomandare -> Da [dir=back] Nu -> Problema [label="ratiuni pro notare", dir=back Presupozitie [shape=rect] {rank=sink; Presupozitie} Presupozitie -> Problema

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

237

} Rezultatul este cel din Figura 6.4.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

238

de date bibtex TocFigura JJ6.1: Fragment II Jdintr-oIsursăBack J Doc Doc I

Section 2: Vizualizarea informaţiilor

239

Figura 6.2: Raţiuni pro şi contra unei soluţii în problema notării

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

240

Figura 6.3: Reprezentarea presupoziţiei problemei Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Vizualizarea informaţiilor

241

Figura 6.4: Versiunea modificată a diagramei argumentării Toc JJ II J I Back J Doc Doc I

CAPITOLUL 7. PROIECTE

242

Capitolul 7: Managementul informaţiilor conţinute în proiecte Termenul „proiect“ este ambiguu.1 Un proiect poate fi conceput drept proiect-ca-idee. În acest caz, miezul său este format dintr-un şir de obiective, bifate pe măsură ce sunt atinse. Un proiect poate fi înţeles drept proiect-ca-propunere. Deobicei este vorba de o propunere prezentată unei comisii care aprobă resursele financiare solicitate prin proiect. Comisiei i se prezintă ceva care arată mai degrabă ca o 1

O serie de exemple interesante de folosire a termenului „proiect“ găsiţi, de exemplu, pe situl factbites. Toc

JJ

II

J

I

Back J Doc Doc I

CAPITOLUL 7. PROIECTE

243

carte. În orice caz, există multe elemente menite să-i ajute pe membrii comisiei să se documenteze mai bine: descrieri, tabele, grafice şi multe altele. Managementul informaţiilor diferă în cazul proiectuluica-idee de cel din cazul proiectului-ca-propunere. Proiectulca-idee presupune un mod de stocare a informaţiilor care facilitează generarea ideilor şi organizarea lor într-un mod coerent. În cazul proiectului-ca-propunere ideile trebuie să existe deja. Aici forma în care sunt prezentate contează. Evaluatoarele sau evaluatorii trebuie convinşi că ideile respective pot fi transpuse în practică şi că fondurile alocate vor fi cheltuite eficient. Îţi trebuie deci un proiect-ca-idee pe care, dacă nu dispui direct de fondurile necesare, trebuie să-l transformi întrun proiect-ca-propunere. O dată obţinute fondurile, proiecToc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

244

tul trebuie dezvoltat, ceea ce ridică noi şi interesante probleme legate de managementul informaţiilor. În principiu însă, dezvoltarea proiectului presupune obiective, resurse şi termene. Informaţiile cu privire la obiective, resurse şi termene sunt cele care trebuie organizate cât mai potrivit. 1. Structurarea arborescentă a informaţiilor Metafora arborelui este lesne inteligibilă dacă ne gândim la structura unei cărţi de factură academică. Cartea ca atare este „rădăcina“ arborelui.2 Capitolele sunt precum crengile care se desprind din trunchi. Din capitole se desprind alte 2

Nu uitaţi că este vorba despre o metaforă! „Rădăcina“ combină, de fapt, rădăcina şi trunchiul „arborelui“ până la punctul în care încep să se desprindă ramurile. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

245

ramuri: secţiunile. Procesul poate evident continua. Important este că o secţiune se poate „desprinde“ (poate face parte) doar dintr-un capitol. Ca şi o carte, ideile unui proiect ni le putem reprezenta într-o formă arborescentă. Proiectul ca atare reprezintă rădăcina. Ideile-cheie reprezintă ramurile principale ale arborelui. Pe măsură ce proiectul se conturează ideilor-cheie le corespund obiectivele principale ale proiectului. Asemenea ramurilor care se desprind din alte ramuri, din obiectivelecheie se desprind alte obiective ş.a.m.d. Asemenea structuri arborescente pot fi realizate, de pildă, în limbajul XML. XML a fost conceput ca limbaj pentru Internet, dar are multiple alte aplicaţii; e.g. stocarea de date. Pentru legătura dintre validitatea unui document XML şi o structură arborescentă se poate vedea comentariul din Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

246

Lee Anne Phillips[9, p.40]. Matematic vorbind, un arbore este un graf (care nu conţine circuite). Ca orice graf, are noduri şi muchii. Spre deosebire de graful desenat de Lee Anne Phillips, de regulă, arborii din cărţile de informatică au rădăcina sus (pentru că noi citim paginile de sus în jos). Nodurilor terminale li se mai spune şi frunze. 1.1. Schema compoziţională Corpul uman are o structură de rezistenţă: scheletul. O clădire are şi ea o structură de rezistenţă. Despre o carte academică putem spune că are o schemă, un plan care leagă ideile din carte într-o structură coerentă. Tot aşa şi despre un proiect putem spune că are la bază o schemă pe care se brodează întreaga compoziţie. În limba engleză se foloseşte termenul outline (schiţă) Toc JJ II J I Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

247

pentru a desemna osatura unui proiect. Adevărul este că schiţa aceasta poate căpăta amploare şi am preferat aici sintagma „schemă compoziţională“. Ideea de bază este cea a organizării arborescente a schemei compoziţionale. Dacă ne gândim la osatura proiectului ca fiind alcătuită din obiective, atunci schema compoziţională va avea drept ramuri principale obiectivele majore ale proiectului. Subobiectivele sunt asemenea unor ramuri care se desprind din ramurile principale. Cred că numărul obiectivelor majore ale unui proiect trebuie să fie limitat. Memoria de lucru nu ne permite să procesăm decât şapte (plus sau minus două) obiective.3 Putem 3

A se vedea George A. Miller, The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information, articol publicat iniţial în The Psychological Review, 1956, vol. 63, pp. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

248

însă formula subobiective ale obiectivelor principale şi aşa mai departe. Numărul total al obiectivelor s-ar putea să fie considerabil. Informaţiile conţinute în schema proiectului vor fi greu de manevrat pur manual. Ne vom pune în mod firesc întrebarea dacă nu putem primi ceva ajutor din partea unor programe de computer. 81-97. În acest studiu celebru Miller discută limitele memoriei de lucru umane. Interesant este că putem însă opera cu module de informaţii, care la rândul lor pot încorpora alte module de informaţii ş.a.m.d. Nu putem prelucra desigur decât şapte module simultan. Pot folosi un modul de genul „anul căderii Constantinopolului“, combinat cu „anul declanşării Revoluţiei Franceze“ şi „anul naşterii lui Caragiale“ pentru a ţine minte numărul „145317891852“. Numărul respectiv are prea multe cifre pentru a opera cu el în mod direct în memoria de lucru. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

249

• Folosirea programului Leo O alegere interesantă pentru schema conceptuală a proiectului o reprezintă programul Leo. Programul este scris de către Edward K. Ream. Are o pagină de web. Poate fi relativ uşor instalat. Atenţie însă la faptul că este scris în limbajul python. Citiţi instrucţiunile de instalare pentru sistemul dumneavoastră de operare şi vedeţi dacă aveţi sau nu instalată versiunea potrivită pentru python. Leo este un program sofisticat. Poate face foarte multe lucruri, dar şi presupune unele cunoştinţe avansate de programare pentru anumite utilizări ale sale. Nu aveţi însă nevoie de asemenea cunoştinţe pentru a construi scheme conceptuale. Practic, ar fi bine să parcurgeţi partea de outlining a meditaţiilor (tutorial ) la utilizarea Leo oferite de Edward K. Ream pe Internet. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

250

Exemplul pe care-l voi utiliza aici va fi chiar acela al cărţii de faţă. În Figura 7.1 puteţi vedea, în parte, schema compoziţională a cărţii. Dacă studiaţi puţin interfaţa grafică a programului Leo, veţi vedea că are trei panouri. Panoul din dreapta-sus este destinat mesajelor privitoare la funcţionarea Leo. Voi ignora aici acest panou. Mă voi concentra asupra celorlalte panouri. În panoul din stânga-sus vedeţi desenat un arbore al obiectivelor conţinute de proiectul acestei cărţi. De pildă, am drept obiectiv să scriu despre explorarea informaţiei conţinut în texte. Un subobiectiv al acestui obiectiv este prezentarea tiparelor de căutare. Dacă un nod al arborelui are pe el semnul „+“ puteţi da un clic şi arborele expandează. Dacă semnul este „-“ putem Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

251

executa operaţia inversă (evident, nu pe imaginea din carte, ci-ntrun program real!). Cum construim sau modificăm însă arborele? Putem folosi meniul Outline sau taste (apăsate în combinaţie atunci când un nod este selectat). CTRL-I serveşte la crearea unui nod nou CTRL-R mută nodul cu un nivel la dreapta (îl transformă în copilul nodului de deasupra sa) CTRL-L mută nodul la stânga CTRL-U mută nodul mai sus CTRL-D mută nodul în jos Dacă folosiţi meniul Outline aveţi posibilitatea să Hoist un nod (să-l vizualizaţi separat de celelalte noduri). Metoda aceasta este utilă când arborele este foarte mare. Se Toc JJ II J I Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

252

poate, de asemenea, folosi această metodă şi pentru a insera „copiii“ unei „ramuri“ a arborelui. Deşi pare foarte inocent, panoul din partea de jos a interfeţei lui Leo are ascunde foarte multe posibilităţi. Cea mai simplă utilizare a sa este introducerea de text. Această posibilitate este ilustrată şi-n Figura 7.1. Putem scrie în panoul de jos şi fişiere întregi. De pildă, pot să scriu conţinutul unui fişier html (o pagină de web). Acest lucru trebuie semnalat în mod adecvat lui Leo. Ce-i drept, de aici începe şi partea mai complicată a lui Leo. Există un limbaj special al marcajelor folosite de către Leo în asemenea fişiere. Pe scurt, Leo poate evidenţia cu ajutorul culorilor sintaxa folosită în panoul de jos. Leo poate salva şi ca fişiere separate textele din panoul de jos. Toc JJ II J I Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

253

Având posibilităţile schiţate mai sus, Leo poate fi şi un manager al proiectelor programatorilor. Toate fişierele unui proiect pot fi gospodărite cu ajutorul Leo.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

Toc

JJ

II

J

I

254

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

255

• Folosirea VimOutliner-ului O altă posibilitate de construire a schemei conceptuale o oferă VimOutliner-ul lui Steve Litt. Pentru a folosi VimOutliner trebuie să aveţi instalat Vim şi să ştiţi să-l folosiţi. VimOutliner este deosebit de util pentru a nota rapid ideile care ne vin. Nivelul la care se plasează ideea respectivă în arborele schemei compoziţionale este determinat foarte uşor prin introducerea de taburi la începutul rândului. VimOutliner se bazează mai ales pe comenzi de la tastatură. În modul comandă al Vim-ului combinaţia « (apăsarea de două ori a tastei pe care este inscripţionat semnul „<“) schimbă „nivelul“ de „desprindere“ al „ramurii“: ea se va desprinde de pe un nivel imediat superior celui avut anterior. Operaţia inversă este » şi ea are un sens evident. Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

256

Dacă sunteţi familiarizate sau familiarizaţi cu outliner-ul din programul Word, atunci puteţi înţelege rapid ideea de outline implementată în VimOutliner. În Figura 7.2 puteţi vedea un fragment al schemei ideilor folosite pentru a construi cartea de faţă. Ca şi-n schema construită cu ajutorul Leo, se poate identifica obiectivul prezentării posibilităţilor de a gestiona informaţia cuprinsă în texte. Se observă desigur că VimOutliner colorează în mod diferit „ramurile“ arborelui. Obiectivele principale sunt colorate în roşu. Subobiectivele obiectivelor principale sunt colorate în albastru. Subobiectivele acestor obiective au culoarea mov. În modul comandă al Vim este posibil să „rulăm“, „facem sul“ (fold ) subramurile unei ramuri. Puneţi cursorul pe ramura ale cărei subramuri vreţi să le rulaţi şi apăsaţi Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

257

(succesiv) tastele zc. Desfăşurarea materialului rulat se face prin apăsarea zo. VimOutliner are o serie de comenzi care se dau după apăsarea de două ori a tastei pe care este inscripţionată virgula. Atenţie însă la faptul că tastele trebuie apăsate rapid. Vim este un editor pentru aşa-numita „metodă oarbă“ de tastare. Dacă staţi să căutaţi tastele după inscripţiile de pe ele, nu se obţin în VimOutliner efectele dorite. Să vedem acum practic ce se poate face cu VimOutliner. Puteţi selecta (cu selecţia vizuală a Vim-ului) ramuri ale arborelui şi apoi să apăsaţi „cb fără pauze. Apar nişte casete ([_]) care pot fi bifate pe măsură ce obiectivele sunt atinse. Bifarea obiectivelor se poate face apăsând „cx în modul comandă. Cursorul trebuie poziţionat pe ramura pe care vrem s-o bifăm. Toc JJ II J I Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

258

Dacă folosim „cp putem create casete urmate de un procent. Procentul se schimbă în funcţie de atingerea obiectivelor subordonate. Sub orice ramură a arborelui schemei compoziţionale putem insera text. Pentru aceasta, pe un rând nou, punem două puncte urmate de un spaţiu. Rândurile care încep cu două puncte urmate de un spaţiu reprezintă un text în care putem detalia observaţiile noastre despre resursele cu care putem atinge obiectivele şi termenele atingerii obiectivelor.

Toc

JJ

II

J

I

Back J Doc Doc I

Section 1: Structurarea arborescentă a informaţiilor

259

Figura 7.2: Schemă compoziţională în VimOutliner JJ II J I Back J Doc Doc I

Toc

Section 2: Prezentarea proiectului

260

2. Prezentarea proiectului Pentru prezentarea proiectelor în faţa unor comisii de evaluare trebuie folosit un sistem de tehnoredactare. Felul în care „arată“ proiectul contează. Sistemul de tehnoredactare ar trebui să fie însă util nu doar pentru a produce tipărituri frumoase, ci şi pentru un management eficient al informaţiei conţinute în proiecte. Structura arborescentă este în continuare importantă, dar aici voi insista mai mult pe modularizarea informaţiei. Sistemul de tehnoredactare pe care-l folosesc în exemplele care urmează este LATEX. Nu este însă necesar să ştiţi LATEX pentru a înţelege exemplul din Figura 7.3. Conţinutul exemplului din Figura 7.3 reprezintă o adaptare a schemei

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Prezentarea proiectului

261

pentru un proiect-ca-propunere din Raman şi Sharma[12, p.462]. Principiul de bază al LATEX este separarea conţinutului de formă. Când utilizăm sistemul de tehnoredactare LATEX ne concentrăm asupra conţinutului. De formă se îngrijeşte sistemul de tehnoredactare. Limbajul LATEX este relativ transparent. Din Figura 7.3 se vede că documentul LATEX are un preambul şi un corp. În preambul putem preciza o serie de informaţii pe care le va folosi ulterior sistemul. De pildă, în comanda \author{} este inserată informaţia referitoare la numele autoarei/autorului. Această informaţie va fi folosită ulterior de către sistem. Practic, efect „pe hârtie“ au doar comenzile din corpul documentului. Acest corp începe cu o comandă care cere sisToc JJ II J I Back J Doc Doc I

Section 2: Prezentarea proiectului

262

temului să producă titlul (folosind informaţiile din preambul cu privire la autoare/autor şi titlu). Apoi sunt incluse două module: o scrisoare şi un proiect de contract. Nu este rău ca propunerea să aibă nu doar un cuprins, ci şi liste cu figuri şi tabele, precum şi un rezumat. Evaluatoarele sau evaluatorii au nevoie de aceste elemente pentru a-şi face rapid o idee despre proiect. Nu trebuie să mizăm niciodată pe faptul că vor sta să extragă cu migală informaţiile relevante din propunerea care le-a fost prezentată. N-au în principiu alocat timp pentru aşa ceva. Ceea ce fac este o evaluare a proiectului, nu o muncă de cercetare. Modulele principale sunt precum capitolele unei cărţi, atâta doar că aici au un conţinut mai strict determinat: trebuie explicată problema pe care-şi propune să o rezolve proiectul, obiectivele care vor fi urmărite pentru a realiza Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Prezentarea proiectului

263

soluţia propusă, metodele tehnice, activităţile manageriale, costurile şi, evident, eficienţa proiectului. LATEX permite modularizarea foarte clară a conţinutului proiectului. În funcţie de necesităţi, putem adăuga, elimina sau permuta module. Comenzile folosite sunt deosebit de simple şi eficiente. După cum se vede şi din Figura 7.3, proiectul include concluzii şi anexe. Anexele pot avea un conţinut divers, în funcţie de proiect. De multe ori sunt însă puse în anexă grafice, diagrame sau tabele. De asemenea, tot din anexele proiectului face parte şi o bibliografie. Bibliografia poate să cuprindă cărţi, studii, rapoarte cu caracter tehnic, studii cu o circulaţie de multe ori foarte restrânsă, dar folosite în alcătuirea proiectului. Rezultatul programului LATEX din Figura 7.3 seamănă, Toc JJ II J I Back J Doc Doc I

Section 2: Prezentarea proiectului

264

din punctul de vedere al tehnoredactării, cu o carte. Ar fi prea multe pagini de inclus aici, aşa că pentru a da o idee asupra a ceea ce produce LATEX am comprimat documentul şi l-am adus la forma unui articol. În Figura 7.5 se văd titlul şi cuprinsul. Se observă şi adaptarea la limba română a tehnoredactării proiectului. Ea se poate face utilizând pachete LATEX speciale, utilizate tot ca nişte module suplimentare, introduse prin comenzi în preambul. Pe a doua pagină a proiectului formatat de către sistemul LATEX putem vedea că modulele principale sunt numerotate. Există pachete speciale LATEX care ne permit să dăm o numerotare aparte anexelor şi, evident, să facem trimiteri la anexe. Aceste trimiteri sunt rezistente, ca să zic aşa, la schimbarea poziţiilor modulelor. Cu alte cuvinte, Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Prezentarea proiectului

265

dacă eliminăm ceva din bibliografie, totul este renumerotat automat şi trimiterile sunt modificate în consecinţă. De asemenea, referirile la paginile din document sau din anexe sau de la un modul la altul rezistă perfect la permutarea, inserarea sau eliminarea modulelor. Comenzile de inserare a modulelelor pot fi date şi-n alte module, nu doar în documentul principal (cel din Figura 7.3). Figura 7.4 ilustrează acest lucru în cazul anexelor. Cum se prezintă conţinutul modulelor? Modulele LATEX care conţin scrisoarea, proiectul de contract, descrierea problemei, anexele ş.a.m.d. sunt fişiere de tip text. Există managere speciale pentru proiecte LATEX, care ne permit să gestionăm eficient aceste fişiere.4 4

Unele informaţii despre asemenea sisteme sunt prezentate pe situl autorului acestei cărţi. Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Prezentarea proiectului

266

La urmă, dar nu în ultimul rând ca importanţă, trebuie menţionată problema transferării line a informaţiilor în procesul de tehnoredactare a propunerii. Trebuie studiat (şi proiectat) cu atenţie modul în care informaţiile se transferă către fişierele LATEX (sau alte fişiere care ar fi folosite). Trebuie evitate operaţiile de retastare a materialului (operaţii care consumă timp şi pot introduce erori în conţinutul materialelor). Trebuie prevăzut de asemenea un interval pentru eliminarea erorilor, inclusiv a celor care ţin de forma finală a documentului. În general procesul de eliminare a erorilor trebuie planificat cu grijă şi nu trebuie să ţină de improvizaţie.5 5

Gândiţi-vă la analogia cu o editură, care n-are doar redactori, tehnoredactori, graficieni etc., ci şi corectori sau corectoare. Munca Toc JJ II J I Back J Doc Doc I

Section 2: Prezentarea proiectului

267

aceasta de eliminare a erorilor, între altele, dă diferenţa dintre o carte redactată doar de autoare sau autor şi una apărută într-o editură. Toc JJ II J I Back J Doc Doc I

Section 2: Prezentarea proiectului

268

Figura 7.3: Un proiect structurat cu ajutorul LATEX Toc JJ II J I Back J Doc Doc I

Section 2: Prezentarea proiectului

269

Figura 7.4: Inserarea modulelor în alte module cu ajutorul LATEX

Toc

JJ

II

J

I

Back J Doc Doc I

Section 2: Prezentarea proiectului

270

Titlul proiectului Autoarea/autorul proiectului 3 decembrie 2005

Scrisoare de prezentare a proiectului • Introducere (cu menµionarea clar  a scopului proiectului) • Conµinutul scrisorii (principalele idei ale proiectului ³i motivele

pe care le-ar avea cele/cei c rora le este adresat proiectul pentru a-l accepta)

• Concluzia scrisorii.

Propunere de contract Cuprins 1

Problema

2

2

Obiective

2

3

Metode tehnice

2

4

Activit µi manageriale

2

5

Costuri (estimare)

2

6

Concluzii

2

Lista gurilor

Figura 7.5: Prima pagină a proiectului formatat de LATEX Toc JJ II J I Back J Doc Doc I

Section 2: Prezentarea proiectului

271

Rezumat Un rezumat care s  permit  evaluatorilor s -³i fac  rapid o idee despre proiect.

1 Problema 2 Obiective 3 Metode tehnice Metode tehnice folosite pentru a atinge obiectivele. Planuri tehnice de acµiune.

4 Activit µi manageriale Descrierea activit µilor manageriale care vor  întreprinse în vederea atingerii obiectivelor. Prezentarea calic rii pe care o are personalul.

5 Costuri (estimare) Estimarea costurilor pe care le implic  atingerea obiectivelor proiectului.

6 Concluzii Anexe Anexe la proiect (grace, tabele, diagrame suplimentare).

Bibliograe [1] Meenakshi Raman ³i Sangeeta Sharma. Technical Communication: Principles and Practice. New Delhi: Oxford University Press, 2004.

Figura 7.6: A doua pagină a proiectului formatat de LATEX Toc JJ II J I Back J Doc Doc I

Bibliografie

272

Bibliografie [1] Peter Drucker. Management: Tasks, Responsabilities, Practices. New York: Harper & Row, 1985. Citată la p. 40. [2] Ben Forta. SQL pentru începători. Bucureşti: Teora, 2002. Citată la pp. 123 şi 126. [3] David D. Friedman. Price Theory. Cincinnati,OH: South–Western, 1990. . Citată la p. 46. [4] LiMin Fu. Neural Networks in Computer Intelligence. New Delhi: Tata McGraw-Hill, 2003. Citată la p. 150.

Toc

JJ

II

J

I

Back J Doc Doc I

Bibliografie

273

[5] Rob Mattison. Understanding Database Management Systems, ediţia a 2-a. New York: McGraw-Hill, 1997. Citată la pp. 46 şi 48. [6] A. I. Mihailov, A. I. Ceornîi şi R. S. Ghilearevski. Informatica documentară. Bucureşti: Editura Ştiinţifică, 1970. Citată la p. 27. [7] C. A. Missimer. Good Arguments. Englewood Cliffs, New Jersey: Prentice Hall, 1995. Citată la pp. 230, 231 şi 235. [8] Chris Newman. SQLite. Indianapolis: Sams, 2005. Citată la p. 124. [9] Lee Anne Phillips. XML. Bucureşti: Teora, 2001. Citată la p. 246. [10] Ellie Quigley. Unix Shells by Example. Upper Saddle River,NJ: Prentice Hall, 2005. Citată la p. 60. Toc JJ II J I Back J Doc Doc I

Bibliografie

274

[11] Ioan Radu, Minodora Ursăcescu şi Florin Ioniţă. Informatică pentru managementul firmei. Bucureşti: Editura „Tribuna Economică“, 2001. Citată la p. 121. [12] Meenakshi Raman şi Sangeeta Sharma. Technical Communication: Principles and Practice. New Delhi: Oxford University Press, 2004. Citată la pp. 214 şi 261. [13] William F. Sharpe. Introduction to Managerial Economics. New York: Columbia University Press, 1973. Citată la p. 46. [14] George Soros. The Alchemy of Finance. New York: Wiley, 1994. Citată la pp. 38, 39 şi 67. [15] Sarah Witzig. Accessing WordNet from Prolog [pe situl Prolog Natural Language Tools la Universitatea din Georgia]. , 2003, data accesării: 2005-10-01. Există Toc JJ II J I Back J Doc Doc I

Bibliografie

275

şi un pachet de programe asociat acestui studiu; pachetul poate fi descărcat de la http://www.ai.uga. edu/mc/ProNTo/Witzig.zip. [Cercetările publicate pe situl ProNTo sunt coordonate de profesorul Michael A. Covington]. Citată la pp. 166 şi 173.

Toc

JJ

II

J

I

Back J Doc Doc I

Indice algoritm, 25, 27, 33 argumente, 232, 234, 235 aspell, 96, 98 awk, 79, 80, 82–85, 87

bibtex, 220–222 etichetă unică, 221 stil, 222

câmpuri, 70, 71, 81, 129, 221 baze de date, 78, 128, 150, cazuri, 19, 26, 48 157, 167, 198, 216, 220, codurile literelor, 75 223, 232 comenzi în linie, 64, 129 276

Indice

277

comunicare, 217 costuri, 46, 50 cunoaştere, 33, 34, 150

GraphViz, 225, 226 grep, 60, 63, 66, 108

graf, 228, 249 muchii, 230 noduri, 229 Toc JJ II

LATEX, 263 Leo, 252

hipernim, 174 date calendaristice, 70 hiponim, 158, 174 definiţii lexicale, 113 dexonline, 113, 116, 118, 122 inferenţe, 152 informaţie, 30, 31, 33, 34, 54, dicţionar bilingv, 110 78, 150, 217, 218 dicţionar invers, 93 comprimarea – , 107 dicţionar ortografic, 101 structuri arborescente, 247 dixit, 113, 122 înregistrare, 83, 129, 221 fişa de lectură, 16 tipuri, 221

J

I

Back J Doc Doc I

Indice

278

logica predicatelor, 150, 166, 170

schema, 264, 265, 267 schema compoziţională, 250, 253, 254, 258, 259, 261 managementul informaţiilor, Prolog, 165–168, 170, 173, 182, 41, 43, 94, 111, 237, 195, 198, 216 246 căutare, 199 manager, 40 fail, 198 memoria implicaţie, 196 limite, 250 programe, 193 meronim, 157 variabile, 183, 208 proiect, 245 eliminarea erorilor, 269 modularizarea, 267, 268 obiectivele, 250 prezentarea, 263 Toc

JJ

II

J

QDBM, 114, 116 reţea semantică, 151, 152, 174 reflexivitate, 39 sens, 155 I Back J Doc Doc I

Indice

279

sort, 68, 69, 73–76 SQL, 123, 124, 128, 137, 167 căutare, 140 căutare condiţionată, 140 ordonare, 143 SQLite, 124, 126 afişare, 146 ajutor, 144 mod html, 147 sqlitebrowser, 127 supravieţuire, 49 SWI-Prolog, 167, 176 comenzi, 177 consult, 178 dialoguri, 182 Toc

JJ

II

J

scop, 183 synset, 172 tabel, 129 tipare de căutare, 56, 80, 168 Vim, 55, 57, 180, 227, 259 VimOutliner, 258 wnconnect, 158, 159 WordNet, 153, 154, 157, 159, 167, 168, 173, 175, 177, 178, 188, 211 XML, 248

I

Back J Doc Doc I

Versiune pentru ecran: 1 februarie 2006. Nu este permisă utilizarea ei decât în scopuri personale!

Related Documents

804
December 2019 48
804-001
October 2019 51
An-804
November 2019 48
Alejandra 804
June 2020 21
804-s
October 2019 45
Stg 804
June 2020 7