Analiza statistica a datelor text

NPL - Natural Language Processing PSDT - Prelucrarea statistica a datelor text

Incarcarea pachetelor necesare in sesiunea de lucru:

Database creation

Setul de date analizata in cadrul articolului este creat de la zero, fiind format din sapte poezii diferite, in limba engleza, scrise de diferiti autori. Poeziile incluse in setul de date sunt disponibile pe platforma Poetryfoundation. Setul de date rezultat va fi analizat utilizand instrumentele NLP (Natural Language Processing) pentru analiza datelor text si vizualizare.

Textul complet al poeziei este disponibil aici (Still I Rise de Maya Angelou)

Vizualizam primele 6 randuri din textul poeziei:

## [1] "You may write me down in history" "With your bitter, twisted lies," 
## [3] "You may trod me in the very dirt" "But still, like dust, I'll rise."
## [5] "Does my sassiness upset you?"     "Why are you beset with gloom?"

Textul complet al poeziei este disponibil aici (Kubla Khan de Samuel Taylor Coleridge)

Vizualizam primele 6 randuri din textul poeziei:

## [1] "In Xanadu did Kubla Khan"             
## [2] "A stately pleasure-dome decree:"      
## [3] "Where Alph, the sacred river, ran"    
## [4] "Through caverns measureless to man"   
## [5] "Down to a sunless sea."               
## [6] "So twice five miles of fertile ground"

Textul complet al poeziei este disponibil aici (Song of Myself (1892 version) de Walt Whitman)

Vizualizam primele 6 randuri din textul poeziei:

## [1] "Turning and turning in the widening gyre"       
## [2] "The falcon cannot hear the falconer;"           
## [3] "Things fall apart; the centre cannot hold;"     
## [4] "Mere anarchy is loosed upon the world,"         
## [5] "The blood-dimmed tide is loosed, and everywhere"
## [6] "The ceremony of innocence is drowned;"

Textul complet al poeziei este disponibil aici (Because I could not stop for Death – (479) de Emily Dickinson)

Vizualizam primele 6 randuri din textul poeziei:

## [1] "Because I could not stop for Death"  
## [2] "He kindly stopped for me"            
## [3] "The Carriage held but just Ourselves"
## [4] "And Immortality."                    
## [5] "We slowly drove   He knew no haste"  
## [6] "And I had put away"

Textul complet al poeziei este disponibil aici (Ode to a Nightingale de John Keats)

Vizualizam primele 6 randuri din textul poeziei:

## [1] "My heart aches, and a drowsy numbness pains"
## [2] "My sense, as though of hemlock I had drunk,"
## [3] "Or emptied some dull opiate to the drains"  
## [4] "One minute past, and Lethe-wards had sunk:" 
## [5] "'Tis not through envy of thy happy lot,"    
## [6] "But being too happy in thine happiness, "

Textul complet al poeziei este disponibil aici (The Rime of the Ancient Mariner de Samuel Taylor Coleridge)

Vizualizam primele 6 randuri din textul poeziei:

## [1] " It is an ancient Mariner,"                
## [2] "And he stoppeth one of three."             
## [3] "By thy long grey beard and glittering eye,"
## [4] "Now wherefore stopp'st thou me?"           
## [5] "The Bridegroom's doors are opened wide,"   
## [6] "And I am next of kin;"

Textul complet al poeziei este disponibil aici (Ode to the West Wind de Percy Bysshe Shelley)

Vizualizam primele 6 randuri din textul poeziei:

## [1] "O wild West Wind, thou breath of Autumn's being,"  
## [2] "Thou, from whose unseen presence the leaves dead"  
## [3] "Are driven, like ghosts from an enchanter fleeing,"
## [4] "Yellow, and black, and pale, and hectic red,"      
## [5] "Pestilence-stricken multitudes: O thou,"           
## [6] "Who chariotest to their dark wintry bed"

Vom adauga o coloana cu denumirea poeziei si o coloana cu pozitia fiecarui vers in cadrul poeziei

lineversurititle
1You may write me down in historyStill_I_Rise
2With your bitter, twisted lies,Still_I_Rise
3You may trod me in the very dirtStill_I_Rise
4But still, like dust, I'll rise.Still_I_Rise
5Does my sassiness upset you?Still_I_Rise
6Why are you beset with gloom?Still_I_Rise
lineversurititle
1In Xanadu did Kubla KhanKubla_Khan
2A stately pleasure-dome decree:Kubla_Khan
3Where Alph, the sacred river, ranKubla_Khan
4Through caverns measureless to manKubla_Khan
5Down to a sunless sea.Kubla_Khan
6So twice five miles of fertile groundKubla_Khan
lineversurititle
1Turning and turning in the widening gyreSong_of_Myself
2The falcon cannot hear the falconer;Song_of_Myself
3Things fall apart; the centre cannot hold;Song_of_Myself
4Mere anarchy is loosed upon the world,Song_of_Myself
5The blood-dimmed tide is loosed, and everywhereSong_of_Myself
6The ceremony of innocence is drowned;Song_of_Myself
lineversurititle
1Because I could not stop for DeathBecause_I_could_not_stop_for_Death
2He kindly stopped for meBecause_I_could_not_stop_for_Death
3The Carriage held but just OurselvesBecause_I_could_not_stop_for_Death
4And Immortality.Because_I_could_not_stop_for_Death
5We slowly drove He knew no hasteBecause_I_could_not_stop_for_Death
6And I had put awayBecause_I_could_not_stop_for_Death
lineversurititle
1My heart aches, and a drowsy numbness painsOde_to_a_Nightingale
2My sense, as though of hemlock I had drunk,Ode_to_a_Nightingale
3Or emptied some dull opiate to the drainsOde_to_a_Nightingale
4One minute past, and Lethe-wards had sunk:Ode_to_a_Nightingale
5'Tis not through envy of thy happy lot,Ode_to_a_Nightingale
6But being too happy in thine happiness, Ode_to_a_Nightingale
lineversurititle
1 It is an ancient Mariner,Rime_of_the_Ancient_Mariner
2And he stoppeth one of three.Rime_of_the_Ancient_Mariner
3By thy long grey beard and glittering eye,Rime_of_the_Ancient_Mariner
4Now wherefore stopp'st thou me?Rime_of_the_Ancient_Mariner
5The Bridegroom's doors are opened wide,Rime_of_the_Ancient_Mariner
6And I am next of kin;Rime_of_the_Ancient_Mariner
lineversurititle
1O wild West Wind, thou breath of Autumn's being,Ode_to_the_West_Wind
2Thou, from whose unseen presence the leaves deadOde_to_the_West_Wind
3Are driven, like ghosts from an enchanter fleeing,Ode_to_the_West_Wind
4Yellow, and black, and pale, and hectic red,Ode_to_the_West_Wind
5Pestilence-stricken multitudes: O thou,Ode_to_the_West_Wind
6Who chariotest to their dark wintry bedOde_to_the_West_Wind

Crearea setului de date

Urmatorul pas este sa construim cu ajutorul functiei rbind() setul de date denumit poezii:

lineversurititle
1You may write me down in historyStill_I_Rise
2With your bitter, twisted lies,Still_I_Rise
3You may trod me in the very dirtStill_I_Rise
4But still, like dust, I'll rise.Still_I_Rise
5Does my sassiness upset you?Still_I_Rise
6Why are you beset with gloom?Still_I_Rise

Setul de date (poezii) este format din 7 poezii, in care fiecare linie ofera informatii cu privire la:

  1. numarul versului in cadrul poemului,

  2. textul versului

  3. titlul poeziei din care face parte versul

Cele 7 titluri ale poeziilor analizate sunt:

title
Still_I_Rise
Kubla_Khan
Song_of_Myself
Because_I_could_not_stop_for_Death
Ode_to_a_Nightingale
Rime_of_the_Ancient_Mariner
Ode_to_the_West_Wind

Descrierea setului de date analizat

Tabelul. Structura datafram-ului analizat.Setul de date: contine 7 poezii

Nr.Crt.lineversurititle
11You may write me down in historyStill_I_Rise
22With your bitter, twisted lies,Still_I_Rise
33You may trod me in the very dirtStill_I_Rise
44But still, like dust, I'll rise.Still_I_Rise
55Does my sassiness upset you?Still_I_Rise
37166Scatter, as from an unextinguish'd hearthOde_to_the_West_Wind
37267Ashes and sparks, my words among mankind!Ode_to_the_West_Wind
37368Be through my lips to unawaken'd earthOde_to_the_West_Wind
37469The trumpet of a prophecy! O Wind,Ode_to_the_West_Wind
37570If Winter comes, can Spring be far behind?Ode_to_the_West_Wind

Mai sus este prezentata structura setului de date creat (primele si ultimele 5 observatii) pe care il vom analiza.

Vom sparge versurile in cuvinte cu ajutorul functiei unnest_tokens().

Structura setului de date după aplicarea functiei unnest_tokens() este prezentat mai jos. Observam ca setul inițial conține un număr de 375 de observații (versuri), in timp ce setul de date procesat este format din 2546 observații/cuvinte. Setul de date continue atat cuvinte de legatura, cat și cuvinte ce pot exprima emotii.

Indicatori statistici descriptivi corespunzatori versurilor analizate

Nr.Crt.metricsvalues
1min_length6
2avg_length37.7
3median_length39
4max_length53
5var_length58.8
6sd_lengthy7.67
7skewness-0.745
8kurtosis0.838
9total_length9.6e+04
10num_verse375

Mai sus sunt prezentati indicatorii statistici corespunzatori versurilor analizate (numarul de caractere a unui vers, lungimea medie a numarului de caractere etc. ). Observam ca avem un total de 375 de versuri. Numarul mediu de caractere a unui vers este 37.7 caractere. 50% din versuri prezinta un numar de caractere mai mic de 39 caractere, in timp ce 50% din versuri prezinta un numar de caractere mai mare de 39 caractere. Versurile cu cel mai mare numar de caractere sunt cele din poeziile Kubla_Khan si Ode_to_the_West_Wind, in timp ce numarul minim de caractere dintr-un vers este 6 si corespunde versului I rise din poezia Still I Rise.

Indicatori statistici descriptivi corespunzatori cuvintelor din versurile analizate

## 'data.frame':    2546 obs. of  12 variables:
##  $ line                : int  1 1 1 1 1 1 1 2 2 2 ...
##  $ title               : chr  "Still_I_Rise" "Still_I_Rise" "Still_I_Rise" "Still_I_Rise" ...
##  $ word                : chr  "you" "may" "write" "me" ...
##  $ versuri             : chr  "You may write me down in history" "You may write me down in history" "You may write me down in history" "You may write me down in history" ...
##  $ verse               : chr  "You may write me down in history" "You may write me down in history" "You may write me down in history" "You may write me down in history" ...
##  $ word_length         : int  3 3 5 2 4 2 7 4 4 6 ...
##  $ num_vowels          : int  2 1 2 1 1 1 2 1 2 2 ...
##  $ num_consonants      : int  1 2 3 1 3 1 5 3 2 4 ...
##  $ verse_length        : int  32 32 32 32 32 32 32 31 31 31 ...
##  $ num_vowels_verse    : int  10 10 10 10 10 10 10 9 9 9 ...
##  $ num_consonants_verse: int  16 16 16 16 16 16 16 16 16 16 ...
##  $ word_count_verse    : int  7 7 7 7 7 7 7 5 5 5 ...
Nr.Crt.metricsvalues
1min_length2
2avg_length7.09
3median_length7
4max_length11
5var_length2.4
6sd_lengthy1.55
7skewness-0.376
8kurtosis0.185
9total_length1.8e+04
10num_verse375

Mai sus sunt prezentati indicatorii statisticii descriptive corespunzatori cuvintelor dintr-un vers. Dupa cum se poate observa numarul minim de cuvinte dintr-un vers sunt 2 cuvinte (si corespunde versurilor din poeziile Still I Rise si Because_I_could_not_stop_for_Death), in timp ce numarul maxim de cuvinte dintr-un vers sunt 11 cuvinte si corespunde versului din poezia Song_of_Myself. Numarul mediu de cuvinte dintr-un vers este de 7 cuvinte.

## 'data.frame':    2546 obs. of  12 variables:
##  $ line                : int  1 1 1 1 1 1 1 2 2 2 ...
##  $ title               : chr  "Still_I_Rise" "Still_I_Rise" "Still_I_Rise" "Still_I_Rise" ...
##  $ word                : chr  "you" "may" "write" "me" ...
##  $ versuri             : chr  "You may write me down in history" "You may write me down in history" "You may write me down in history" "You may write me down in history" ...
##  $ verse               : chr  "You may write me down in history" "You may write me down in history" "You may write me down in history" "You may write me down in history" ...
##  $ word_length         : int  3 3 5 2 4 2 7 4 4 6 ...
##  $ num_vowels          : int  2 1 2 1 1 1 2 1 2 2 ...
##  $ num_consonants      : int  1 2 3 1 3 1 5 3 2 4 ...
##  $ verse_length        : int  32 32 32 32 32 32 32 31 31 31 ...
##  $ num_vowels_verse    : int  10 10 10 10 10 10 10 9 9 9 ...
##  $ num_consonants_verse: int  16 16 16 16 16 16 16 16 16 16 ...
##  $ word_count_verse    : int  7 7 7 7 7 7 7 5 5 5 ...
Distributia dupa numarul de caractere dintr-un vers a poeziilor analizate

Distributia dupa numarul de cuvinte din versuri a poeziilor analizate

Observam ca ambele distributii sunt usor asimetrice la stanga, ceea ce inseamna ca predomina versurile cu un numar mare de caractere, respectiv cuvinte.Modul este mai mare decat mediana care este mai mare decat media.

Indicatori statistici descriptivi corespunzatori cuvintelor analizate

Nr.Crt.metricsvalues
1min_length1
2avg_length4.26
3median_length4
4max_length14
5var_length3.97
6sd_lengthy1.99
7skewness0.891
8kurtosis0.954
9total_length1.08e+04
10num_words2.55e+03

In Tabelul de mai sus sunt prezentați principali indicatori ai statisticii descriptive corespunzătoari cuvintelor analizate. Observam ca lungimea minima a unui cuvant este de un caracter, în timp ce lungimea maximă a unui cuvant este de 14 caractere. Observam ca 50% din cuvinte au un număr mai mic de 4 caractere, în timp ce 50% au un număr mai mare de 4 caractere. Lungimea medie a unui cuvant este de 4.3 caractere.

Cuvintele cu cele mai putine caractere si poezia corespunzatoare sunt:

cuvintele cu cele mai multe caractere si poezia corespunzatoare sunt:

Distributia dupa numarul de caractere din cuvinte a poeziilor analizate

Indicatori statistici descriptivi corespunzatori vocalelor din versurile analizate

Nr.Crt.metricsvalues
1min_vowels3
2avg_vowels11.2
3median_vowels12
4max_vowels18
5var_vowels6.28
6sd_vowels2.51
7skewness-0.377
8kurtosis0.183
9total_vowels2.86e+04
10num_verse375

In Tabelul de mai sus sunt prezentați principali indicatori ai statisticii descriptive corespunzătoari vocalelor din versurile analizate. Observam ca numarul minim de vocale dintr-un vers este de 3 vocale, în timp ce numarul maxim de vocale dintr-un vers este de 18 vocale. Observam ca 50% din cuvinte au un număr de vocale mai mic de 12 vocale, în timp ce 50% au un număr de vocale mai mare de 12 vocale Numarul medie de vocale dintr-un vers este de 11.2 vocale. Numarul total de vocale inregistrat la nivelul setului de date este de ~ 28600 vocale. Numarul de vocale se abate, in medie, de la valoare nivelului mediu de vocale cu plus/minus 2.5 vocale.

Versurile cu cele mai mic numar de vocale sunt:

Versurile cu cele mai mare numar de vocale sunt:

Distributia dupa numarul de vocale din versuri a poeziilor analizate

Indicatori statistici descriptivi corespunzatori consoanelor din versurile analizate

Nr.Crt.metricsvalues
1min_consonants2
2avg_consonants18.9
3median_consonants19
4max_consonants29
5var_consonants19.5
6sd_consonants4.42
7skewness-0.516
8kurtosis0.326
9total_consonants4.82e+04
10num_verse375

In Tabelul de mai sus sunt prezentați principali indicatori ai statisticii descriptive corespunzătoari consoanelor din versurile analizate. La nivelul intregului set de date avem un numar de ~ 48200 de consoane. Observam ca numarul minim de consoane dintr-un vers este de 2 consoane, în timp ce numarul maxim de consoane dintr-un vers este de 29 consoane. Observam ca 50% din cuvinte au un număr de consoane mai mic de 19, în timp ce restul au un număr de consoane mai mare de 19. Numarul mediu de consoane dintr-un vers este de 18.9 consoane.

Versurile cu cele mai mic numar de consoane sunt:

Versurile cu cele mai mare numar de consoane sunt:

Distributia dupa numarul de consoane din versuri a poeziilor analizate

Indicatori statistici descriptivi corespunzatori vocalelor din cuvintele analizate

Nr.Crt.metricsvalues
1min_vowels0
2avg_vowels1.58
3median_vowels1
4max_vowels6
5var_vowels0.667
6sd_vowels0.816
7skewness1.17
8kurtosis1.79
9total_vowels4.02e+03
10num_verse375

Cuvintele cu cele mai mic numar de vocale sunt:

Cuvintele cu cele mai mare numar de vocale sunt:

Distributia dupa numarul de vocale din cuvinte a poeziilor analizate

Indicatori statistici descriptivi corespunzatori consoanelor din cuvintele analizate

Nr.Crt.metricsvalues
1min_consonants0
2avg_consonants2.66
3median_consonants2
4max_consonants9
5var_consonants2.05
6sd_consonants1.43
7skewness0.615
8kurtosis0.396
9total_consonants6.78e+03
10num_verse375

Cuvintele cu cele mai mic numar de consoane sunt:

Cuvintele cu cele mai mare numar de consoane sunt:

Distributia dupa numarul de consoane din cuvinte a poeziilor analizate

Analiza comparativa a valorilor medii obtinute per cuvinte/per vers

Analiza comparativa a numarului mediu de caractere din versurile analizate

Observam ca poezia Ode to the West Wind prezinta cele mai multe caractere per vers (42.85 caractere), in timp ce la polul opus se situeaza poezia Because I could not stop for Death cu un numar mediu de caractere de 29.39.

Observam ca poezia Still I rise prezinta cel mai mare procent al raportului v/c. Poeziile cu versuri lungi tind să aibă un raport vocale/consoane moderat (cum ar fi de exemplu versurile poeziei Ode to the West Wind (0.62) sau Ode to a Nightingale (0.6) ). Poeziile cu versuri scurte și raport mic vocale/consoane (Rime of the Ancient Mariner) sunt mai concentrate și au un stil dramatic. Poezia Still I Rise (cu un raport v/c = 6.69) prezinta versuri relativ scurte, dar foarte placute, cel mai probabil reflectând optimismul autorului.

Analiza comparativa a numarului mediu de cuvinte din versuri

Numarul mediu de cuvinte utilizate de autor intr-un vers reprezinta lungimea medie a versurilor si ofera informatii cu privire la stilul autorului. Versurile scurte - cu un numar mic de cuvinte indica un stil simplu si concentrat cum ar fi de exemplu versurile din poezia Rime of the Ancient Mariner care prezinta versuri scurte, cu un numar mediu de cuvinte per vers de 6.18 cuvinte. In timp ce versurile lungi indica un stil mai descriptiv/filosofic, cum ar fi in cazul nostru versurile din poeziile Ode to the West Wind (cu un numar mediu de cuvinte per vers de 7.98 cuvinte) și Song of Myself (cu un numar mediu de cuvinte per vers de 7.72) care prezinta cele mai lungi versuri.

Analiza comparativa a mediei raportului vocale/consoane dintr-un vers

Pentru a pune in evidenta caracteristicile fonetice ale poeziilor analizate s-a calculate raportul dintre numarul de vocale si numarul de consoane. S-a constatat ca textele cu un numar mai mare de vocale sunt mai placut de ascultat (pe principiu vorba dulce mult aduce). In timp ce, textele cu un numar mai mare de consoane sunt mai dure, mai dramatice. Still_I_Rise (0.62) are cel mai mare raport vocale/consoane, ceea ce sugerează că textul este cel mai probabil mai eufonic. Rime_of_the_Ancient_Mariner (0.550) și Because_I_could_not_stop_for_Death (0.550) au cele mai mici rapoarte, sugerând un ton mai dramatic. Poeziile precum Ode_to_the_West_Wind (0.590) și Ode_to_a_Nightingale (0.570) pare sa prezinte, in acest caz, un echilibru între cele doua tipuri de texte, ceea ce poate reflecta stilului autorilor.

Analiza comparativa a mediei lungimii cuvintelor analizate.

Distributia dupa numarul de cuvinte continute intr-un vers pe fiecare poezie in parte

Testarea seminificatiei mediei

In aceasta sectiune ne propunem sa vedem daca exista diferente semnificative intre valorile medii ale celor spate poezii.

  • Formularea ipotezelor:
  1. \(H_0\): \(\mu_1 = \mu_2 = \mu_3 = \mu_4 = \mu_5 = \mu_6 = \mu_7\) - intre mediile (mediile lungimii cuvintelor, mediile numarului de vocale din cuvant, mediile numarului de consoane din cuvant, mediile numarului de vocale din vers, mediile numarului de consoane din vers, mediile numarului de cuvinte din vers, mediile lungimii versurilor) celor sapte poezii analizate nu exista diferente semnificative
  2. \(H_1\): \(\mu_1 \neq \mu_2 \neq \mu_3 \neq \mu_4 \neq \mu_5 \neq \mu_6 \neq \mu_7\) - intre mediile (mediile lungimii cuvintelor, mediile numarului de vocale din cuvant, mediile numarului de consoane din cuvant, mediile numarului de vocale din vers, mediile numarului de consoane din vers, mediile numarului de cuvinte din vers, mediile lungimii versurilor) celor sapte poezii analizate exista diferente semnificative (cel putin doua medii sunt diferite)

Observam ca in toate cazurile ipoteza nula este respinsa, cu un risc asumat de 5%. Prin urmare, exista diferente semnficative intre mediile testate. Rezultatul testului ANOVA indică faptul că structura versurilor (modul in care sunt distributie cuvintele in vers, distributia lungimii versului, distributia vocalelor și distribuția consoanelor în cadrul versurilor) joacă un rol important în definirea stilului autorilor care au scris poeziile analizate.

Distributia dupa numarul de vocale continute intr-un vers pe fiecare poezie in parte

Distributia dupa numarul de consoane continute intr-un vers pe fiecare poezie in parte

Distributia dupa numarul de caractere continute intr-un vers pe fiecare poezie in parte

Distributia dupa numarul de caractere continute intr-un cuvant pe fiecare poezie in parte

Distributia dupa numarul de vocale continute intr-un cuvant pe fiecare poezie in parte

Distributia dupa numarul de consoane continute intr-un cuvant pe fiecare poezie in parte

Eliminarea cuvintelor de legatura

Dupa cum se poate observa, setului de date initial contine un numar de 2546 cuvinte (cuvinte ce pot exprima emotii si cuvinte de legatura).

Analiza cuvintelor de legatura

Vom analiza mai intai cuvintele de legatura folosite in cadrul poeziilor analizate

Avem un numar de 210 observatii (cuvinte de legatura unice), precum: the, and, of etc.

Distributia dupa cuvintele de legatura

Numarul de cuvinte ce ar putea exprima o emotie dupa eliminarea cuvintelor de legatura este:

Observam ca avem un numar de 867 de cuvinte unice ce ar putea exprima emotii

## [1] 867   3

References:

  1. Qiushi Yan, Notes for Text Mining with R: A Tidy Approach, 2020, https://bookdown.org/Maxine/tidy-text-mining/compare-word-frequency.html accessed on 14.01.2025.

  2. https://github.com/dgrtwo/tidy-text-mining/blob/master/01-tidy-text.Rmd accessed on 14.01.2025.

  3. Silge, Julia and David Robinson. “Text Mining with R: A Tidy Approach.”, 2017.

  4. Exploratory Data Analysis of a Dataset Consisting of Seven Poems using various R libraries, https://rpubs.com/mihaela123/1263158 accessed on 22.01.2025.