Macierz dokument - feature DTM

znana również jako macierz wystąpień terminów, jest strukturą danych używaną w analizie tekstu do reprezentacji tekstu jako macierzy numerycznej. DTM składa się z dokumentów jako wierszy i terminów (słów lub wyrażeń) jako kolumn.

W DTM każda komórka reprezentuje liczbę lub wagę wystąpień danego terminu w danym dokumencie. Komórki zazwyczaj zawierają częstość wystąpień (np. liczba wystąpień termu w dokumencie) lub wagi (np. tf-idf), które odzwierciedlają znaczenie terminu w kontekście danego dokumentu lub zbioru dokumentów.

DTM jest podstawowym narzędziem do analizy tekstu i umożliwia przeprowadzanie różnych operacji, takich jak analiza częstości słów, identyfikacja istotnych terminów, analiza klastrowania dokumentów, klasyfikacja tekstu, modelowanie tematyczne i wiele innych. DTM stanowi podstawę dla wielu technik analizy tekstu i jest szeroko stosowany w dziedzinie przetwarzania języka naturalnego i tekstowego.

W celu utworzenia macierzy wystąpień z różnymi wagami przygotowano korpus:

eighty_days_text_mw <- paste(eighty_days_lem$word_lemma, collapse = " ")

all_moon_text_mw <- paste(all_moon_lem$word_lemma, collapse = " ")

books <- data.frame(document = c("eighty_days", "all_moon"),
                    text = c(eighty_days_text_mw, all_moon_text_mw),
                    stringsAsFactors = FALSE)

books_corpus_mw <- corpus(books)
docnames(books_corpus_mw) <- c("Eighty_days", "All_moon")



Częstość wystąpień

dtm_tf_mw <- DocumentTermMatrix(books_corpus_mw)
dtm_tf_mw
## <<DocumentTermMatrix (documents: 2, terms: 8901)>>
## Non-/sparse entries: 11611/6191
## Sparsity           : 35%
## Maximal term length: 30
## Weighting          : term frequency (tf)
dtm_tf_mw_matrix <- as.data.frame(as.matrix(dtm_tf_mw))

Na podstawie informacji o macierzy można powiedzieć, że istnieją dwa dokumenty, które mają znaczną liczbę unikalnych terminów (8901). Macierz jest względnie gęsta, a wagi terminów są obliczane na podstawie ich częstości w dokumentach.

Naistotniejsze słowa:

sum_tf <- rowSums(dtm_tf_mw_matrix)

top_words_tf <- apply(dtm_tf_mw_matrix, 1, function(x) {
  sorted <- names(sort(x, decreasing = TRUE))
  head(sorted, 10)
})

kable(top_words_tf, format = "html", align = "c", caption = "Najistotniejsze słowa wg częstości wystąpień") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Najistotniejsze słowa wg częstości wystąpień
Eighty_days All_moon
day moon
make projectile
leave earth
time great
hour time
train cry
master friend
pass make
steamer point
reply mile



Wagi binarne

oznaczają, że dla każdego terminu wystąpienie jest reprezentowane jako 0 (brak wystąpienia) lub 1 (wystąpienie), ignorując częstość wystąpienia. Jest to prosty sposób uwzględnienia obecności terminu w dokumencie bez uwzględniania liczby wystąpień.

# Tworzenie macierzy TDM z wagami binarnymi
dtm_binary_mw <- DocumentTermMatrix(books_corpus_mw, control = list(weighting = weightBin))
dtm_binary_mw
## <<DocumentTermMatrix (documents: 2, terms: 8901)>>
## Non-/sparse entries: 11611/6191
## Sparsity           : 35%
## Maximal term length: 30
## Weighting          : binary (bin)
dtm_binary_mw_matrix <- as.data.frame(as.matrix(dtm_binary_mw))

Na podstawie informacji o macierzy można powiedzieć, że istnieją dwa dokumenty, które mają znaczną liczbę unikalnych terminów (8901). Macierz jest względnie gęsta, a wagi terminów są binarne, co oznacza, że termy są traktowane jako obecne lub nieobecne w danym dokumencie.



Wagi logarytmiczne

można zastosować, aby uwzględnić częstość wystąpień terminów w sposób bardziej wyważony. Częstość wystąpień terminu w dokumencie jest logarytmem naturalnym (lub innym logarytmem) liczby wystąpień, co prowadzi do skoncentrowania się na istotnych różnicach w częstości wystąpień.

dtm_log_mw <- log2(as.matrix(dtm_tf_mw) + 1) #Przekształcenie macierzy tf na macierz z wagami logarytmicznymi

dtm_log_mw_matrix <- as.data.frame(as.matrix(dtm_log_mw))

Najistotniejsze słowa:

sum_log <- rowSums(dtm_log_mw_matrix)

top_words_log <- apply(dtm_log_mw_matrix, 1, function(x) {
  sorted <- names(sort(x, decreasing = TRUE))
  head(sorted, 10)
})

kable(top_words_log, format = "html", align = "c", caption = "Najistotniejsze słowa wg wag logarytmicznych") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Najistotniejsze słowa wg wag logarytmicznych
Eighty_days All_moon
day moon
make projectile
leave earth
time great
hour time
train cry
master friend
pass make
steamer point
reply mile



Wagi TF-IDF

(Term Frequency-Inverse Document Frequency) to popularna metoda ważenia terminów, która uwzględnia zarówno częstość wystąpień terminu w dokumencie (TF) jak i jego znaczenie w kontekście całego korpusu dokumentów (IDF). Waga termu w dokumencie jest mnożona przez odwrotność częstości wystąpień termu w całym korpusie, co prowadzi do wyróżnienia istotnych terminów, które występują rzadziej w całym zbiorze dokumentów

dtm_tfidf_mw <- DocumentTermMatrix(books_corpus_mw, control = list(weighting = weightTfIdf))
dtm_tfidf_mw
## <<DocumentTermMatrix (documents: 2, terms: 8901)>>
## Non-/sparse entries: 6191/11611
## Sparsity           : 65%
## Maximal term length: 30
## Weighting          : term frequency - inverse document frequency (normalized) (tf-idf)
dtm_tfidf_mw_matrix <- as.data.frame(as.matrix(dtm_tfidf_mw))

Macierz podobnie jak poprzednie zaiwera 2 dokumenty i 8901 termów. Jest stosunkowo rzadka, ponieważ tylko 35% z wszystkich możliwych wpisów ma wartość nieliczbową. Oznacza to, że większość miejsc w macierzy jest pusta lub zawiera zero. Terminy są ważone na podstawie częstości ich występowania w danym dokumencie oraz odwrotnej częstości ich występowania we wszystkich dokumentach. Ważenie tf-idf normalizuje wyniki, aby wyrównać wpływ popularnych terminów.

Najistotniejsze słowa:

sum_tfidf <- rowSums(dtm_tfidf_mw_matrix)

top_words_tfidf <- apply(dtm_tfidf_mw_matrix, 1, function(x) {
  sorted <- names(sort(x, decreasing = TRUE))
  head(sorted, 10)
})

kable(top_words_tfidf, format = "html", align = "c", caption = "Najistotniejsze słowa wg wag TfI") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Najistotniejsze słowa wg wag TfI
Eighty_days All_moon
detective projectile
hong lunar
kong crater
bombay satellite
servant map
yokohama mare
reform barbican
calcutta ardans
parsee boy
carnatic belfast



Porównanie 10 najistotniejszych słów dla różnych wag

table_eighty_days <- data.frame(Słowa = seq(1,10),
                                Częstość = top_words_tf[, "Eighty_days"],
                                TfIdf = top_words_tfidf[, "Eighty_days"])

table_all_moon <- data.frame(Słowa = seq(1,10),
                             Częśotść = top_words_tf[, "All_moon"],
                             TfIdf = top_words_tfidf[, "All_moon"])

Pod uwagę wzięte zostały częstość wys†epowania (tf), wagi logarytmiczna i tfidf. Waga binarna nie została wzięta pod uwagę gdyż nie da się wyodrębnić najpopularniejszych termów.

  • “W 80 dni dookoła świata”
kable(table_eighty_days, format = "html", align = "c", caption = "Najistotniejsze słowa wg częstości występowania oraz wag TfIdf") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Najistotniejsze słowa wg częstości występowania oraz wag TfIdf
Słowa Częstość TfIdf
1 day detective
2 make hong
3 leave kong
4 time bombay
5 hour servant
6 train yokohama
7 master reform
8 pass calcutta
9 steamer parsee
10 reply carnatic

Najczęściej występujące słowa w powieści “W 80 dni dookoła ziemi” na podstawie macierzy wystąpień (częstość) oraz wag TfIdf mają zarówno podobne, jak i różne cechy. W obu przypadkach często występują słowa takie jak “day”, “make” i “time”, co wskazuje na ich znaczenie w treści powieści. Jednak w macierzy wag TfIdf pojawiają się również specyficzne słowa, takie jak “detective”, “hong”, “kong”, “servant” i “reform”, które mogą odzwierciedlać szczególne tematy, lokalizacje lub aspekty powieści. Takie różnice w słowach podkreślają istotne elementy, które można wyróżnić, analizując powieść z różnych perspektyw.

  • “Wokół księżyca”
kable(table_all_moon, format = "html", align = "c", caption = "Najistotniejsze słowa wg częstości występowania oraz wag TfIdf") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Najistotniejsze słowa wg częstości występowania oraz wag TfIdf
Słowa Częśotść TfIdf
1 moon projectile
2 projectile lunar
3 earth crater
4 great satellite
5 time map
6 cry mare
7 friend barbican
8 make ardans
9 point boy
10 mile belfast

Najczęściej występujące słowa w powieści “Wokół księżyca” na podstawie macierzy wystąpień (częstość) oraz wag TfIdf wykazują podobne i różniące się cechy. W obu przypadkach często występują słowa takie jak “moon” i “projectile”, co wskazuje na ich znaczenie w kontekście książki. Jednak w macierzy wag TfIdf pojawiają się również specyficzne słowa, takie jak “lunar”, “crater”, “satellite” i “mare”, które odnoszą się do tematyki księżycowej, podróży kosmicznej i eksploracji. Słowa takie jak “earth”, “great”, “time” i “friend” są również obecne. Można zauważyć, że analiza słów na podstawie macierzy wag TfIdf uwydatnia specyficzne tematy i elementy związane z książką.