Подсчет слов в факторах - PullRequest
       7

Подсчет слов в факторах

2 голосов
/ 08 октября 2010

У меня есть миллионы ключевых слов в столбце, помеченном как Keyword.text.Каждый фактор или ключевое слово может содержать несколько слов (или, скажем, токен).Вот пример с 4 ключевыми словами

Keyword.text
Быстрая коричневая лиса,
.8. Crazy Lazy Dog
собака
перепрыгивает + 9

Я бы хотел подсчитать количество токенов в каждом ключевом слове, чтобы получить:

Keyword.length
5
4
1
4

Я установил пакет Tau, но я не продвинулся слишком далеко ...

 textcnt(Mydf$Keyword.text, split = "[[:space:][:punct:]]+", method = "string", n = 1L)

возвращает ошибку, которую я не понимаю.Может быть, это связано с наличием факторов;при работе со строкой это работало нормально.

Я знаю, как это сделать в Excel, но это не работает для последней строки.Если у A2 есть ключевые слова, то: = LEN (TRIM (A2)) - LEN (ЗАМЕНА (A2, "", "")) + 1 сделает

Ответы [ 3 ]

2 голосов
/ 09 октября 2010

Редактировать: для фрейма данных и общего количества ключевых слов просто используйте strsplit. Нет необходимости использовать strcnt, если вас не интересует число на ключевое слово . Вот где я вас неправильно понял:

tt <- data.frame(
    a=rnorm(3),
    b=rnorm(3),
    c=c("the quick fox lazy","rbrown+fr even","what what goes & around"),
    stringsAsFactors=F
)
sapply(tt$c, function(n){
  length(strsplit(n, split = "[[:space:][:punct:]]+")[[1]])
})

Чтобы прочитать данные, взгляните также на «readLines и / или» scan. Это сохраняет формат строки и позволяет обрабатывать файл строка за строкой (или строка за строкой). Если вы используете файловое соединение, вы можете даже загрузить файл по частям, что поможет вам, когда вы достигнете пределов памяти.

Простой пример с использованием readLines:

con <- textConnection("
The lazy fog+fog fog
never ended for fog jumping over the
fog whatever . $ plus.
")
# You use con <- file("myfile.txt")
Text <- readLines(con)
sapply(Text,textcnt, split = "[[:space:][:punct:]]+", method = "string", n = 1L)

В sidenote использование упомянутой опции Dirk (stringsAsFactors=F) не снизит производительность по сравнению с обычной командой read.table. На самом деле наоборот. Вы должны использовать sapply, как указано выше, но заменить текст на as.character(Mydf$Keyword.text) (или использовать опцию stringsAsFactors=F и удалить as.character().

1 голос
/ 08 октября 2010

Пожалуйста, покажите ошибку.

Также попробуйте:

require(tau)
textcnt(as character(Mydf$Keyword.txt), split, ....) 

..., чтобы включить режим ввода символов.

Или загрузите ваши данные с stringsAsFactors=FALSE - тот же вопрос уже задавался здесь раньше.

0 голосов
/ 16 октября 2014

А как насчет милой маленькой функции, которая позволяет нам также решить , какой тип слов мы бы хотели посчитать, а какой работает и для целых векторов ?

require(stringr)
nwords <- function(string, pseudo=F){
  ifelse( pseudo, 
          pattern <- "\\S+", 
          pattern <- "[[:alpha:]]+" 
        )
  str_count(string, pattern)
}

nwords("one,   two three 4,,,, 5 6")
# 3

nwords("one,   two three 4,,,, 5 6", pseudo=T)
# 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...