获取二元模型中的前一个词

Get previous word in a bigram model

我正在尝试实现马尔可夫链,需要计算前一个词出现的概率。我创建了一个数据框并尝试了 mutate 和 for 循环。在这两种情况下,由于某种原因,它总是只返回第一个元素的前一个词。使用的数据框是

             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]
 }

我尝试了 mutate 和 for 循环。两者都只用第一行的前一个词填充所有行(见下文)

   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

我不明白为什么它无法从每个术语中选择前一个词。我什至尝试了一个 for 循环来达到同样的效果。

我哪里错了?

谢谢 象头神

尝试使用函数:

getPrevious <- function(term)
{
    sapply(strsplit(term,split=" "), head, 1)
}

您所做的是将列表中列的每个元素拆分,将其转移到一个向量中并获取该向量的第一个元素 ball。而您需要拆分列表中列的每个元素,并且 取该列表每个元素的第一个单词