Doktori értekezéssel kapcsolatos kapcsolatos segédanyagok, kódrészletek, vizualizációk
Készítette: Knap Árpád Vilmos
Eötvös Loránd Tudományegyetem, Társadalomtudományi Kar, Szociológia Doktori Iskola, Interdiszciplináris Társadalomkutatások Doktori Program
ELTE Research Center for Computation Social Science (ELTE RC2S2)
Konzulens: Dr. Barna Ildikó (PhD), habilitált egyetemi docens
Ebben a repozitóriumban található kódok eredetileg Python 3.6-ban kerültek megírásra, azonban Python 3.10 alatt is megfelelően futnak.
A projekthez szükséges csomagokat a pip install -r requirements.txt
paranccsal lehet telepíteni. Virtuális környezet használata ajánlott.
Néhány előfeldolgozási feladathoz külső szoftverek szükségesek, amelyeket legegyszerűbben Docker konténerekben lehet telepíteni. Ezek a követelmények kommentekben olvashatók.
A repozitóriumban található kódok egy közös input/output formátumot használnak. Ez a formátum egy egyszerű dictionary, ahol a kulcsok a fájlnevek (ezek egyedi azonosítók is egyben), az értékek pedig a szövegek.
Az adatok beolvasásához és elmentéséhez szükséges függvények az src/common_functions.py
fájlban találhatók. Ezek jelenleg az alábbiak:
load_folder_to_dict()
: beolvassa egy txt fájlokat tartalmazó mappa tartalmát egy dictionary-besave_dict_to_txts()
: elmenti egy dictionary tartalmát egy mappába, egyszerű txt fájlokbadump_corpus_to_csv()
: elmenti egy dictionary tartalmát egy CSV fájlba, amely csak a szövegeket tartalmazza (ez például szóbeágyazási modellek inputjaként használható)
Néhány mintakód az adatok beolvasásához, mentéséhez és konvertálásához az src/files_load_save_example.py
fájlban található.
Szövegfájlok használata kisebb méretű korpuszokhoz ajánlott, amelyek maximum néhány ezer darab dokumentumot tartalmaznak. Nagyobb korpuszokhoz CSV fájlok vagy SQL adatbázis használata ajánlott, mivel több tíz- vagy százezer darab apró fájl beolvasása időigényes lehet.
A projektben található szövegfájlok esetében a fájlnevek egyben egyedi azonosítók, a fájl tartalma pedig a szöveg. A fájlban található szöveg "státuszát" a szülő könyvtár neve határozza meg, például:
data/raw/articles
: nyers, feldolgozatlan cikkek szövegét tartalmazza.data/interim/articles_lemmatized
: lemmatizált cikkeket tartalmaz.data/interim/articles_lemmatized_ner
: lemmatizált cikkeket tartalmaz, amelyekre lefutott a névelemek standardizálását végző kód. A fent vázolt struktúra segítségével könnyen visszatérhetünk a korpusz valamelyik előző verziójára anélkül, hogy újra kellene futtatni bármelyik korábbi előfeldolgozási lépést.
Az egyszerű txt fájlok beolvasásához és elmentéséhez található függvények az src/common_functions.py
fájlban találhatók.
Táblázatos adatformátumok beolvasásához a Pandas csomag ajánlott. Pandas DataFrame-ből egyszerű id: text
formátumú dictionary készíthető (df.to_dict(orient = 'index')
), amely használható a repozitóriumban található kódokkal.
A repozitóriumban található mappastruktúra részben a Cookiecutter Data Science ajánlását követi.
data/common
: segédfájlok, pl. stopszó listák tárolásáradata/common/sample_hu_12
: 12 nyers magyar nyelvű újságcikk, a kódok teszteléséhezsrc/preprocess/hu
: specifikusan magyar nyelvre, előfeldolgozáshoz használható programkódoksrc/preprocess
: nem nyelvspecifikus, előfeldolgozáshoz használható programkódok
A következő részben egy általános ajánlás olvasható a különböző előfeldolgozási lépések sorrendjéről. Az előfeldolgozással kapcsolatban további információk találhatók a disszertáció I.3.3 fejezetében.
Az előfeldolgozási lépések sorrendjét bizonyos projektspecifikus igények bármikor felülírhatják.
- Az ékezetes karakterek arányának kiszámítása (
detect_accented_chars_ratio.py
). Ez elsősorban rossz helyesírással, ékezetek nélkül írt szövegek (pl. kommentek) kiszűrésére használható. - URL-ek, email címek eltávolítása (
urlextract.py
). - Speciális karakterek eltávolítása (lásd a
remove_special()
függvényt alemmatize_hunlp.py
fájlban). Ez elsősorban a HuNLP csomaggal történő lemmatizálás esetében releváns, az Emagyar (emtsv) és a HuSpacy esetében nem szükséges. - Tokenizálás, lemmatizálás, szófaji szűrések, a szöveg kisbetűsítése, írásjelek eltávolítása (
lemmatize_huspacy.py
vagylemmatize_emtsv.py
vagylemmatize_hunlp.py
). - Névelemfelismerés és standardizálás (
ner.py
). - Trigramok összevonása.
- Bigramok összevonása.
- A szövegek további standardizálásához manuálisan összeállított listák segítségével bizonyos szavak, kifejezések cseréje.
- Stopszavak eltávolítása (
stopwords.py
). - Gyakoriság szerinti szűrés.
Az alábbiakban a doktori értekezésben használt modellek egy részének előállításához használt kódok és kódrészletek találhatók.
optimal_topic_number.py
: LDA topikmodellek futtatása több topikszámra, koherenciamutatók kiszámítása, PyLDAVis vizualizációk előállítása, dokumentum-topik Excel fájlok mentése, readme fájl mentése. A kód a Gensim LDA Multicore implementációját alkalmazza.glove_phd_stability.R
: GloVe szóbeágyazási modellek előállítása különböző paraméterekkel, a vektorterek stabilitásának vizsgálatához kontextusszavak segítségével.glove_phd_analysis.R
: GloVe szóbeágyazási vektorterekben lévő koszinusztávolságok vizsgálata bizonyos szavak között.
A repozitóriumban található kódok szabadon felhasználhatók. A kódok alkalmazásának feltétele a kapcsolódó disszertáció hivatkozása:
Knap Árpád (2024). Természetesnyelv-feldolgozási modellek társadalomtudományos alkalmazásai és interpretációja. Doktori értekezés, ELTE Szociológia Doktori Iskola.