如何计算R中文本中的句子数?

时间:2012-09-26 08:51:13

标签: r text-mining

我使用readChar()函数将文本读入R中。我的目的是检验这样一个假设,即文本的句子出现的字母“a”与字母“b”的出现次数一样多。我最近发现了{stringr}包,这对我的文本做了很多有用的事情,比如计算整个文本中的字符数和每个字母的出现次数。现在,我需要知道整篇文章中的句子数量。 R有任何功能,可以帮我做到吗?非常感谢你!

2 个答案:

答案 0 :(得分:11)

谢谢@ gui11aume的回答。我刚刚发现的一个非常好的包可以帮助完成这项工作{openNLP}。这是执行此操作的代码:

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

{openNLP}软件包非常适合R中的自然语言处理,您可以找到它的简短介绍here,或者您可以查看软件包的文档here。< / p>

包中还支持三种语言。您只需安装并加载相应的模型文件即可。

  1. {openNLPmodels.es}代表西班牙语
  2. {openNLPmodels.ge}代表德语
  3. {openNLPmodels.th} for Thai

答案 1 :(得分:6)

你正在寻找的是句子标记化,它并不像看起来那么简单,即使是在英语中(句子如“我遇见了Bennett博士,约翰逊夫人的前任丈夫。”可以包含句号)。

R绝对是自然语言处理的最佳选择。如果您Python精通,我建议您查看nltk模块,其中包含此模块和许多其他主题。您还可以复制this blog post中的代码,该代码执行句子标记化和单词标记化。

如果您想坚持R,我建议您计算句末字符(.?!),因为您可以计算字符数。使用正则表达式执行此操作的方式如下:

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