R Academy · Oppitunti

Tokenisointi ja stop-sanojen poistaminen

Jakakaa teksti tokeneiksi ja suodattakaa epäinformatiiviset sanat anti_join()-funktiolla.

Oppitunti 1/413 vaihetta

Tokenisointi ja stop-sanojen poistaminen on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.

Mitä tekstinlouhinta on?

Tekstinlouhinta (tai tekstianalytiikka) muuntaa rakenteistamattoman tekstin rakenteiseksi dataksi, jota voidaan analysoida tilastollisesti. tidytext-paketti mahdollistaa tidy-lähestymistavan: jokainen rivi on yksi token (sana, bigrammi tai lause), joten data on yhteensopivaa pakettien dplyr ja ggplot2 kanssa.

library(tidytext)
library(dplyr)

# A simple text corpus
text_df <- tibble::tibble(
  doc_id = 1:3,
  text   = c(
    'The quick brown fox jumps over the lazy dog.',
    'Text mining with R is powerful and fun.',
    'Natural language processing enables many applications.'
  )
)

cat('Input: ', nrow(text_df), 'documents\n')
cat('Columns:', names(text_df), '\n')

unnest_tokens: sanojen tokenisointi

unnest_tokens(output, input) jakaa tekstin muotoon, jossa on yksi rivi tokenia kohden. Oletusarvoisesti se tokenisoi sanat, muuntaa ne pieniksi kirjaimiksi ja poistaa välimerkit. token-argumentti tukee arvoja 'words', 'ngrams', 'sentences' ja muita.

library(tidytext)
library(dplyr)

text_df <- tibble::tibble(
  doc_id = 1:2,
  text   = c(
    'R is a great language for data analysis.',
    'Text mining reveals hidden patterns in documents.'
  )
)

# Tokenise into words
tokens <- text_df |>
  unnest_tokens(word, text)

cat('Tokens extracted:', nrow(tokens), '\n')
print(tokens)

stop_words-aineisto

tidytext sisältää valmiin stop_words-tibblen, jossa on 1 149 yleistä englannin kielen stop-sanaa kolmesta sanastosta: SMART, Snowball ja onix. Näillä sanoilla ("the", "is", "and"…) on vain vähän semanttista merkitystä, joten ne yleensä poistetaan ennen analyysiä.

library(tidytext)
library(dplyr)

# Inspect the stop_words dataset
cat('Total stop words:', nrow(stop_words), '\n')
cat('Lexicons:', paste(unique(stop_words$lexicon), collapse = ', '), '\n')

# First few stop words from each lexicon
stop_words |>
  group_by(lexicon) |>
  slice_head(n = 3) |>
  print()

anti_join: stop-sanojen poistaminen

anti_join(tokens, stop_words, by = 'word') poistaa kaikki rivit, joiden word-sarakkeen arvo vastaa jotakin stop_words-aineiston arvoa. Tämä on vakiintunut tidytext-malli stop-sanojen poistamiseen — selkeä, luettava ja helposti laajennettava.

library(tidytext)
library(dplyr)

text_df <- tibble::tibble(
  doc_id = 1:3,
  text   = c(
    'The quick brown fox jumps over the lazy dog',
    'A stitch in time saves nine important words',
     'To be or not to be that is the question'
  )
)

tokens <- text_df |>
  unnest_tokens(word, text)

cat('Before removing stop words:', nrow(tokens), '\n')

tokens_clean <- tokens |>
  anti_join(stop_words, by = 'word')

cat('After removing stop words:', nrow(tokens_clean), '\n')
print(tokens_clean)

count: term frequency

Kun olette tokenisoineet tekstin ja poistaneet stop-sanat, laskekaa term frequency -arvot komennolla count(word, sort = TRUE). Tämä muodostaa monien tekstinlouhinta-analyysien perustan: merkitykselliset, useimmin esiintyvät sanat kuvaavat dokumentin aiheita.

library(tidytext)
library(dplyr)

# Use Jane Austen's novels from janeaustenr package
# For demo: simulate a small corpus
corpus <- tibble::tibble(
  text = c(
    'data science involves statistics programming analysis',
    'machine learning algorithms data patterns training',
    'statistics probability distributions random variables data',
    'programming languages python r julia statistics',
    'analysis patterns distributions algorithms science'
  )
)

word_counts <- corpus |>
  unnest_tokens(word, text) |>
  anti_join(stop_words, by = 'word') |>
  count(word, sort = TRUE)

cat('Top 8 words:\n')
print(head(word_counts, 8))

Mukautetut stop-sanat

Alakohtaisissa tekstikorpuksissa esiintyy usein paljon sanoja, jotka eivät ole analyysin kannalta merkityksellisiä (esimerkiksi "patient" ja "doctor" lääketieteellisissä muistiinpanoissa). Luokaa mukautettu stop-sanojen tibble ja yhdistäkää se valmiiseen sanastoon komennolla bind_rows().

library(tidytext)
library(dplyr)

# Domain-specific words to remove
custom_stops <- tibble::tibble(
  word   = c('data', 'analysis', 'r', 'using', 'also'),
  lexicon = 'custom'
)

# Combine with built-in stop words
all_stops <- bind_rows(stop_words, custom_stops)
cat('Total stop words after custom:', nrow(all_stops), '\n')

corpus <- tibble::tibble(
  text = c(
    'Using R for data analysis and machine learning models',
    'Statistical data analysis also involves data visualisation'
  )
)

clean_tokens <- corpus |>
  unnest_tokens(word, text) |>
  anti_join(all_stops, by = 'word') |>
  count(word, sort = TRUE)

print(clean_tokens)

Bigrammien tokenisointi

Asettakaa token = 'ngrams', n = 2, jotta teksti tokenisoidaan peräkkäisiksi sanapareiksi eli bigrammeiksi. Bigrammit tunnistavat ilmauksia, kuten "machine learning" ja "data science", joita yksittäiset sanat eivät pysty kuvaamaan, ja tarjoavat siten rikkaamman asiayhteyden.

library(tidytext)
library(dplyr)

corpus <- tibble::tibble(
  doc_id = 1:2,
  text = c(
    'machine learning and deep learning are powerful techniques',
    'natural language processing uses machine learning methods'
  )
)

bigrams <- corpus |>
  unnest_tokens(bigram, text, token = 'ngrams', n = 2)

cat('Bigrams extracted:', nrow(bigrams), '\n')
print(bigrams)

# Count most common bigrams
bigram_counts <- bigrams |> count(bigram, sort = TRUE)
cat('\nTop bigrams:\n')
print(head(bigram_counts, 5))

Bigrammien suodattaminen laadun perusteella

Useimmin esiintyviin bigrammeihin kuuluu stop-sanoista muodostuvia pareja, kuten "of the". Jakakaa bigrammi kahdeksi sarakkeeksi komennolla tidyr::separate(), suodattakaa pois rivit, joissa jompikumpi sana on stop-sana, ja yhdistäkää sanat sitten uudelleen merkityksellisiksi ilmauspareiksi.

library(tidytext)
library(dplyr)
library(tidyr)

corpus <- tibble::tibble(
  text = c(
    'the field of machine learning and deep learning is growing',
    'natural language processing is a subfield of artificial intelligence'
  )
)

bigrams_filtered <- corpus |>
  unnest_tokens(bigram, text, token = 'ngrams', n = 2) |>
  separate(bigram, into = c('word1', 'word2'), sep = ' ') |>
  filter(
    !word1 %in% stop_words$word,
    !word2 %in% stop_words$word
  ) |>
  unite(bigram, word1, word2, sep = ' ') |>
  count(bigram, sort = TRUE)

print(bigrams_filtered)

Sanojen frekvenssien visualisointi

Piirtäkää sanojen frekvenssit pylväskaaviona käyttämällä pakettia ggplot2. Järjestäkää pylväät komennolla reorder(word, n) ja käyttäkää coord_flip()-funktiota vaakasuuntaisia nimiöitä varten. Tämä on yksi tekstinlouhinnan havainnollisimmista tuloksista.

library(tidytext)
library(dplyr)
library(ggplot2)

corpus <- tibble::tibble(
  text = c(
    'statistics probability machine learning algorithms patterns',
    'data science programming analysis visualisation models',
    'machine learning deep learning neural networks patterns',
    'probability statistics hypothesis testing distributions',
    'algorithms optimisation gradient descent models training'
  )
)

top_words <- corpus |>
  unnest_tokens(word, text) |>
  anti_join(stop_words, by = 'word') |>
  count(word, sort = TRUE) |>
  slice_head(n = 10)

ggplot(top_words, aes(reorder(word, n), n)) +
  geom_col(fill = 'steelblue') +
  coord_flip() +
  labs(x = 'Word', y = 'Count', title = 'Top 10 Terms') +
  theme_minimal()

Dokumenttikohtaiset sanamäärät

Kun korpuksessa on useita dokumentteja, lisätkää dokumentin tunnisteen sisältävä sarake ja ryhmitelkää data doc_id, word-sarakkeiden perusteella dokumenttikohtaisten term frequency -arvojen laskemiseksi. Näin saatu data sopii suoraan TF-IDF- ja aihemallianalyyseihin.

library(tidytext)
library(dplyr)

docs <- tibble::tibble(
  doc_id = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
  text   = c(
    'machine learning models training',
    'neural networks deep learning',
    'algorithms gradient descent optimisation',
    'statistical analysis probability distributions',
    'hypothesis testing confidence intervals regression',
    'bayesian inference prior posterior likelihood',
    'data visualisation plots charts dashboards',
    'ggplot2 ggvis plotly interactive graphics',
    'colour scales aesthetics themes layers'
  )
)

word_counts <- docs |>
  unnest_tokens(word, text) |>
  anti_join(stop_words, by = 'word') |>
  count(doc_id, word, sort = TRUE)

cat('Word-doc pairs:', nrow(word_counts), '\n')
print(head(word_counts, 10))

Lauseiden tokenisointi

Asettakaa token = 'sentences', jotta teksti jaetaan lauserajojen kohdalta. Lausekohtaiset tokenit ovat hyödyllisiä tunneanalyysissä (kunkin lauseen pisteyttäminen), tiivistämisessä (edustavien lauseiden valitseminen) ja kysymys-vastaustehtävissä.

library(tidytext)
library(dplyr)

doc <- tibble::tibble(
  id   = 1L,
  text = paste(
    'R is a statistical programming language.',
    'It is widely used in data science and machine learning.',
    'The tidyverse makes data manipulation easy.',
    'Text mining with tidytext is elegant and powerful.'
  )
)

sentences <- doc |>
  unnest_tokens(sentence, text, token = 'sentences')

cat('Sentences found:', nrow(sentences), '\n')
print(sentences$sentence)

Pikatarkistus

Olette tokenisoineet korpuksen sanoiksi käyttämällä funktiota unnest_tokens() ja haluatte poistaa yleiset englannin kielen sanat. Millä operaatiolla tämä onnistuu valmiin stop_words-aineiston avulla?

Kertaus: tokenisointi ja stop-sanat

Keskeiset opit:

  • unnest_tokens(word, text) muuntaa raakatekstin tidy-muotoon, jossa on yksi rivi sanaa kohden
  • Oletuksena teksti muunnetaan pieniksi kirjaimiksi ja välimerkit poistetaan; tuettuja ovat 'words', 'ngrams' ja 'sentences'
  • stop_words on valmis tibble, joka sisältää 1 149 yleistä englannin kielen sanaa kolmesta sanastosta
  • anti_join(tokens, stop_words, by = 'word') poistaa stop-sanat
  • Yhdistäkää mukautetut alakohtaiset stop-sanat käyttämällä funktiota bind_rows()
  • count(word, sort = TRUE) laskee term frequency -arvot tidy-muotoisista tokeneista
  • Bigrammit: unnest_tokens(bigram, text, token = 'ngrams', n = 2)
library(tidytext)
library(dplyr)

tibble::tibble(text = 'The quick brown fox jumps over the lazy dog') |>
  unnest_tokens(word, text) |>
  anti_join(stop_words, by = 'word') |>
  count(word, sort = TRUE) |>
  print()
Aloita maksutta

Opi R tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
43
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Tokenisointi ja stop-sanojen poistaminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Tokenisointi ja stop-sanojen poistaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tokenisointi ja stop-sanojen poistaminen”?

Jakakaa teksti tokeneiksi ja suodattakaa epäinformatiiviset sanat anti_join()-funktiolla. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Tokenisointi ja stop-sanojen poistaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?

Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Tokenisointi ja stop-sanojen poistaminen
  2. TF-IDF ja term frequency -analyysi
  3. Sentimenttianalyysi R:ssä
  4. Aiheiden mallintaminen LDA:lla
← Takaisin: R Academy