считать слова с для цикла в R - PullRequest
0 голосов
/ 26 декабря 2018

Я использую 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 голосов
/ 26 декабря 2018

Вы можете выполнить эту задачу без какого-либо цикла.

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, вы можете проверить длину оператора условия, так как он будет определять размеррезультат.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...