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")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"))| Eighty_days | All_moon |
|---|---|
| day | moon |
| make | projectile |
| leave | earth |
| time | great |
| hour | time |
| train | cry |
| master | friend |
| pass | make |
| steamer | point |
| reply | mile |
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.
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"))| Eighty_days | All_moon |
|---|---|
| day | moon |
| make | projectile |
| leave | earth |
| time | great |
| hour | time |
| train | cry |
| master | friend |
| pass | make |
| steamer | point |
| reply | mile |
(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"))| Eighty_days | All_moon |
|---|---|
| detective | projectile |
| hong | lunar |
| kong | crater |
| bombay | satellite |
| servant | map |
| yokohama | mare |
| reform | barbican |
| calcutta | ardans |
| parsee | boy |
| carnatic | belfast |
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.
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"))| 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.
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"))| 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ą.