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:
<- paste(eighty_days_lem$word_lemma, collapse = " ")
eighty_days_text_mw
<- paste(all_moon_lem$word_lemma, collapse = " ")
all_moon_text_mw
<- data.frame(document = c("eighty_days", "all_moon"),
books text = c(eighty_days_text_mw, all_moon_text_mw),
stringsAsFactors = FALSE)
<- corpus(books)
books_corpus_mw docnames(books_corpus_mw) <- c("Eighty_days", "All_moon")
<- DocumentTermMatrix(books_corpus_mw)
dtm_tf_mw dtm_tf_mw
## <<DocumentTermMatrix (documents: 2, terms: 8901)>>
## Non-/sparse entries: 11611/6191
## Sparsity : 35%
## Maximal term length: 30
## Weighting : term frequency (tf)
<- as.data.frame(as.matrix(dtm_tf_mw)) dtm_tf_mw_matrix
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:
<- rowSums(dtm_tf_mw_matrix)
sum_tf
<- apply(dtm_tf_mw_matrix, 1, function(x) {
top_words_tf <- names(sort(x, decreasing = TRUE))
sorted 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
<- DocumentTermMatrix(books_corpus_mw, control = list(weighting = weightBin))
dtm_binary_mw dtm_binary_mw
## <<DocumentTermMatrix (documents: 2, terms: 8901)>>
## Non-/sparse entries: 11611/6191
## Sparsity : 35%
## Maximal term length: 30
## Weighting : binary (bin)
<- as.data.frame(as.matrix(dtm_binary_mw)) dtm_binary_mw_matrix
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ń.
<- log2(as.matrix(dtm_tf_mw) + 1) #Przekształcenie macierzy tf na macierz z wagami logarytmicznymi
dtm_log_mw
<- as.data.frame(as.matrix(dtm_log_mw)) dtm_log_mw_matrix
Najistotniejsze słowa:
<- rowSums(dtm_log_mw_matrix)
sum_log
<- apply(dtm_log_mw_matrix, 1, function(x) {
top_words_log <- names(sort(x, decreasing = TRUE))
sorted 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
<- DocumentTermMatrix(books_corpus_mw, control = list(weighting = weightTfIdf))
dtm_tfidf_mw 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)
<- as.data.frame(as.matrix(dtm_tfidf_mw)) dtm_tfidf_mw_matrix
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:
<- rowSums(dtm_tfidf_mw_matrix)
sum_tfidf
<- apply(dtm_tfidf_mw_matrix, 1, function(x) {
top_words_tfidf <- names(sort(x, decreasing = TRUE))
sorted 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 |
<- data.frame(Słowa = seq(1,10),
table_eighty_days = top_words_tf[, "Eighty_days"],
Częstość TfIdf = top_words_tfidf[, "Eighty_days"])
<- data.frame(Słowa = seq(1,10),
table_all_moon = top_words_tf[, "All_moon"],
Częśotść 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ą.