将功能应用于textreuse语料库

时间:2018-03-01 02:12:55

标签: r nlp text-mining corpus

我的数据框如下:

df<-data.frame(revtext=c('the dog that chased the cat', 'the dog which chased the cat', 'World Cup Hair 2014 very funny.i can change', 'BowBow', 'this is'), rid=c('r01','r02','r03','r04','r05'), stringsAsFactors = FALSE)

                             revtext        rid
             the dog that chased the cat    r01
             the dog which chased the cat   r02
World Cup Hair 2014 very funny.i can change r03
             Bow Bow                        r04
             this is                        r05

我正在使用包textreusedf转换为corpus

#install.packages(textreuse)
library(textreuse)
d<-df$revtext
names(d)<-df$rid
corpus <- TextReuseCorpus(text = d,
                      tokenizer = tokenize_character, k=3,
                      progress = FALSE,
                      keep_tokens = TRUE)

其中tokenize_character是我编程为的函数:

 tokenize_character <- function(document, k) {
                       shingles<-c()
                 for( i in 1:( nchar(document) - k + 1 ) ) {
                         shingles[i] <- substr(document,start=i,stop= (i+k-1))
                     }
return( unique(shingles) )  
}   

但是,我提示了一些警告:Skipping document with ID 'r04' because it has too few words to create at least two n-grams with n = 3.。但请注意我的tokenizer在角色级别上工作。 r04的文字足够长。事实上,如果我们运行tokenize_character('BowBow',3),我们会根据需要获得:"Bow" "owB" "wBo"

另请注意,对于r01TextReuseCorpus按预期工作,返回:tokens(corpus)$`r01= "the" "he " "e d" " do" "dog" "og " "g t" " th" "tha" "hat" "at " "t c" " ch" "cha" "has" "ase" "sed" "ed " "d t" "e c" " ca" "cat"

有什么建议吗?我不知道我在这里失踪了什么。

1 个答案:

答案 0 :(得分:2)

来自textreuse::TextReuseCorpus documentation的详情部分:

  

如果skip_short = TRUE,此函数将跳过很短或空   文档。一个非常简短的文件是一个只有两个字的文件   创造至少两个n-gram。例如,如果是5克   希望,然后一个文件必须至少六个字长。如果没有n的值   如果提供,则函数假定值为n = 3.

由此,我们知道具有&lt; 4个单词将作为短文档跳过(在您的示例中为n = 3),这是我们在r04&amp;有{1}的r05分别为2个字。 要不跳过这些文档,您可以使用skip_short = F按预期返回输出:

corpus <- TextReuseCorpus(text = d, tokenizer = tokenize_character, k=3,
                      skip_short = F, progress = FALSE, keep_tokens = TRUE)
tokens(corpus)$r04
[1] "Bow" "owB" "wBo"