2012-09-26 15 views
6

Leo un texto en R usando la función readChar(). Mi objetivo es probar la hipótesis de que las oraciones del texto tienen tantas ocurrencias de la letra "a" como las ocurrencias de la letra "b". Recientemente descubrí el paquete {stringr}, que me ayudó mucho a hacer cosas útiles con mi texto, como contar el número de caracteres y el número total de ocurrencias de cada letra en el texto completo. Ahora, necesito saber el número de oraciones en todo el texto. ¿Tiene R alguna función, que puede ayudarme a hacer eso? ¡Muchas gracias!¿Cómo contar el número de oraciones en un texto en R?

Respuesta

11

Gracias @ gui11aume por su respuesta. Un muy buen paquete que acabo de encontrar que puede ayudar a hacer el trabajo es {openNLP}. Este es el código para hacer eso:

install.packages("openNLP") ## Installs the required natural language processing (NLP) package 
install.packages("openNLPmodels.en") ## Installs the model files for the English language 
library(openNLP) ## Loads the package for use in the task 
library(openNLPmodels.en) ## Loads the model files for the English language 

text = "Dr. Brown and Mrs. Theresa will be away from a very long time!!! I can't wait to see them again." ## This sentence has unusual punctuation as suggested by @gui11aume 

x = sentDetect(text, language = "en") ## sentDetect() is the function to use. It detects and seperates sentences in a text. The first argument is the string vector (or text) and the second argument is the language. 
x ## Displays the different sentences in the string vector (or text). 

[1] "Dr. Brown and Mrs. Theresa will be away from a very long time!!! " 
[2] "I can't wait to see them again." 

length(x) ## Displays the number of sentences in the string vector (or text). 

[1] 2 

El paquete {openNLP} es realmente grande para el procesamiento del lenguaje natural en R y se puede encontrar una introducción buena y corta a lo here o se puede revisar la documentación del paquete de here.

Tres idiomas más son compatibles con el paquete. Solo necesita instalar y cargar los archivos de modelo correspondientes.

  1. {openNLPmodels.es} de español
  2. {openNLPmodels.ge} para el alemán
  3. {openNLPmodels.th} para tailandés
+1

La función sentDetect no está disponible en ningún paquete .... –

+1

@ManojKumar En realidad, el paquete 'openNLP' fue cambiado drásticamente hace unos años. Verifique la segunda respuesta en esta pregunta: http://stackoverflow.com/questions/18370518/r-opennlp-could-not-find-function-sentdetect – SavedByJESUS

6

Lo que está buscando es la tokenización de oraciones, y no es tan sencillo como parece, incluso en inglés (frases como "Conocí al Dr. Bennett, el ex marido de la Sra. Johson." Pueden contener puntos) .

R es definitivamente no la mejor opción para el procesamiento del lenguaje natural. Si es Python competente, le sugiero que eche un vistazo al módulo nltk, que cubre este y muchos otros temas. También puede copiar el código de this blog post, que hace tokenización de oraciones y tokenización de palabras.

Si desea seguir con R, le sugiero que cuente los caracteres de fin de frase (., ?, !), ya que puede contar caracteres. Una forma de hacerlo con una expresión regular es así:

text <- 'Hello world!! Here are two sentences for you...' 
length(gregexpr('[[:alnum:] ][.!?]', text)[[1]]) 
+0

¿Por qué es R no es una buena opción, @SavedByJESUS ​​parece haber encontrado un paquete que contiene una función de dividir el texto en oraciones Además, su solución en R no es realmente una solución por las razones que se da a sí mismo, p. Dr. Fastolfe. –

+0

@PaulHiemstra R es un lenguaje de programación de rápido crecimiento con todos los paquetes adicionales que se agregan a diario que es difícil mantenerse al día con todo :) – SavedByJESUS

Cuestiones relacionadas