在R中计算带有for循环的单词

问题描述 投票:1回答:1

我用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 ++,但我不知道我应该在哪里添加它谢谢你

r for-loop text-mining arabic
1个回答
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,您可能需要检查条件语句的长度,因为这将决定结果的大小。
© www.soinside.com 2019 - 2024. All rights reserved.