Szövegbányászat és dokumentum kezelés 3. Előfeldolgozás, klaszterezés A dokumentumok reprezentálása A dokumentum a szavak együttese A dokumentum rendszerben különböző szavak eltérő súlyúak a téma azonosításában atomreaktor valamint Adott a szó-dokumentum mátrix: K (BOW modellre igazodik) Antony and Cleopatra Julius Caesar The Tempest Hamlet Othello Macbeth Antony 157 73 0 0 0 0 Brutus 4 157 0 1 0 0 Caesar 232 227 0 2 1 1 Calpurnia 0 10 0 0 0 0 Cleopatra 57 0 0 0 0 0 mercy 2 0 3 5 5 1 worser 2 0 1 1 1 0 1
A dokumentumok reprezentálása A szó-dokumentum mátrixból dokumentum reprezentációs vektorok képezhetők A legegyszerűbb eset a bináris reprezentáció: di ( di1,..., dim ) ahol d 1, ha K > 0 = 0 A bináris reprezentáció előnye: - kis költség (gyors, helyigény) - közelítésre alkalmas - a lényeges különbséget meg tudja fogni A dokumentumok reprezentálása A pontosabb mérőszám a súlyozott reprezentáció: di ( di1,..., dim ) d = K Nem pontos a lényegi különbségek kiemelésében túl nagy súly a nagy gyakorisághoz Sokszor a gyűjteménytámogatottságot is szokás vizsgálni: cf i = K j Tompítani kell a nagy értékek szerepét, logaritmikus súlyozás: d 1+ log K ha K > 0 = 0 2
A dokumentumok reprezentálása Az eddigi modellek nem veszik figyelembe a dokumentum hosszát, pedig a df=2 érték szerepe más lesz L=6 vagy L=655 esetében Normalizált súlyozás d 1+ log K = K i 0 ha K > 0 d = tf = K i K Ezt a mérőszámot nevezik szó gyakoriságnak is (frequency) (TF) A szavak fontosságának mérése A szónak a dokumentumbeli fontosságát csak részleges mutatja TF vagy CF. Fontos a szavak eloszlásának ismerete is (minden dokumentumban szerepel vagy csak néhányban) Dokumentum számosság (a befoglaló dokumentumok darabszáma) df i TF IDF mérőszám A fontosság mérése: w = tf n log( df j ) Jól jellemezze az adott szó megkülönböztető szerepét a dokumentumhalmazban 3
A szavak fontosságának mérése A TF-IDF súlyozás előnyei: - magas lesz azon szavaknál amelyek csak néhány dokumentumban fordulnak elő nagy súllyal - kicsi lesz ott az értéke, ahol a tartalmazó dokumentumok darabszáma igen magas - kicsi lesz ott, ahol a szó csak nagyon ritkán fordul elő a dokumentumban Normalizált TF-IDF w = tf n log( df n ( tf i log( df j ) j 2 )) A lényegtelen szavak eliminálása A feladat szempontjából nem releváns szavak elhagyhatók a rendszerből Stopword: az elhagyható szavakat jelenti A stopword lista témától függően változhat: - egzakt keresés : kis lista (kb 100) - tartalom alapú keresés, kivonatolás: nagy lista (kb. 1000) a,able,about,across,after,all,almost,also,am,among,an,and,any,are,as,at, be,because,been,but,by,can,cannot,could,dear,did,do,does,either,else,ever,every, for,from,get,got,had,has,have,he,her,hers,him,his,how,however,i,if,in,into, is,it,its,just, least,let,like, likely,may,me,might,most,must,my,neither,no,nor,not,of,off,often,on, only,or,other,our,own, rather,said,say,says,she,should,since,so,some,than,that,the, their, them,then,there,these,they,this,tis,to,too,twas, us,wants,was,we,were,what, when,where,which,while,who,whom,why, will,with,would,yet,you,your Az angol stopword lista 4
A dokumentum tagolása Az értelmezésnél, a keresésnél lényeges lehet a dokumentum szerkezetének ismerete is - lehet egy megadott részre vonatkoztatni a keresést - lehet az eltérő részeket másképp súlyozni A szerkezet egy hierarchia A szerkezet feltárásának költsége jelentősen függ a formátumtól - LATEX, XML : önleíró szerkezet - PDF: nagyobb munka a darabolás - TXT : tartalom megértés kell hozzá A dokumentum tagolása Igen eltérő dokumentum modellek léteznek 5
A dokumentum tagolása Egyszerűsített szerkezeti hierarchia dokumentum készlet dokumentum metadata törzs bekezdés szekció mondat kifejezés szó A dokumentum tagolása Szekciókra tagolás Szeparátor elemek: - metaadat tagok - formátum jelek - séma Témakör függő algoritmus Mondatokra tagolás Egyszerűbb feladatnak tűnik, de itt is több buktató léphet fel: - a pont mondat közben is megjelenhet (rövidítések) - nagybetű a mondat közben is megjelenhet - az almondatot nem pont határolja - hiányozhatnak a mondathatároló jelek Következő megálló a Margit krt. Moszkva tér felőli oldalén lesz Következő megálló a Margit krt. Moszkva térnél van a végállomás. 6
A dokumentum tagolása Kifejezésekre tagolás Token: egy kifejezés a mondatban Típus: az azonos karaktersorozatot alkotó tokenek csoportja Szeparátor elemek: - szóköz karakterek - mondatvég karakter - soremelés karakter Nehézséget okoznak: - kötőjel (elválasztó jel vagy nem: adatbázis-kezelés) - aposztróf (nemt om) - egyéb írásjelek (W.C.) - többszavas kifejezések A HUNTOKEN projekt A 2000-es évek elején elkészült magyar nyelvre adaptált tokenizáló program Magyar projket (BME), http://mokk.bme.hu/resources/huntoken Unix alapú környezet (v. cygwin) A bemenő txt file-ból xml kimenetet állít elő <s> mondat </s> <w> szo </w> <c> irasjel </c> A Flex és C nyelven implementált A szegedi korpuszt 98% pontossággal tokenizálja 68941 mondatból csak 1071 a hibás 7
A HUNTOKEN projekt A Huntoken program Flex nyelven írt, csőbe (pipe) kötött szűrőprogramokból áll. A csővezetéket a Huntoken parancs indítja el. A cs!be kötött szűrőprogramok: hun_clean hun_sentence hun_abbrev hun_sentclean hun_token hun_head karaktereket törli, illetve átalakító szűrő mondatra bontó szűrő a mondatra bontást javító szűrő mondatra bontás eredményét formázó szűrő szavakra bontó és nyitott tokeneket felismerő szűrő XML fej- és láblécet kiíró héjprogram A HUNTOKEN projekt A HUN_CLEAN szűrő A szűrő normalizálja a bemenő szöveges állományokat a következő műveletek elvégzésével: - ismétlődő szóköz értékű karakterek törlése - ismétlődő üres sorok és közbeékelt szóközök törlése - sor eleji és sor végi szóközök törlése - nem törő szóközök szóközzé alakítása - Windows-1250 karakterek ISO-8859-1-es HTML entitássokká alakítása - decimális karakterkódok esetén az alsó ASCII, és a magyar!, ", #, $ karakterré alakítása < és > átalakítása < és &t;-re (a kés!bbi XML kimenet miatt) -...-tá alakítása - az összes ISO-8859-2-ben szerepl! ISO-8859-1-es entitás karakterré alakítása (például á á) A HUN_SENTENCE szűrő A szűrő <s> nyitó- és </s> zárócímke közé zárja a felismert mondatokat, vagyis elvégzi a mondatra bontást. 8
A HUN_ABBREV szűrő A HUNTOKEN projekt A megadott rövidítések,és más beépített szabályok alapján felülbírálja, és szükség esetén módosítja a Hun_sentence által megállapított mondathatárokat, valamint a Hun_token által megállapított szóhatárokat. A következ! helyeken szünteti meg a mondathatárt: - sorszám és nagy kezdőbetűs szavak között - sorszám és utána zárójeles, római számos dátum esetén - ügyiratszám és az azt követő zárójeles dátum esetén - sorszám és paragrafusjel között - monogramok esetén - A megadott rövidítések esetén. (A stb. nincs megadva.) A HUN_SENTCLEAN szűrő A szűrő paragrafushatárokat illeszt be az üres sorok helyére, illetve minden mondatot külön sorba helyez el. A HUN_TOKEN szűrő A HUNTOKEN projekt A szavakat <w> nyitó- és </w> zárócímke közé helyezi. Az eredeti mondatokat meghagyja a <s> nyitócímkével egy sorban is. Az írásjelek a,,c'' elembe kerülnek. A nyitott tokenosztályba eső tokenek MSD kódja az,,anav'' elembe kerül. A következ! nyitott tokenek felismerésére kerül sor: - m = toldalékmorfémák (-ság, -t!l/-t!l) - e = elektronikus címek, e-mail, webhely, útvonal, fájlkiterjesztés, egyéb - indexek (trade mark, registered trade mark) - számok: (sport)eredmények, el!jeles egész számok, id!pont, dátum, pontot tartalmazó számok, százalékjelet tartalmazó számok, fokjelet tartalmazó számok, arány (SI mértékegységgel), méret jellel, képletek - azonosítók (szabvány jelzete, telefonszám, írásm" része,isbn kód, rendszám - egyéb köt!jellel kezd!d!, vagy végz!d! szavak - számmal és bet"vel jelölt számok 9
Java Tokenizer edu.northwestern.at.utils.swing Class DocumentTokenizer java.lang.object edu.northwestern.at.utils.swing.documenttokenizer implements java.util.iterator Tokenizes document text. A token is defined as text between word separator characters. The separator characters are defined below in the WORD_SEPARATOR_CHARACTERS array. Document document = textpane.getdocument(); DocumentTokenizer tokenizer = new DocumentTokenizer( document, 0 ); while ( tokenizer.hasnext() ) { String word = tokenizer.next(); System.out.println( word + " starts at " + tokenizer.getstartpos() + ", ends at " + tokenizer.getendpos() ); } 10