Я пытаюсь построить алгоритм прогнозирования слов, используя простую модель отсрочки, но изо всех сил пытаюсь создать таблицу частот слов, чтобы создать вероятности выбора следующего слова. Мне нужно создать списки ngrams с их соответствующей частотой.
Задание является частью курса, поэтому я не могу предоставить данные, так как они получены из школы. Образец, который я использую, состоит из 10 000 предложений, и каждое предложение имеет разную длину.
У меня есть решение, но я знаю, что это плохой тон, потому что я зацикливаюсь с rbind и, очевидно, это занимает слишком много времени.
library(quanteda)
library(data.table)
ntimes2<- ngrams(tokenize(sampNews,removePunct = TRUE,removeNumbers = TRUE,
removeTwitter=TRUE),n=2)
listwords<- function(input){
words<-data.frame(x=0)
for (i in 1:10102){
words<- rbind(words, input[i])
}
words<<-words
}
listwords(ntimes2)
Однако я не знаю, как по-другому извлечь предложения из токенизированного списка.
Я пробовал использовать stylo txt.to.words, однако я не могу достаточно хорошо контролировать правило разделения, чтобы исключить все варианты пунктуации. В частности, я хочу, чтобы апострофы не создавали разделение слов.
words<-txt.to.words(sampNews,splitting.rule = "[[:space]]|(?=[^,[:^punct:]])")
words<-txt.to.words(sampNews,splitting.rule = "(_| |,|?|#|@)")
Это работает, но только для ограниченного числа сплиттеров.
words<-txt.to.words(sampNews,splitting.rule = "(_| )")
strsplit разбивает слова, однако он содержит структуру нескольких списков, что по-прежнему означает, что мне нужно перебрать данные, чтобы вытащить их в основной список / фрейм данных, чтобы я мог создать таблицу частот.
words<- strsplit(sampNews, "[[:space:]]|(?=[^,'[:^punct:]])", perl=TRUE)
[[5]]
[1] "And" "when" "it's" "often" "difficult"
[6] "to" "predict" "a" "law's" "impact,"
[11] "legislators" "should" "think" "twice" "before"
[16] "carrying" "any" "bill" "." ""
[21] "Is" "it" "absolutely" "necessary" "?"
[26] "" "Is" "it" "an" "issue"
[31] "serious" "enough" "to" "merit" "their"
[[6]]
[1] "There" "was" "a" "certain" "amount"
[6] "of" "scoffing" "going" "around" "a"
Я пробовал sapply/lapply/rbindlist, но, возможно, я использовал их неправильно, поэтому, пожалуйста, предлагайте решения, включая эти.
Любые советы очень ценятся.
J
Добавление некоторых данных для ощущения
sampНовости[1:2]
[1] "He wasn't home alone, apparently."
[2] "The St. Louis plant had to close. It would die of old age. Workers had been making cars there since the onset of mass automotive production in the 1920s."
> class(sampNews)
[1] "character"