unnest_tokens
очищает знаки препинания. Это удаляет дефисы между сложными словами.
Для этого вы можете использовать quanteda или tm, так как эти пакеты по умолчанию не удаляют пунктуацию. В приведенных ниже примерах предполагается, что у вас есть data.frame и вы работаете с корпусом. Но функция quanteda tokens
может работать непосредственно с текстовыми столбцами.
example <- c("bovine retention-of-placenta sulpha-trimethoprim mineral-vitamin-liquid-mixture")
diagnostics <- data.frame(text = example, stringsAsFactors = FALSE)
с квантидой:
library(quanteda)
qcorp <- corpus(diagnostics)
bigrams <- tokens_ngrams(tokens(qcorp), n = 2, concatenator = " ")
qdfm <- dfm(bigrams)
convert(qdfm, "data.frame")
document bovine retention-of-placenta retention-of-placenta sulpha-trimethoprim sulpha-trimethoprim mineral-vitamin-liquid-mixture
1 text1 1 1 1
только квантида tokens_ngrams
с использованием примера вектора:
tokens_ngrams(tokens(example), n = 2, concatenator = " ")
tokens from 1 document.
text1 :
[1] "bovine retention-of-placenta" "retention-of-placenta sulpha-trimethoprim"
[3] "sulpha-trimethoprim mineral-vitamin-liquid-mixture"
Редактировать:
Чтобы получить вектор ваших терминов, вы можете использовать один из других вариантов конвертации и использовать $ vocab для получения терминов.
convert(qdfm, "lda")$vocab
[1] "bovine retention-of-placenta" "retention-of-placenta sulpha-trimethoprim"
[3] "sulpha-trimethoprim mineral-vitamin-liquid-mixture"
Tidy data.frame:
tidytext имеет функцию tidy
для преобразования данных из различных пакетов в аккуратную форму. Оба квантеда и тм включены. Таким образом, после получения данных в dfm вы можете использовать tidy, чтобы поместить данные в таблицу. После этого удалите все интересующие вас столбцы с обычным синтаксисом dplyr.
tidy(qdfm)
# A tibble: 3 x 3
document term count
<chr> <chr> <dbl>
1 text1 bovine retention-of-placenta 1
2 text1 retention-of-placenta sulpha-trimethoprim 1
3 text1 sulpha-trimethoprim mineral-vitamin-liquid-mixture 1
конец редактирования:
с тм:
library(tm)
NLPBigramTokenizer <- function(x) {
unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE)
}
corp <- VCorpus(VectorSource(example))
dtm <- DocumentTermMatrix(corp, control=list(tokenize = NLPBigramTokenizer))
inspect(dtm)
<<DocumentTermMatrix (documents: 1, terms: 3)>>
Non-/sparse entries: 3/0
Sparsity : 0%
Maximal term length: 50
Weighting : term frequency (tf)
Sample :
Terms
Docs bovine retention-of-placenta retention-of-placenta sulpha-trimethoprim sulpha-trimethoprim mineral-vitamin-liquid-mixture
1 1 1 1