我一直在尝试实现本文最近提出的算法.给定大量的文本(语料库)的,该算法应该返回特性Ñ -grams(即,序列Ñ语料库的话).用户可以决定适当的n,并且在我尝试使用n = 2-6时,就像在原始论文中一样.换句话说,使用该算法,我想提取表征语料库的2到6克.
我能够实现基于哪个特征n -gram被识别来计算得分的部分,但是一直在努力消除非特征性的.
我有一个名为的列表token.df,其中包含五个数据框,包括出现在语料库中的所有n- gram.每个数据帧对应于n- gram中的每个n.例如,按字母顺序包括所有bigrams(2-gram)及其分数(下面称为mi).token.df[[2]]
> head(token.df[[2]])
w1 w2 mi
_ eos 17.219346
_ global 7.141789
_ what 8.590394
0 0 2.076421
0 00 5.732846
0 000 3.426785
Run Code Online (Sandbox Code Playgroud)
在这里,二元组0 0(虽然它们不是这样的单词)的得分为2.076421.由于数据框包括出现在语料库中的所有n- gram,因此它们每行都有超过一百万行.
> sapply(token.df, nrow)
[[1]]
NULL
[[2]]
[1] 1006059 # number of unique bigrams in the corpus
[[3]]
[1] 2684027 # number of unique trigrams …Run Code Online (Sandbox Code Playgroud) 我正在操纵我的数据,发现我在这个过程中的某些方面做错了.当我探讨这个问题,这个问题归结为以下行为spread()的tidyr包.
这是一个示范性的例子.我们假设我们有一个如下数据框.
> d <- data.frame(factor1 = rep(LETTERS[1:3], each = 3),
+ factor2 = rep(paste0("level", c(1, 2, 10)), 3),
+ num = 1:9
+ )
> d
factor1 factor2 num
1 A level1 1
2 A level2 2
3 A level10 3
4 B level1 4
5 B level2 5
6 B level10 6
7 C level1 7
8 C level2 8
9 C level10 9
Run Code Online (Sandbox Code Playgroud)
我想要做的是将这个长格式的数据帧转换为宽格式.我认为这spread()是一种方法.然而,结果并不是我的预期.
> spread(d, factor2, num)
factor1 level1 level2 …Run Code Online (Sandbox Code Playgroud)