Подсчитать количество всех слов в строке - PullRequest
67 голосов
/ 19 января 2012

Есть ли функция для подсчета количества слов в строке?Например:

str1 <- "How many words are in this sentence"

для возврата результата 7.

Ответы [ 17 ]

4 голосов
/ 19 декабря 2012

Решение 7 не дает правильного результата в случае, если есть только одно слово.Вы не должны просто считать элементы в результате gregexpr (который равен -1, если там, где не совпадает), а считать элементы> 0.

Ergo:

sapply(gregexpr("\\W+", str1), function(x) sum(x>0) ) + 1 
1 голос
/ 30 ноября 2018

require (stringr)

Определение очень простой функции

str_words <- function(sentence) {

  str_count(sentence, " ") + 1

}

Проверка

str_words(This is a sentence with six words)
1 голос
/ 29 июня 2018

Также из пакета stringi, прямая функция stri_count_words

stringi::stri_count_words(str1)
#[1] 7
1 голос
/ 26 августа 2017
require(stringr)
str_count(x,"\\w+")

будет хорошо с двойным / тройным пробелом между словами

Все остальные ответы имеют проблемы с более чем одним пробелом между словами.

0 голосов
/ 12 марта 2019

С пакетом stringr можно также написать простой скрипт, который может проходить вектор строк, например, через цикл for.

Допустим,

df $ text

содержит вектор строк, которые мы хотим проанализировать.Сначала мы добавляем дополнительные столбцы к существующему фрейму данных df, как показано ниже:

df$strings    = as.integer(NA)
df$characters = as.integer(NA)

Затем запускаем цикл for для вектора строк, как показано ниже:

for (i in 1:nrow(df)) 
{
   df$strings[i]    = str_count(df$text[i], '\\S+') # counts the strings
   df$characters[i] = str_count(df$text[i])         # counts the characters & spaces
}

Полученные столбцы: строки и символ будут содержать количество слов и символов, и это будет достигнуто за один раз для вектора строк.

0 голосов
/ 28 марта 2019

Я нашел следующую функцию и регулярное выражение, полезные для подсчета слов, особенно при работе с одиночными и двойными дефисами, где первые обычно не должны рассматриваться как разрыв слова, например, общеизвестный hi-fi;в то время как двойной дефис - это пунктуатор, который не ограничен пробелами - например, для примечаний в скобках.

txt <- "Don't you think e-mail is one word--and not two!" #10 words
words <- function(txt) { 
length(attributes(gregexpr("(\\w|\\w\\-\\w|\\w\\'\\w)+",txt)[[1]])$match.length) 
}

words(txt) #10 words

Stringi - полезный пакет.Но в этом примере он переоценивает слова из-за дефиса.

stringi::stri_count_words(txt) #11 words
0 голосов
/ 06 января 2015

Используйте nchar

, если вектор строк называется x

(nchar(x) - nchar(gsub(' ','',x))) + 1

Узнайте количество пробелов и добавьте один

...