计算音节

时间:2011-12-17 23:36:03

标签: r text-mining

我希望为R中的文本分配一些不同的可读性分数,例如Flesh Kincaid。

有没有人知道使用R将单词分成音节的方法?我不一定需要自己的音节片段,而是计数。

所以例如:

x <- c('dog', 'cat', 'pony', 'cracker', 'shoe', 'Popsicle')

会产生: 1,1,2,2,1,3

每个数字对应单词中的音节数。

4 个答案:

答案 0 :(得分:11)

qdap version 1.1.0执行此任务:

library(qdap)
x <- c('dog', 'cat', 'pony', 'cracker', 'shoe', 'Popsicle')
syllable_sum(x)

## [1] 1 1 2 2 1 3

答案 1 :(得分:8)

gsk3是正确的:如果您需要正确的解决方案,则非平凡

例如,你必须注意一些单词末尾的无声e之类的奇怪事物(例如 pane ),或者知道它何时不是静音,如结局

但是,如果你只想要一个快速和肮脏的近似,这样就可以了:

> nchar( gsub( "[^X]", "", gsub( "[aeiouy]+", "X", tolower( x ))))
[1] 1 1 2 2 1 3

要了解这些部分是如何工作的,只需从外部删除函数调用,从nchar开始,再到gsub等等......直到表达式对你有意义

但是我的猜测是,考虑到R的力量与英语中异常的大量之间的斗争,你可以得到一个不错的答案(可能99%对吗?)通过普通文本解析,没有大量的工作 - 哎呀,上面的简单解析器可能会得到90%+正确。如果你愿意,可以用更多的工作来处理沉默的电影。

这完全取决于您的应用程序 - 这是足够好还是您需要更准确的内容。

答案 2 :(得分:5)

这里有一些NLP工具:

http://cran.r-project.org/web/views/NaturalLanguageProcessing.html

但这项任务并非易事。这里有更多提示(包括你可以实现的算法):

Detecting syllables in a word

答案 3 :(得分:4)

koRpus软件包可以帮助你解决问题,但是它有点难以使用。

stopifnot(require(koRpus))
tokens <- tokenize(text, format="obj", lang='en')
flesch.kincaid(tokens)