{"id":65,"date":"2024-04-04T00:12:05","date_gmt":"2024-04-03T21:12:05","guid":{"rendered":"https:\/\/sisu.ut.ee\/samm\/meelestatuse-analuus\/"},"modified":"2025-09-18T16:47:04","modified_gmt":"2025-09-18T13:47:04","slug":"meelestatuse-analuus","status":"publish","type":"page","link":"https:\/\/sisu.ut.ee\/samm\/meelestatuse-analuus\/","title":{"rendered":"Meelestatuse anal\u00fc\u00fcs"},"content":{"rendered":"<p class=\"has-text-align-right MsoNoSpacing\"><strong>Martin M\u00f6lder<br>2020<\/strong><\/p>\n\n\n\n<p class=\"MsoNoSpacing\"><i>J\u00e4rgnev \u00fclevaade eeldab algteadmisi R-st ja on ennek\u00f5ike praktilise suunitlusega: r\u00f5hk on sellel, kuidas on v\u00f5imalik teha lihtsat meelestatuse anal\u00fc\u00fcsi R-s. <\/i><\/p>\n\n\n\n<p class=\"MsoNoSpacing\">Meelestatuse anal\u00fc\u00fcs ehk inglise keeles <i>sentiment analysis <\/i>(eesti keelde v\u00f5iks selle t\u00f5lkida ka kui tundmusanal\u00fc\u00fcs) on meetod, mis v\u00f5imaldab hinnata, kas teksti s\u00f5navara on valdavalt positiivne v\u00f5i negatiivne. Kuigi kaasaegsed masin\u00f5ppe ja kvantitatiivse tekstianal\u00fc\u00fcsi meetodid v\u00f5ivad meelestatuse anal\u00fc\u00fcsi ka \u00fcpriski keeruliseks teha, on ta oma k\u00f5ige lihtsamal kujul \u00fcks kergemini m\u00f5istetavamaid ja rakendatavaid kvantitatiivse tekstianal\u00fc\u00fcsi meetodeid.<\/p>\n\n\n\n<p class=\"MsoNoSpacing\">Meelestatuse anal\u00fc\u00fcs on \u00fcks lihtsamaid anal\u00fc\u00fcse, kuna see kujutab endast tekstis esinevate positiivsete v\u00f5i negatiivsete s\u00f5nade kokku lugemist. Mida rohkem on \u00fches dokumendis positiivseid s\u00f5nu, seda rohkem on see dokument emotsionaalselt ehk oma meelestatuse poolest positiivne ja vastupidi \u2013 mida enam dokument sisaldab negatiivseid s\u00f5nu, seda enam on see oma meelestatuse poolest negatiivne.<\/p>\n\n\n\n<p><\/p><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69de5cf39a6d7-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69de5cf39a6d7-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69de5cf39a6d7-collapse\">Positiivsete ja negatiivsete s\u00f5nade eristamine<\/button>\n        <\/h2>\n        <div id=\"accordion-69de5cf39a6d7-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69de5cf39a6d7-heading\">\n            <div class=\"accordion-body\">\n\n\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Taolise meetodi rakendamine eeldab, et esmalt on \u00e4ra m\u00e4\u00e4ratletud, millised s\u00f5nad v\u00e4ljendavad positiivseid ja millised s\u00f5nad negatiivseid emotsioone. See v\u00f5ib olla \u00fcpriski keeruline \u00fclesanne. \u00d5nneks on see aga midagi, mida selle meetodi kasutaja ei pea ise tegema. See t\u00f6\u00f6 on juba tehtud. Keeleuurijad on koostanud vastavaid s\u00f5naraamatuid\/leksikone (<i>dictionary<\/i>), mis kujutavad endast loetelusid s\u00f5nadest, mis on seotud kas positiivsete, negatiivsete v\u00f5i muude emotsioonidega.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">N\u00e4iteks on eesti keele kohta taolisel otstarbel kasutatav s\u00f5naraamat allalaetav <a href=\"http:\/\/peeter.eki.ee:5000\/Valentsisonastik_Eesti%20Keele%20Instituut%202014.xlsx\">siit<\/a>.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">N\u00e4iteks s\u00f5nad nagu \u201e\u00f5nn\u201c v\u00f5i \u201earmastus\u201c v\u00e4ljendavad \u00fcpriski \u00fcheselt m\u00f5istetavalt positiivseid emotsioone ning s\u00f5nad nagu \u201ekurb\u201c v\u00f5i \u201esurm\u201c v\u00e4ljendavad \u00fcldiselt negatiivseid emotsioone. Meelestatuse anal\u00fc\u00fcs loeb eelnevalt m\u00e4\u00e4ratletud meelestatuse s\u00f5naraamatuid kasutades kokku, kui palju on \u00fches tekstis positiivseid v\u00f5i negatiivseid s\u00f5nu. Osade s\u00f5nade emotsionaalne alatoon v\u00f5ib aga s\u00f5ltuda kontekstist ning grammatilistest struktuuridest (n\u00e4iteks eitus) ning sellistel juhtudel v\u00f5ib k\u00f5ige lihtsam s\u00f5naraamatup\u00f5hine meetod natuke h\u00e4tta sattuda.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Positiivsete ja negatiivsete s\u00f5nade arvu p\u00f5hjal on v\u00f5imalik m\u00e4\u00e4ratleda anal\u00fc\u00fcsitavate tekstide erinevaid aspekte. Esmalt on v\u00f5imalik uurida, kui suur osa dokumendis leiduvatest s\u00f5nadest on \u00fcle\u00fcldiselt emotsioonidega seotud, \u00fcksk\u00f5ik kas siis positiivsete v\u00f5i negatiivsetega. Loomulikult on v\u00f5imalik m\u00e4\u00e4ratleda, kui suur osa neist s\u00f5nadest on kas positiivse v\u00f5i negatiivse t\u00e4hendusega. Niimoodi on v\u00e4ga lihtsal ja esmasel viisil v\u00f5imalik m\u00f5\u00f5ta tekstide emotsionaalsust ning emotsionaalset alatooni v\u00f5i teisis\u00f5nu polaarsust. Need on \u00fche teksti kaks erinevat aspekti. Tekstis v\u00f5ib olla v\u00e4ga v\u00e4he s\u00f5nu, mis viitavad emotsioonidele, kuid nendest v\u00e4hestest v\u00f5ivad k\u00f5ik viidata kas positiivsetele v\u00f5i negatiivsetele emotsioonidele. Seega peab m\u00f5lemat aspekti eraldi arvesse v\u00f5tma.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">K\u00f5ige lihtsamal juhul koosneb teksti emotsionaalsus \u00fcksnes positiivsetest v\u00f5i negatiivsetest emotsioonidest, kuid m\u00f5ned emotsioonide v\u00f5i meelestatuse s\u00f5naraamatud (eriti inglise keele kohta koostatud) pakuvad ka palju t\u00e4psemaid liigitusi, mis eristavad selliseid emotsioone nagu viha, r\u00f5\u00f5m v\u00f5i kurbus.<\/p>\n<p><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div>\n<p><\/p><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69de5cf39a6e1-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69de5cf39a6e1-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69de5cf39a6e1-collapse\">Anal\u00fc\u00fcsitava teksti formaat<\/button>\n        <\/h2>\n        <div id=\"accordion-69de5cf39a6e1-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69de5cf39a6e1-heading\">\n            <div class=\"accordion-body\">\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Kuigi paljud lihtsamad kvantitatiivse tekstianal\u00fc\u00fcsi meetodid eeldavad, et tekstid oleksid dokument-termin maatriksi kujul, siis meelestatuse anal\u00fc\u00fcsi jaoks pole see ilmtingimata vajalik. Pea meeles, et selle anal\u00fc\u00fcsi k\u00f5ige lihtsama vormi p\u00f5himehhanism on lihtsalt dokumentides esinevate s\u00f5nade kokku lugemine ja kategoriseerimine. Seda on v\u00f5imalik teostada erinevate andmeformaatidega.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">N\u00e4iteks v\u00f5ivad anal\u00fc\u00fcsitavad dokumendid olla R-is salvestatud nimekirjana (<i>list<\/i>), kus iga nimekirja element on \u00fchte teksti sisaldav tekstiline vektor ning iga element selles vektoris on s\u00f5na \u00fches dokumendis. Sellisel juhul peaks anal\u00fc\u00fcsima igat elementi selles nimekirjas, mis sisaldab \u00fche dokumendi k\u00f5iki s\u00f5nu, ning kokku lugema kas siis positiivsed v\u00f5i negatiivsed s\u00f5nad, mis seal esinevad.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Anal\u00fc\u00fcsitavad dokumendid ja nendes sisalduvad s\u00f5nad v\u00f5ivad esineda ka dokument-termin maatriksi kujul. Dokument-termin maatriks on andmetabel, mis sisaldab endas informatsiooni k\u00f5ikide dokumentide s\u00f5navara kohta. Selles andmetabelis on iga rida \u00fcks dokument ja iga tulp vastab \u00fchele s\u00f5nale k\u00f5ikide anal\u00fc\u00fcsitavate dokumentide kogus\u00f5navaras. Seega n\u00e4itavad andmetabelis kujutatud arvud, kui palju iga s\u00f5na k\u00f5ikide dokumentide kogus\u00f5navarst igas dokumendis esines. Taolise andmeformaadi korral peaks meelestatuse anal\u00fc\u00fcsi l\u00e4bi viima m\u00f5nev\u00f5rra erinevalt. Sellisel juhul oleks vaja kindlaks teha, millistes tulpades esinevad s\u00f5nad vastavad millistele emotsioonidele. Seej\u00e4rel peaks v\u00f5tma iga rea selles maatriksis ning kokku liitma positiivsete ja negatiivsete emotsioonidega seotud s\u00f5nade esinemissagedused.<\/p>\n<p><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div>\n<p><\/p><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69de5cf39a6e5-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69de5cf39a6e5-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69de5cf39a6e5-collapse\">Meelestatuse anal\u00fc\u00fcsi paketid<\/button>\n        <\/h2>\n        <div id=\"accordion-69de5cf39a6e5-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69de5cf39a6e5-heading\">\n            <div class=\"accordion-body\">\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">R-is on v\u00f5imalik meelestatuse anal\u00fc\u00fcsi teostada mitme erineva paketi kaudu ning siin on keskendutud neist \u00fchele \u2013 <i>quanteda<\/i> (l\u00fchend s\u00f5nadest <i>quantitative analysis of textual data<\/i>). See on \u00fcks v\u00e4hestest pakettidest R-is, mis pakub suhteliselt lihtsa, kuid samas mitmekesise t\u00f6\u00f6riistakasti tekstiliste andmete anal\u00fc\u00fcsiks ning on h\u00e4sti integreeritud teiste tekstianal\u00fc\u00fcsi t\u00f6\u00f6riistadega, mis sisalduvad teistes enam levinud pakettides.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\"><i>Quanteda<\/i> v\u00f5imaldab ka lihtsalt teostada tekstianal\u00fc\u00fcsiks vajalikud eelsammud (tekstide puhastamine ja ette valmistamine), nagu n\u00e4itaks kirjavahem\u00e4rkide ja numbrite eemaldamine, suurte t\u00e4htede muutmine v\u00e4ikesteks t\u00e4htedeks ning stopp-s\u00f5nade eemaldamine. Vaikimisi on see m\u00f5eldud ingliskeelsete tekstide anal\u00fc\u00fcsiks, kuid ta v\u00f5imaldab teha anal\u00fc\u00fcse ka teistes keeltes.<\/p>\n<p><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div>\n<p><\/p><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69de5cf39a6ec-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69de5cf39a6ec-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69de5cf39a6ec-collapse\">Teksti ette valmistamine anal\u00fc\u00fcsiks<\/button>\n        <\/h2>\n        <div id=\"accordion-69de5cf39a6ec-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69de5cf39a6ec-heading\">\n            <div class=\"accordion-body\">\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Oletame, et anal\u00fc\u00fcsi alguses on R-s k\u00f5ik anal\u00fc\u00fcsitavad dokumendid elemendid tekstilises vektoris. K\u00f5ik s\u00f5nad ja k\u00f5ik laused \u2013 kogu tekst tervikuna \u2013 on \u00fches \u201et\u00fckis\u201c. See on tavap\u00e4rane olukord juhul, kui oled anal\u00fc\u00fcsitavad tekstid oma arvutist R-i sisse laadinud v\u00f5i kui oled need tekstid kusagilt Internetist kokku kogunud. Need suured kogu teksti sisaldavad t\u00fckid tuleks osadeks teha, puhastada ja korrastada enne, kui neid on v\u00f5imalik anal\u00fc\u00fcsida.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Kui alustada tekstilise vektoriga, kus iga element on terve tekst, siis on v\u00f5imalik <i>quanteda<\/i> paketist kasutada funktsiooni <span lang=\"ET\">tokens()<\/span>, et teostada mitmed vajalikud teksti puhastamise sammud. S\u00f5na <i>tokens<\/i> viitab siin teksti baas\u00fchikutele, mis enamasti on lihtsalt s\u00f5nad. Kui seda funktsiooni kasutada ilma t\u00e4iendavate argumentideta, siis ta eraldab \u00fcksteisest teksti k\u00f5ik elemendid (s\u00f5nad) ning annab v\u00e4ljundiks objekti, mis on sisuliselt nimekiri (<i>list<\/i>), kus iga nimekirja element on \u00fche dokumendi s\u00f5nade vektor.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">N\u00fc\u00fcd on suured teksti \u201et\u00fckid\u201c jagatud v\u00e4iksemateks elementideks, s\u00f5nade vektoriteks. Need s\u00f5nade vektorid sisaldavad ka kirjavahem\u00e4rke ja numbreid, mida on samuti v\u00f5imalik eemaldada funktsiooniga <span lang=\"ET\">tokens()<\/span>. Selleks tuleb funktsiooni argumentidele <span lang=\"ET\">remove_numbers<\/span> ja <span lang=\"ET\">remove_punct<\/span> anda v\u00e4\u00e4rtus <span lang=\"ET\">TRUE<\/span>. Seega n\u00e4eks see funktsioon v\u00e4lja selline:<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: center;\" align=\"center\"><span lang=\"ET\">tokens(my_data, remove_numbers = TRUE, remove_punct = TRUE)<\/span> ,<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">kus <span lang=\"ET\">my_data<\/span> on see objekt, mis sisaldab neid tekste, mida soovitakse anal\u00fc\u00fcsida.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Stopp-s\u00f5nad on sellised s\u00f5nad, mis ei sisalda t\u00e4henduslikku sisu (n\u00e4iteks sides\u00f5nad) ning seet\u00f5ttu on nad m\u00f5istlik ja v\u00f5imalik paljudest anal\u00fc\u00fcsidest v\u00e4lja j\u00e4tta. Stopp-s\u00f5nade eemaldamiseks on v\u00f5imalik kasutada funktsiooni <span lang=\"ET\">tokens_remove()<\/span>. Esimese argumendina sellele funktsioonile tuleb anda objekt, mis sisaldab anal\u00fc\u00fcsitavaid tekstielemente (<i>token<\/i>). Argumendiga <span lang=\"ET\">pattern<\/span> tuleb funktsioonile anda stopp-s\u00f5nade nimekiri. Inglise keeles sisalduvaid stopp-s\u00f5nu on R-i v\u00f5imalik laadida funktsiooniga <span lang=\"ET\">stopwords(\u201cen\u201d)<\/span>, mis annab v\u00e4ljundiks stopps\u00f5nade nimekirja. Seega n\u00e4eks funktsioon <span lang=\"ET\">tokens_remove()<\/span> v\u00e4lja selline:<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: center;\" align=\"center\"><span lang=\"ET\">tokens_remove(my_tokens, pattern = stopwords(\u201een\u201c))<\/span> ,<\/p>\n<p class=\"MsoNoSpacing\">kus <span lang=\"ET\">my_tokens<\/span> on see objekt, mis loodi eelneva k\u00e4suga <span lang=\"ET\">tokens()<\/span>.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Kui seda funktsiooni rakendada, siis annab see v\u00e4ljundiks samad tekstide s\u00f5nade vektorid, kuid ilma stopp-s\u00f5nadeta.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Eesti keele stopps\u00f5nade loend on v\u00f5imalik leida <a href=\"https:\/\/datadoi.ee\/handle\/33\/78\">siit<\/a>.<\/p>\n<p><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div>\n<p><\/p><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69de5cf39a6f9-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69de5cf39a6f9-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69de5cf39a6f9-collapse\">Lihtsama meelestatuse anal\u00fc\u00fcsi teostamine<\/button>\n        <\/h2>\n        <div id=\"accordion-69de5cf39a6f9-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69de5cf39a6f9-heading\">\n            <div class=\"accordion-body\">\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">N\u00fc\u00fcd on tekstid valmis k\u00f5ige lihtsama meelestatuse anal\u00fc\u00fcsi teostamiseks, et emotsioonidega seotud s\u00f5nad kokku lugeda. Selleks on vaja vastavat s\u00f5naraamatut, mis \u00fctleb, millised s\u00f5nad on seotud positiivsete ja millised negatiivsete emotsioonidega.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Kui tegeleda ingliskeelsete tekstidega, siis sisaldab <i>quanteda<\/i> s\u00f5naraamatut nimega <i>Lexicoder sentiment dictionary<\/i>. Selles on 4 klassifikatsiooni: positiivsed ja negatiivsed s\u00f5nad, aga ka positiivsete s\u00f5nade eitused ja negatiivsete s\u00f5nade eitused. Lihtsa anal\u00fc\u00fcsi puhul v\u00f5ib esmalt kokku lugeda \u00fcksnes positiivsete ja negatiivsete s\u00f5nade esinemissagedused ning j\u00e4tta nende eitused esialgu m\u00e4ngust v\u00e4lja.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Kuidas neid positiivseid ja negatiivseid s\u00f5nu kokku lugeda? <i>Quanteda<\/i> paketis on seda v\u00f5imalik teha funktsiooniga <span lang=\"ET\">tokens_lookup()<\/span>. Esimese argumendina tuleb talle anda objekt, mis sisaldab anal\u00fc\u00fcsitavaid tekste ja s\u00f5nu. Argumendiga <span lang=\"ET\">dictionary<\/span> tuleb talle anda vastav s\u00f5naraamat. <i>Lexicoder sentiment dictionary<\/i> on R-is ja <i>quanteda<\/i>-s allpool v\u00e4lja toodud nime all ning kui soovid keskenduda ainult kahele esimesele kategooriale (positiivsed ja negatiivsed s\u00f5nad, kuid mitte nende eitused), siis n\u00e4eb see funktsioon v\u00e4lja selline:<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: center;\" align=\"center\"><span lang=\"ET\">tokens_lookup(my_tokens, dictionary =\u00a0 data_dictionary_LSD2015[1:2])<\/span><\/p>\n<p class=\"MsoNoSpacing\">Kui seda funktsiooni rakendada, siis annab ta v\u00e4ljundiks objekti (nimekiri, <i>list<\/i>), kus iga element vastab \u00fchele anal\u00fc\u00fcsitavale dokumendile ning sisaldab termineid \u201e<i>positive<\/i>\u201c ja \u201e<i>negative<\/i>\u201d iga korra kohta, kui positiivne v\u00f5i negatiivne s\u00f5na esines vastavates dokumentides. N\u00fc\u00fcd on v\u00f5imalik kokku lugeda, kui palju nendesse kategooriatesse kuuluvaid s\u00f5nu esines anal\u00fc\u00fcsitavates dokumentides.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Sellisel viisil on v\u00f5imalik saada p\u00f5hilised toorandmed dokumentides sisalduvate emotsioonide kohta. Anal\u00fc\u00fcsiga edasiminekuks on palju erinevaid v\u00f5imalusi. On v\u00f5imalik arvutada positiivsete s\u00f5nade suhe negatiivsetesse s\u00f5nadesse, et hinnata vastandlike emotsioonide tasakaalu. Samuti on v\u00f5imalik arvutada emotsioonidega seotud s\u00f5nade osakaal k\u00f5ikidest dokumendis sisaldunud s\u00f5nadest selleks, et m\u00e4\u00e4ratleda dokumendi \u00fcldise emotsionaalsuse tase.<\/p>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">Need on kirjeldavad anal\u00fc\u00fcsid, kuid emotsioone on v\u00f5imalik kasutada ka dokumentide teiste omaduste seletamiseks, nagu n\u00e4iteks dokumendi loomise aeg v\u00f5i selle autor. Neid andmeid kasutades on v\u00f5imalik luua mudeleid h\u00fcpoteeside testimiseks dokumentide omaduste kohta. N\u00e4iteks on uuritud, kas (riigijuhtide) \u00f6\u00f6sel postitatud Twitteri s\u00e4utsud on teistsuguse meelestatusega kui p\u00e4eval postitatud s\u00e4utsud.<\/p>\n<p><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div>\n<p><\/p><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69de5cf39a70c-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69de5cf39a70c-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69de5cf39a70c-collapse\">N\u00e4ide<\/button>\n        <\/h2>\n        <div id=\"accordion-69de5cf39a70c-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69de5cf39a70c-heading\">\n            <div class=\"accordion-body\">\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\">R-is on olemas pakett nimega \u201csotu\u201d, mis sisaldab USA presidentide iga-aastaseid n\u00f6 \u201colukorrast riigis\u201d k\u00f5nesid (<i>State of the Union Address<\/i>). Neid v\u00f5ib kasutada, et teostada lihtsamat sorti meelestatuse anal\u00fc\u00fcs. Allpool on v\u00e4lja toodud terviklik kood, mis sellise anal\u00fc\u00fcsi teostab ning selle \u00fched v\u00f5imalikud tulemused joonisena. Kui vastavad paketid on installeeritud, siis see kood t\u00f6\u00f6tab igas arvutis ja see n\u00e4ide on v\u00f5imalik ise l\u00e4bi teha.<\/p>\n<div style=\"border: solid#cccccc1.0pt; padding: 7.0pt7.0pt7.0pt7.0pt;\">\n<p style=\"border: none; margin-bottom: .0001pt; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><span style=\"line-height: normal;\"><span lang=\"EN-GB\"><span style=\"color: #404040;\">library<\/span><\/span><span lang=\"EN-GB\"><span style=\"color: #333333;\">(sotu)<\/span><\/span><\/span><\/span><\/span><\/p>\n<p style=\"border: none; margin-bottom: .0001pt; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><span style=\"line-height: normal;\"><span lang=\"EN-GB\"><span style=\"color: #333333;\">data(sotu_text)<\/span><\/span> <span lang=\"ET\"><span style=\"color: red;\"># Siin on tekstid.<\/span><\/span><\/span><\/span><\/span><\/p>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"ET\" style=\"color: #333333;\">data(sotu_meta) <\/span><\/code><code><span lang=\"ET\" style=\"color: red;\"># Siin on lisaandmed tekstide kohta, nagu n\u00e4iteks aeg, president ja tema erakondlik kuuluvus.<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><span lang=\"ET\" style=\"color: #404040;\">library<\/span><code><span lang=\"ET\" style=\"color: #333333;\">(quanteda)<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"ET\" style=\"color: red;\"># J\u00e4rgnev k\u00e4sk eraldab tekstid s\u00f5nades ja teostab esmase puhastamise. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">data &lt;- tokens(<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">\u00a0 sotu_text, <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">\u00a0\u00a0remove_numbers = <\/span><\/code><span lang=\"EN-GB\" style=\"color: #990073;\">T<\/span><code><span lang=\"EN-GB\" style=\"color: #333333;\">,<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">\u00a0 remove_symbols = <\/span><\/code><span lang=\"EN-GB\" style=\"color: #990073;\">T<\/span><code><span lang=\"EN-GB\" style=\"color: #333333;\">,<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">\u00a0 remove_punct = <\/span><\/code><span lang=\"EN-GB\" style=\"color: #990073;\">T<\/span><code><span lang=\"EN-GB\" style=\"color: #333333;\">,<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">\u00a0 )<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">data_sen &lt;- tokens_lookup(data, dictionary =\u00a0 data_dictionary_LSD2015)<\/span><\/code><code> <\/code><code><span lang=\"ET\" style=\"color: red;\"># See tuvastab s\u00f5naraamatu alusel positiivsed ja negatiivsed s\u00f5nad koos eitustega. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"ET\" style=\"color: #333333;\">data_sen &lt;- tokens_replace(data_sen, <\/span><\/code><span lang=\"ET\" style=\"color: #404040;\">\"neg_negative\"<\/span><code><span lang=\"ET\" style=\"color: #404040;\">, <\/span><\/code><span lang=\"ET\" style=\"color: #404040;\">\"positive\"<\/span><code><span lang=\"ET\" style=\"color: #404040;\">) <\/span><\/code><code><span lang=\"ET\" style=\"color: red;\"># Negatiivsete v\u00e4ljendite eitamine on arvestatud positiivse emotsiooni v\u00e4ljendusena. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"ET\" style=\"color: #333333;\">data_sen &lt;- tokens_replace(data_sen, <\/span><\/code><span lang=\"ET\" style=\"color: #404040;\">\"neg_positive\"<\/span><code><span lang=\"ET\" style=\"color: #404040;\">, <\/span><\/code><span lang=\"ET\" style=\"color: #404040;\">\"negative\"<\/span><code><span lang=\"ET\" style=\"color: #404040;\">) <\/span><\/code><code><span lang=\"ET\" style=\"color: red;\"># Positiivsete v\u00e4ljendite eitamine on arvestatud negatiivsete emotsioonide v\u00e4ljendusena. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"ET\" style=\"color: #333333;\">counts_sen &lt;- lapply(data_sen, table) <\/span><\/code><code><span lang=\"ET\" style=\"color: red;\"># Loeb kokku kui palju positiivseid ja kui palju negatiivseid s\u00f5nu oli. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"ET\" style=\"color: #333333;\">data_sen2 &lt;- do.call(rbind, counts_sen) <\/span><\/code><code><span lang=\"ET\" style=\"color: red;\"># Muudab nimekirja andmetabeliks. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"ET\" style=\"color: red;\"># N\u00fc\u00fcd on meil olemas andmetabel, kus iga rida vastab \u00fchele k\u00f5nele ja tulpades on \u00e4ra n\u00e4idatud positiivsete ja negatiivsete s\u00f5nade osakaal. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">counts_words &lt;- unlist(lapply(data, length))<\/span><\/code><code> <\/code><code><span lang=\"ET\" style=\"color: red;\"># See annab meile iga k\u00f5ne pikkuse s\u00f5nades.<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">data_sen3 &lt;- data_sen2\/counts_words<\/span><\/code><code> <\/code><code><span lang=\"ET\" style=\"color: red;\"># Ning see arvutab positiivsete ja negatiivsete s\u00f5nade proportsiooni. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">data_sen3 &lt;- data.frame(data_sen3)<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"SV\" style=\"color: #333333;\">data_sen4 &lt;- cbind(sotu_meta, data_sen3)<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"ET\" style=\"color: red;\"># L\u00f5puks saame sellisest anal\u00fc\u00fcsist j\u00e4rgmise joonise, mis n\u00e4itab positiivsetele ja negatiivsetele emotsioonidele viitavate s\u00f5nade osakaalu k\u00f5nedes. <\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\">\u00a0<span style=\"background: white;\"><span style=\"background: white;\"><span lang=\"EN-GB\" style=\"color: #404040;\">library<\/span><code><span lang=\"EN-GB\" style=\"color: #333333;\">(ggplot2)<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #333333;\">ggplot(data_sen4, aes(x = year)) +<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code>\u00a0 <span lang=\"EN-GB\" style=\"color: #404040;\">geom_line(aes(y = positive), color = <\/span><\/code><span lang=\"EN-GB\" style=\"color: #404040;\">\"firebrick3\"<\/span><code><span lang=\"EN-GB\" style=\"color: #404040;\">) +<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #404040;\">\u00a0 geom_line(aes(y = negative), color = <\/span><\/code><span lang=\"EN-GB\" style=\"color: #404040;\">\"dodgerblue3\"<\/span><code><span lang=\"EN-GB\" style=\"color: #404040;\">) +<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #404040;\">\u00a0 labs(title = <\/span><\/code><span lang=\"EN-GB\" style=\"color: #404040;\">\"<\/span><span lang=\"ET\" style=\"color: #404040;\">Positiivsete<\/span><span lang=\"EN-GB\" style=\"color: #404040;\"> (<\/span><span lang=\"ET\" style=\"color: #404040;\">punane<\/span><span lang=\"EN-GB\" style=\"color: #404040;\">) and <\/span><span lang=\"ET\" style=\"color: #404040;\">negatiivsete<\/span><span lang=\"EN-GB\" style=\"color: #404040;\"> (<\/span><span lang=\"ET\" style=\"color: #404040;\">sinine<\/span><span lang=\"EN-GB\" style=\"color: #404040;\">) <\/span><span lang=\"ET\" style=\"color: #404040;\">emotsioonide osakaal k\u00f5nedes<\/span><span lang=\"EN-GB\" style=\"color: #404040;\">\"<\/span><code><span lang=\"EN-GB\" style=\"color: #404040;\">,<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #404040;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x =<\/span><\/code><code> <\/code><span lang=\"ET\" style=\"color: #404040;\">\"aeg\"<\/span><code><span lang=\"EN-GB\" style=\"color: #404040;\">,<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #404040;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 y = <\/span><\/code><span lang=\"EN-GB\" style=\"color: #404040;\">\"<\/span><span lang=\"ET\" style=\"color: #404040;\">osakaal<\/span><span lang=\"EN-GB\" style=\"color: #404040;\">\"<\/span><code><span lang=\"EN-GB\" style=\"color: #404040;\">) +<\/span><\/code><\/span><\/span><\/pre>\n<pre style=\"border: none; padding: 0cm;\"><span style=\"background: white;\"><span style=\"background: white;\"><code><span lang=\"EN-GB\" style=\"color: #404040;\">\u00a0 theme_bw()<\/span><\/code><\/span><\/span><\/pre>\n<\/div>\n<figure id=\"attachment_673\" aria-describedby=\"caption-attachment-673\" style=\"width: 825px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-673\" title=\"Positiivsete (punane) ja negatiivsete (sinine) emotsioonide osakaal k\u00f5nedes\" src=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/110\/screen_shot_2020-09-06_at_11.22.25.png\" alt=\"Positiivsete (punane) ja negatiivsete (sinine) emotsioonide osakaal k\u00f5nedes\" width=\"825\" height=\"461\" srcset=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/110\/screen_shot_2020-09-06_at_11.22.25.png 825w, https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/110\/screen_shot_2020-09-06_at_11.22.25-300x168.png 300w, https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/110\/screen_shot_2020-09-06_at_11.22.25-768x429.png 768w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\"><figcaption id=\"caption-attachment-673\" class=\"wp-caption-text\">Positiivsete (punane) ja negatiivsete (sinine) emotsioonide osakaal k\u00f5nedes<\/figcaption><\/figure>\n<p><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div>\n<p class=\"MsoNoSpacing\" style=\"text-align: justify;\"><i>Valminud Hariduse Infotehnoloogia Sihtasutuse IT Akadeemia programmi toel<\/i>.<\/p>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Martin M\u00f6lder2020 J\u00e4rgnev \u00fclevaade eeldab algteadmisi R-st ja on ennek\u00f5ike praktilise suunitlusega: r\u00f5hk on sellel, kuidas on v\u00f5imalik teha lihtsat meelestatuse anal\u00fc\u00fcsi R-s. Meelestatuse anal\u00fc\u00fcs ehk inglise keeles sentiment analysis (eesti keelde v\u00f5iks selle t\u00f5lkida ka kui tundmusanal\u00fc\u00fcs) on meetod, &#8230;<\/p>\n","protected":false},"author":45,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-65","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/sisu.ut.ee\/samm\/wp-json\/wp\/v2\/pages\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sisu.ut.ee\/samm\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sisu.ut.ee\/samm\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sisu.ut.ee\/samm\/wp-json\/wp\/v2\/users\/45"}],"replies":[{"embeddable":true,"href":"https:\/\/sisu.ut.ee\/samm\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":8,"href":"https:\/\/sisu.ut.ee\/samm\/wp-json\/wp\/v2\/pages\/65\/revisions"}],"predecessor-version":[{"id":2271,"href":"https:\/\/sisu.ut.ee\/samm\/wp-json\/wp\/v2\/pages\/65\/revisions\/2271"}],"wp:attachment":[{"href":"https:\/\/sisu.ut.ee\/samm\/wp-json\/wp\/v2\/media?parent=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}