用R中的for循环计算单词

时间:2018-12-26 12:54:18

标签: r for-loop text-mining arabic

我使用R进行阿拉伯语文本挖掘 并且我想检查单词是否超过6个字符,请进行一些更改

,它正在工作,但仅返回第一个单词 这是我的代码

LL<- "بنزين سائقين تعملين مخينعو ينام"
    n2<- length(LL)
    for (i in 1:n2 ){
         for (j in 1:n2){
            o[j] <-(strsplit(LL[i], " "))
                    K<-ifelse(nchar(o[[j]][j])>=6 ,gsub('(?<=\\p{L})\\x{064A}\\x{0646}$', '', o[[j]][j], perl = TRUE),o[[j]][j])
                    return( print(K))
         } }

  [1] "بنزين"

我想我需要添加j ++ 但我不知道该在哪里添加 谢谢

1 个答案:

答案 0 :(得分:2)

您可以无循环执行该任务

words <- unlist(strsplit(LL, " "))
nchar(words)
# returns
[1] 5 6 6 6 4

其余的可能也可以使用矢量化来完成,例如

K <- character(length(words))
K[nchar(words) < 6] <- words[nchar(words) < 6]
K[nchar(words) > 5] <- gsub('(?<=\\p{L})\\x{064A}\\x{0646}$', '', 
                            words[nchar(words) > 5], perl = TRUE)
# result
K
[1] "بنزين"  "سائق"   "تعمل"   "مخينعو" "ينام"  

附带说明:

  • 您在循环内使用return-我认为这不是使用它的正确方法。一个简单的print(...)就足够了。
  • 此外,每当结果不是预期的大小并且涉及ifelse时,您可能要检查条件语句的长度,因为这将确定结果的大小。