Ezúttal bemutatásra kerül a logónk elkészítésének módja. A posztban nem a logó megszületésén lesz a hangsúly, hanem igyekszem rámutatni azokra a jellemző problémákra és akadályokra, amelyek szinte minden alkalommal előkerülnek, amikor az ember egy szógyakorisági táblát kíván saját kezűleg előállítani. Hogy ez esetben nem csak táblát, hanem egy ebből készült grafikát is kapunk eredményül, ez csupán a logó, mint cél eredménye. De természetesen mindenki könnyedén előállíthatja a bemutatott minta, a saját szógyakorisági táblája alapján.
A következő címkéjű bejegyzések mutatása: szógyakoriság. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: szógyakoriság. Összes bejegyzés megjelenítése
2010. szeptember 29.
2010. július 23.
Szógyakoriság vizualizáció Many Eyes használatával
Posted by
Zoltan Varju
Legelső szógyakorisági posztomban amúgy ránézésre fedeztük fel egy korpusz tartalmát előre elkészített szógyakorisági táblával. Majd pedig megnéztük hogyan készíthetünk egyszerűen egy gyakorisági táblát, és miképp tehetjük szebbé ábránkat. Ehhez minimális programozásra volt szükség, viszont kaptunk egy szép táblát amiből az IBM Many Eyes rendszerével interaktív vizualizációt készíthetünk könnyen, gyorsan, ingyen.
A program használata annyira egyszerű és magától érthető hogy nem kell magyarázni. Fontos hogy regisztrálnod kell hogy saját adatokat tölthess fel és adataid nyilvánosak lesznek (más is használhatja azokat saját vizualizációhoz) illetve kommentelhetővé válik munkád. Mivel egy kép gyakran többet ér bármennyi szónál, lássuk mit alkottam.
Fontos megjegyezni hogy nem kell feltétlenül gyakoriságitáblát feltöltened, elég egy sima szövegfájl, de szexibb ha van saját tábnlánk.

A program használata annyira egyszerű és magától érthető hogy nem kell magyarázni. Fontos hogy regisztrálnod kell hogy saját adatokat tölthess fel és adataid nyilvánosak lesznek (más is használhatja azokat saját vizualizációhoz) illetve kommentelhetővé válik munkád. Mivel egy kép gyakran többet ér bármennyi szónál, lássuk mit alkottam.
Fontos megjegyezni hogy nem kell feltétlenül gyakoriságitáblát feltöltened, elég egy sima szövegfájl, de szexibb ha van saját tábnlánk.

2010. július 14.
Szógyakoriság ismét (de most saját fájlból, R használatával elemezve)
Posted by
Zoltan Varju
Az előző technikai jellegű posztomban a Magyar Webkorpusz alapján vetettünk egy pillantást a szógyakoriságra. Most egy saját szöveges fájlból készítünk szógyakorisági témát.
Eszközök
Egy szövegfájl Keressünk egy szövegfájlt az OSZK MEK honlapján. Válaszd a html formátumot.
HTML "kitisztító" html2text, ha Ubuntu, vagy Linux alapú oprendszered van akkor a szokásos módon telepítheted. Vagy választhatod a python alatt bármikor bárhol futtatható verziót is. Házi feladat, készíts a html fájlból egy "plain text" fájlt. A program man page-e talán segít.
Egy kész szövegfájl letölthető itt, ha lusta vagy (vagy valamiért nem tudod magad megcsinálni).
R Ha még nincs fent a gépeden, akkor telepítsd fel az R statisztikai programozási nyelvet.
A feladat
Arra vagyunk kíváncsiak hogy egy adott szó hányszor fordul elő a fájlban. Gondolkozz egy kicsit milyen problémákat vet ez fel. Mi az hogy szó? Mi neked egy szó és mi a számítógépnek? Mi nagyon egyszerű definíciót adunk itt, szónak egy olyan karaktersort tekintünk amit két nem-karakter között összefüggően fordul elő. Jó mi? (Kicsit gondolkozz el azon hogy ez mennyire jó meghatározás, hogyan kellene finomítani hogy megfeleljen a szó intuitív fogalmának) Elgondolkodtál? Akkor egy kicsit még maradjunk a témánál. Nyilván így egy halandzsa, vagy félreütött karaktersor is szó (pl asAnza), felmerül a kérdés hogy a "tó" "tavak" egy vagy két szó-e (nálunk kettő, mivel technikailag nagyon nehéz lenne morfológiailag elemezni). Mi van a mondat elején nagybetűvel kezdett "Asztal" és a csupa kisbetűs "asztal" esetében? Ezt könnyű megoldani, nem okoz gondot átalakítani a karaktereket. Nyilván figyelembe kell venni ezeket a kérdéseket. De ha eltekintünk ezektől, attól még egy becslést tehetünk.
Vágjunk bele!
Indítsd el az R-t abban a könyvtárban ahol a szövegfájlod található. Először olvassuk be a fájlt hogy tudjunk vele dolgozni.
> textfile<-scan(file.choose(), what="char", sep="\n", quote="", comment.char="")
Figyelem! Mac és Windows használók a file.choose() függvényt cseréljék ki choose,files() -ra.
Alakítsuk át a fájlt csupa kisbetűs karakterek sorává. (Ugye mondtam hogy egyszerű lesz, "Asztal"-ból, "asztal" lesz így)
> textfile<-tolower(textfile)
Abban maradtunk hogy "szónak egy olyan karaktersort tekintünk amit két nem-karakter között összefüggően fordul elő" . Ez R-ben:
> words.list<-strsplit(textfile, "\\W+")
Fent semmi mást nem tettünk mint a fájl tartalmát "feldaraboltuk" a "nem szó-karakterek" mentén. Ezt a \W+ reguláris kifejezéssel értük el (szabályos kifejezéseknek is hívják őket, ha angolul keresed regular expressions).
Egy kicsit bonyolítsuk a dolgot. Tudjuk az előző posztból hogy bizonyos szavak nagyon gyakoriak. Ezeket gyakran töltelékszavaknak hívjuk, vagy angolos szakzsargonnal stop words. Ha kiszűrjük ezeket a szavakat, akkor egy kicsit jobb képet kaphatunk hogy a normális szavak milyen gyakoriak (kontentívumok maradnak, mivel a legtöbb töltelékszó funktor). Tegyük ezt akkor! Először is egy listát készítünk ezekről a faramuci szavakról:
> stop.list<-c("a", "egy", "be", "ki", "le", "fel", "meg", "el", "át", "rá", "ide", "oda", "szét", "össze", "vissza", "de", "hát", "és", "vagy", "hogy", "van", "lesz", "volt", "csak", "nem", "igen", "mint", "én", "te", "ő", "mi", "ti", "ők", "ön", "ez", "az", "ha")
Alakítsuk egy kicsit át a beolvasott szövegfájlt:
> words.vector.h<-unlist(words.list)
Most már egy adat típusba tartozik a beolvasott szöveg és a töltelékszavak listája is, ki is szűrhetjük őket.
> words.vector<-words.vector.h[!(words.vector.h %in% stop.list)]
A következő lépésekben pedig elmentjük a gyakorisági táblázatot egy kimeneti fájlba.
> freq.list<-table(words.vector)
> sorted.freq.list<-sort(freq.list, decreasing=T)
> sorted.freq.list<-sorted.freq.list[sorted.freq.list>1]
> sorted.table<-paste(names(sorted.freq.list), sorted.freq.list, sep="\t")
> cat("WORD\tFREQ", sorted.table, file=file.choose(), sep="\n")
Bónusz gnuplot bütykölés
A gyakorisági adatokat csökkenő sorrendbe tettük és a csak egyszer előforduló elemeket is kiszűrtük (hogy nagyon okos legyél olvasd el mi az a hapax legomenon, na azé' szűrjük ki!). Most hogy elmentettük, gnuplot-tal az előző posztomban leírtak szerint készíthetsz egy szép ábrát hogy lásd arányaiban hányszor fordul elő egy-egy elem. Az enyém így néz ki.

Ha összeveted az előző ábrával láthatod hogy nincsenek kiugró vonalak (hapax legomena!). Nem is kezd olyan magas értéknél, de hát kisebb is a mintánk. A lényeg hogy szebb (lehet hogy csak nekem).
Ha érdekel akkor ezt olvasd
A poszt megírásához Stefan Th. Gries Quantitative Corpus Linguistics with R könyve adott inspirációt, a kódrészleteket pedig minimális változtatással vettem át.

Eszközök
Egy szövegfájl Keressünk egy szövegfájlt az OSZK MEK honlapján. Válaszd a html formátumot.
HTML "kitisztító" html2text, ha Ubuntu, vagy Linux alapú oprendszered van akkor a szokásos módon telepítheted. Vagy választhatod a python alatt bármikor bárhol futtatható verziót is. Házi feladat, készíts a html fájlból egy "plain text" fájlt. A program man page-e talán segít.
Egy kész szövegfájl letölthető itt, ha lusta vagy (vagy valamiért nem tudod magad megcsinálni).
R Ha még nincs fent a gépeden, akkor telepítsd fel az R statisztikai programozási nyelvet.
A feladat
Arra vagyunk kíváncsiak hogy egy adott szó hányszor fordul elő a fájlban. Gondolkozz egy kicsit milyen problémákat vet ez fel. Mi az hogy szó? Mi neked egy szó és mi a számítógépnek? Mi nagyon egyszerű definíciót adunk itt, szónak egy olyan karaktersort tekintünk amit két nem-karakter között összefüggően fordul elő. Jó mi? (Kicsit gondolkozz el azon hogy ez mennyire jó meghatározás, hogyan kellene finomítani hogy megfeleljen a szó intuitív fogalmának) Elgondolkodtál? Akkor egy kicsit még maradjunk a témánál. Nyilván így egy halandzsa, vagy félreütött karaktersor is szó (pl asAnza), felmerül a kérdés hogy a "tó" "tavak" egy vagy két szó-e (nálunk kettő, mivel technikailag nagyon nehéz lenne morfológiailag elemezni). Mi van a mondat elején nagybetűvel kezdett "Asztal" és a csupa kisbetűs "asztal" esetében? Ezt könnyű megoldani, nem okoz gondot átalakítani a karaktereket. Nyilván figyelembe kell venni ezeket a kérdéseket. De ha eltekintünk ezektől, attól még egy becslést tehetünk.
Vágjunk bele!
Indítsd el az R-t abban a könyvtárban ahol a szövegfájlod található. Először olvassuk be a fájlt hogy tudjunk vele dolgozni.
> textfile<-scan(file.choose(), what="char", sep="\n", quote="", comment.char="")
Figyelem! Mac és Windows használók a file.choose() függvényt cseréljék ki choose,files() -ra.
Alakítsuk át a fájlt csupa kisbetűs karakterek sorává. (Ugye mondtam hogy egyszerű lesz, "Asztal"-ból, "asztal" lesz így)
> textfile<-tolower(textfile)
Abban maradtunk hogy "szónak egy olyan karaktersort tekintünk amit két nem-karakter között összefüggően fordul elő" . Ez R-ben:
> words.list<-strsplit(textfile, "\\W+")
Fent semmi mást nem tettünk mint a fájl tartalmát "feldaraboltuk" a "nem szó-karakterek" mentén. Ezt a \W+ reguláris kifejezéssel értük el (szabályos kifejezéseknek is hívják őket, ha angolul keresed regular expressions).
Egy kicsit bonyolítsuk a dolgot. Tudjuk az előző posztból hogy bizonyos szavak nagyon gyakoriak. Ezeket gyakran töltelékszavaknak hívjuk, vagy angolos szakzsargonnal stop words. Ha kiszűrjük ezeket a szavakat, akkor egy kicsit jobb képet kaphatunk hogy a normális szavak milyen gyakoriak (kontentívumok maradnak, mivel a legtöbb töltelékszó funktor). Tegyük ezt akkor! Először is egy listát készítünk ezekről a faramuci szavakról:
> stop.list<-c("a", "egy", "be", "ki", "le", "fel", "meg", "el", "át", "rá", "ide", "oda", "szét", "össze", "vissza", "de", "hát", "és", "vagy", "hogy", "van", "lesz", "volt", "csak", "nem", "igen", "mint", "én", "te", "ő", "mi", "ti", "ők", "ön", "ez", "az", "ha")
Alakítsuk egy kicsit át a beolvasott szövegfájlt:
> words.vector.h<-unlist(words.list)
Most már egy adat típusba tartozik a beolvasott szöveg és a töltelékszavak listája is, ki is szűrhetjük őket.
> words.vector<-words.vector.h[!(words.vector.h %in% stop.list)]
A következő lépésekben pedig elmentjük a gyakorisági táblázatot egy kimeneti fájlba.
> freq.list<-table(words.vector)
> sorted.freq.list<-sort(freq.list, decreasing=T)
> sorted.freq.list<-sorted.freq.list[sorted.freq.list>1]
> sorted.table<-paste(names(sorted.freq.list), sorted.freq.list, sep="\t")
> cat("WORD\tFREQ", sorted.table, file=file.choose(), sep="\n")
Bónusz gnuplot bütykölés
A gyakorisági adatokat csökkenő sorrendbe tettük és a csak egyszer előforduló elemeket is kiszűrtük (hogy nagyon okos legyél olvasd el mi az a hapax legomenon, na azé' szűrjük ki!). Most hogy elmentettük, gnuplot-tal az előző posztomban leírtak szerint készíthetsz egy szép ábrát hogy lásd arányaiban hányszor fordul elő egy-egy elem. Az enyém így néz ki.

Ha összeveted az előző ábrával láthatod hogy nincsenek kiugró vonalak (hapax legomena!). Nem is kezd olyan magas értéknél, de hát kisebb is a mintánk. A lényeg hogy szebb (lehet hogy csak nekem).
Ha érdekel akkor ezt olvasd
A poszt megírásához Stefan Th. Gries Quantitative Corpus Linguistics with R könyve adott inspirációt, a kódrészleteket pedig minimális változtatással vettem át.

Feliratkozás:
Bejegyzések (Atom)