Получить предыдущее слово в модели биграмма
Я пытаюсь реализовать цепочки Маркова и нужно вычислить вероятность предыдущего слова. Я создал фрейм данных и попробовал как мутировать, так и цикл for. В обоих случаях по какой-то причине он всегда возвращает только предыдущее слово 1-го элемента. Используемый фрейм данных
freq term
ball costs 1 ball costs
bat bal 1 bat bal
bat ball 1 bat ball
bread eggs 1 bread eggs
buy bread 1 buy bread
costs rupe 1 costs rupe
Я написал функцию, чтобы получить Предыдущий
getPrevious <- function(term)
{
b <- strsplit(term,split=" ")
c <- unlist(b)
c[1]
}
Я пробовал и мутировать, и цикл. Оба заполняют все строки только предыдущим словом 1-й строки (см. Ниже)
mutate(bigram, x= getPrevious(term))
и я, кажется, только
freq term prob x
1 1 ball costs 0.0625 ball
2 1 bat bal 0.0625 ball
3 1 bat ball 0.0625 ball
4 1 bread eggs 0.0625 ball
5 1 buy bread 0.0625 ball
6 1 costs rupe 0.0625 ball
Я не понимаю, почему он не может выбрать предыдущее слово из каждого термина. Я даже попробовал цикл для того же эффекта.
Куда я иду не так?
Спасибо Ганеша
1 ответ
Попробуйте с функцией:
getPrevious <- function(term)
{
sapply(strsplit(term,split=" "), head, 1)
}
Что вы сделали, так это то, что вы разбили каждый элемент столбца в списке, сместили его в вектор и взяли первый элемент этого вектора, ball
, Принимая во внимание, что вам нужно разделить каждый элемент столбца в списке и взять первое слово каждого элемента этого списка.