Skip to contents

Analysis expects input data to be in numerical form. Here we provide two examples of how to convert text data from tabular form to matrix format: one using simple bag-of-words approach and two ways using ngrams, namely bigram and trigram.

Bag-of-Words representation

Pre processing aspol corpus and calculating document term count (dtc) using bag-of-words representation (single word as a basic unit). Single term per document per row.

bow <- aspol |>
  preprocess_corpus(kunta) |>
  count(kunta, LEMMA, name = "dtc")
bow
#> # A tibble: 48,269 × 3
#>    kunta     LEMMA            dtc
#>    <chr>     <chr>          <int>
#>  1 Enontekiö A#talo             3
#>  2 Enontekiö Vapaa#aika         1
#>  3 Enontekiö aiheuttaa          3
#>  4 Enontekiö aika               7
#>  5 Enontekiö aika#väli          1
#>  6 Enontekiö ajatella           1
#>  7 Enontekiö alhainen           1
#>  8 Enontekiö alku               1
#>  9 Enontekiö alku#peräinen      1
#> 10 Enontekiö alku#puoli         1
#> 11 Enontekiö alue              17
#> 12 Enontekiö antaa              3
#> 13 Enontekiö arava#laina        1
#> 14 Enontekiö arava#rajoitus     1
#> 15 Enontekiö arvioida           1
#> 16 Enontekiö asettaa            2
#> 17 Enontekiö asia               3
#> 18 Enontekiö asiakas            3
#> 19 Enontekiö asian#mukainen     1
#> 20 Enontekiö asua               5
#> # ℹ 48,249 more rows

Converting original corpus to document term matrix.

dtm <- bow |>
  cast_dfm(document = kunta, term = LEMMA, value = dtc)  # quanteda format
  # cast_dtm(document = kunta, term = LEMMA, value = dtc)  # tm format
dtm
#> Document-feature matrix of: 68 documents, 3,038 features (76.63% sparse) and 0 docvars.
#>              features
#> docs          A#talo Vapaa#aika aiheuttaa aika aika#väli ajatella alhainen alku alku#peräinen alku#puoli alue antaa arava#laina arava#rajoitus arvioida asettaa asia asiakas asian#mukainen asua
#>   Enontekiö        3          1         3    7         1        1        1    1             1          1   17     3           1              1        1       2    3       3              1    5
#>   Espoo            0          0         1   18         3        0        4    1             1          0  108     2           0              0        9      10    3       1              0   11
#>   Eura             0          0         1    5         0        0        1    0             0          0   10     1           0              0        3       1    1       6              0    7
#>   Hartola          0          1         2    5         0        0        0    0             0          0    4     0           0              0        3       0    0       0              0    6
#>   Hattula          0          0         0    6         0        0        0    1             0          0   17     1           0              0        0       1    1       0              0    3
#>   Helsinki         0          0         3   46         4        0        5   12             0          1  139     7           0              0       26      13    8       6              1   57
#>   Huittinen        2          0         0   13         1        5        2    0             0          0   16     3           0              0        4       3   13       4              0    8
#>   Hyvinkää         0          0         0    1         0        0        0    0             0          0    0     0           0              0        1       0    0       0              0    9
#>   Hämeenlinna      0          3         3    1         0        0        0    1             0          0   18     3           0              0        2       0   29       3              0   10
#>   Iitti            0          0         0    0         0        0        0    1             0          0   18     5           0              0        0       1    0       0              0    0
#>   Imatra           0          0         0    2         0        0        0    0             0          0    6     0           0              0        2       0    1       0              0   11
#>   Inkoo            0          0         1   11         1        0        1    2             0          0   26     4           0              0        0       5    2       0              0    3
#>   Joensuu          0          0         1   33         2        1        4    4             1          0  129     2           0              1        9      13    5       4              0   25
#>   Juva             0          0         2   13         5        0        2    3             0          0   19     2           1              0        1       2    2       3              0   10
#>   Järvenpää        0          0         0    2         0        0        0    0             0          0    7     1           0              0        0       3    2       0              0   11
#>   Kaarina          0          1         2   15         6        0        0    1             0          0   55     4           0              0        4       4    3       0              0    8
#>   Kalajoki         0          0         0    1         0        0        0    0             0          0    5     0           0              0        2       0    0       0              0    0
#>   Kauniainen       0          0         2   14         0        1        0    1             0          1  104     4           0              0       12       6    1       3              0   17
#>   Kemiönsaari      0          3         3   12         1        1        1    3             2          0  136    14           0              0        3       3    1       2              0    8
#>   Kerava           0          0         2    0         0        0        0    0             0          0   13     3           0              0        2       5    0       0              0    0
#> [ reached max_ndoc ... 48 more documents, reached max_nfeat ... 3,018 more features ]

It is possible to convert from one format to another with quanteda::convert() function. For example some functions require data to be in tm format.

dtm |>
  quanteda::convert(to = "tm")
#> <<DocumentTermMatrix (documents: 68, terms: 3038)>>
#> Non-/sparse entries: 48269/158315
#> Sparsity           : 77%
#> Maximal term length: 27
#> Weighting          : term frequency (tf)

Ngrams

Bigram and trigram

ngram <- aspol |> 
  preprocess_corpus(kunta) |> 
  mutate(LEMMA2 = lead(LEMMA, default = "", n = 1), 
         LEMMA3 = lead(LEMMA, default = "", n = 2), 
         bigram = paste0(LEMMA, " ",  LEMMA2),
         trigram = paste0(LEMMA, " ", LEMMA2, " ", LEMMA3),
         .by = kunta)  # c(kunta, sent) limits the words to same sentence
count(ngram, bigram, sort = TRUE)
#> # A tibble: 105,111 × 2
#>    bigram                          n
#>    <chr>                       <int>
#>  1 asunto#poliittinen ohjelma    573
#>  2 huone huone                   290
#>  3 kaupunki omistaa              193
#>  4 maa#poliittinen ohjelma       166
#>  5 henkilö henkilö               161
#>  6 kaupunki asunto#poliittinen   161
#>  7 ottaa huomio                  151
#>  8 erityis#ryhmä asuminen        143
#>  9 kaupunki kaupunki             129
#> 10 tehostaa palvelu#asuminen     127
#> 11 kunta omistaa                 123
#> 12 määrä kasvaa                  116
#> 13 valtio tukea                  112
#> 14 asuminen liittyä              109
#> 15 alue alue                     107
#> 16 keskusta alue                  83
#> 17 asunto#kunta määrä             81
#> 18 tukea asuminen                 80
#> 19 luoda edellytys                79
#> 20 kestävä kehitys                78
#> # ℹ 105,091 more rows
count(ngram, trigram, sort = TRUE)
#> # A tibble: 160,720 × 2
#>    trigram                                    n
#>    <chr>                                  <int>
#>  1 huone huone huone                        237
#>  2 kaupunki asunto#poliittinen ohjelma      134
#>  3 henkilö henkilö henkilö                  100
#>  4 kaupunki kaupunki asunto#ohjelma          64
#>  5 asuminen rahoitus kehittämis#keskus       47
#>  6 Rivi ketju#talo asuin#kerros#talo         44
#>  7 erillinen pien#talo Rivi                  44
#>  8 pien#talo Rivi ketju#talo                 44
#>  9 asunto#poliittinen ohjelma luonnos        42
#> 10 asunto#poliittinen ohjelma päivä          40
#> 11 huone huone tuntematon                    40
#> 12 ohjelma päivä hyvä                        40
#> 13 kaupunki#seutu maa#poliittinen ohjelma    39
#> 14 maan#käyttö asuminen liikenne             39
#> 15 huone tuntematon huone                    34
#> 16 kunta asunto#poliittinen ohjelma          34
#> 17 tuntematon huone huone                    34
#> 18 kiinnittää erityinen huomio               28
#> 19 valtio tukea asunto#tuotanto              28
#> 20 yksikkö kaupunki asunto#poliittinen       25
#> # ℹ 160,700 more rows
ngram |>
  count(kunta, bigram, name = "n") |>
  cast_dfm(document = kunta, term = bigram, value = n)
#> Document-feature matrix of: 68 documents, 105,111 features (97.90% sparse) and 0 docvars.
#>              features
#> docs          A#talo kaksio A#talo kiinteistö A#talo yhteinen Vapaa#aika asuminen aiheuttaa asiakas aiheuttaa paine aiheuttaa suora aika houkutella aika huhtikuu aika kuntalainen aika raportointi aika tontti aika valmistua aika yhtiö aika#väli suunnittelu ajatella kokonais#taloudellinen alhainen kiinteistö alku tuoda alku#peräinen kunto alku#puoli vuokra#asunto
#>   Enontekiö               1                 1               1                   1                 1               1               1               1             1                1                1           1              1          1                     1                               1                   1          1                   1                        1
#>   Espoo                   0                 0               0                   0                 0               0               0               0             0                0                0           0              1          0                     1                               0                   0          0                   0                        0
#>   Eura                    0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Hartola                 0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Hattula                 0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Helsinki                0                 0               0                   0                 0               0               0               0             0                0                0           0              2          0                     0                               0                   0          0                   0                        0
#>   Huittinen               0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Hyvinkää                0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Hämeenlinna             0                 0               0                   1                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Iitti                   0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Imatra                  0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Inkoo                   0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Joensuu                 0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Juva                    0                 0               0                   0                 0               0               0               0             0                0                0           0              0          2                     0                               0                   0          0                   0                        0
#>   Järvenpää               0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Kaarina                 0                 0               0                   0                 0               0               0               0             0                0                0           1              1          0                     0                               0                   0          0                   0                        0
#>   Kalajoki                0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Kauniainen              0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#>   Kemiönsaari             0                 0               0                   2                 0               0               0               0             0                0                0           1              0          0                     0                               0                   0          0                   1                        0
#>   Kerava                  0                 0               0                   0                 0               0               0               0             0                0                0           0              0          0                     0                               0                   0          0                   0                        0
#> [ reached max_ndoc ... 48 more documents, reached max_nfeat ... 105,091 more features ]
ngram |>
  count(kunta, trigram, name = "n") |>
  cast_dfm(document = kunta, term = trigram, value = n)
#> Document-feature matrix of: 68 documents, 160,720 features (98.45% sparse) and 0 docvars.
#>              features
#> docs          A#talo kaksio kaksio A#talo kiinteistö perus#korjata A#talo yhteinen sauna Vapaa#aika asuminen lisääntyä aiheuttaa asiakas tulla aiheuttaa paine vuokra#asuminen aiheuttaa suora sähkö#lämmitys aika houkutella paikallinen aika huhtikuu alku aika kuntalainen matkailija aika raportointi konserni#johto aika tontti pari#talo aika valmistua pien#talo aika yhtiö tulla aika#väli suunnittelu tuottavuus ajatella kokonais#taloudellinen vaihto#ehto alhainen kiinteistö huono#kuntoinen alku tuoda paikka#kunta alku#peräinen kunto perus#korjata alku#puoli vuokra#asunto kysyntä
#>   Enontekiö                      1                               1                     1                             1                       1                               1                              1                           1                  1                           1                               1                     1                        1                1                                1                                           1                                   1                       1                                 1                                1
#>   Espoo                          0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Eura                           0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Hartola                        0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Hattula                        0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Helsinki                       0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Huittinen                      0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Hyvinkää                       0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Hämeenlinna                    0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Iitti                          0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Imatra                         0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Inkoo                          0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Joensuu                        0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Juva                           0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Järvenpää                      0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Kaarina                        0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Kalajoki                       0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Kauniainen                     0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Kemiönsaari                    0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#>   Kerava                         0                               0                     0                             0                       0                               0                              0                           0                  0                           0                               0                     0                        0                0                                0                                           0                                   0                       0                                 0                                0
#> [ reached max_ndoc ... 48 more documents, reached max_nfeat ... 160,700 more features ]