我想在R中为文本分配一些不同的可读性评分,比如Flesh Kincaid。
有人知道使用R将单词分割成音节的方法吗?我不一定需要音节本身,只需要计数。
例如:
x <- c('dog', 'cat', 'pony', 'cracker', 'shoe', 'Popsicle')
会产生以下结果:
1, 1, 2, 2, 1, 3
每个数字对应单词中的音节数。
我想在R中为文本分配一些不同的可读性评分,比如Flesh Kincaid。
有人知道使用R将单词分割成音节的方法吗?我不一定需要音节本身,只需要计数。
例如:
x <- c('dog', 'cat', 'pony', 'cracker', 'shoe', 'Popsicle')
会产生以下结果:
1, 1, 2, 2, 1, 3
每个数字对应单词中的音节数。
qdap版本1.1.0可以完成这项任务:
library(qdap)
x <- c('dog', 'cat', 'pony', 'cracker', 'shoe', 'Popsicle')
syllable_sum(x)
## [1] 1 1 2 2 1 3
gsk3是正确的:如果你想要一个正确的解决方案,那就是非常不容易的。
例如,你必须注意一些奇怪的事情,比如单词末尾的沉默字母“e”(例如pane),或者知道它不是沉默的,比如finale。
然而,如果你只想要一个快速而简单的近似解,这个方法就可以:
> nchar( gsub( "[^X]", "", gsub( "[aeiouy]+", "X", tolower( x ))))
[1] 1 1 2 2 1 3
nchar
开始,然后是gsub
,等等......直到表达式对你有意义为止。http://cran.r-project.org/web/views/NaturalLanguageProcessing.html
但是,这项任务并不简单。在这里有更多提示(包括您可以实施的算法):koRpus包可以极大地帮助您,但使用起来有些困难。
stopifnot(require(koRpus))
tokens <- tokenize(text, format="obj", lang='en')
flesch.kincaid(tokens)
# 安装软件包(“devtools”); library(devtools); install_github("qdap", "trinker")
- Tyler Rinker
sapply(gregexpr("[aeiouy]+", x, ignore.case=TRUE), length)
。 - Ken Williams