R Извлеките все слова из нескольких предложений и создайте частотную таблицу энграмм

Я пытаюсь построить алгоритм прогнозирования слов, используя простую модель отсрочки, но изо всех сил пытаюсь создать таблицу частот слов, чтобы создать вероятности выбора следующего слова. Мне нужно создать списки 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"

person James Oliver    schedule 22.12.2015    source источник


Ответы (1)


оказывается, что txt.to.words.ext работает достаточно хорошо, когда language="English.contr"

Язык не указывается, хотя он устанавливается как английский и обрабатывается так же, как базовый текст txt.to.words.

person James Oliver    schedule 22.12.2015