在bigram模型中获取上一个单词

时间:2015-07-18 08:44:56

标签: r dplyr markov-chains

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

storage/logs/laravel.log

我写了一个函数来获取Previous

             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

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

getPrevious <- function(term)
{
    b <- strsplit(term,split=" ")
    c <- unlist(b)
    c[1]
 }

而我似乎只是

   mutate(bigram, x= getPrevious(term))

我不明白为什么它无法从每个学期中选择上一个单词。我甚至试过一个for循环来达到同样的效果。

我哪里错了?

由于 内甚

1 个答案:

答案 0 :(得分:1)

尝试使用功能:

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

您所做的是在列表中拆分列的每个元素,将其移动到向量并获取此向量的第一个元素ball。您需要在列表中拆分列的每个元素,然后获取此列表中每个元素的第一个单词