计算音节

Tyl*_*ker 15 r text-mining

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

有没有人知道使用R将单词分成音节的方法?我不一定需要音节片段本身但需要计数.

例如:

x <- c('dog', 'cat', 'pony', 'cracker', 'shoe', 'Popsicle')
Run Code Online (Sandbox Code Playgroud)

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

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

Tyl*_*ker 11

qdap版本1.1.0执行此任务:

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

## [1] 1 1 2 2 1 3
Run Code Online (Sandbox Code Playgroud)


kfm*_*e04 8

gsk3是正确的:如果你想要一个正确的解决方案,这是非常重要的.

例如,你必须注意一些奇怪的东西,例如单词末尾的静音e(例如窗格),或者知道什么时候它不是沉默的,就像在结局中一样.

但是,如果你只想要一个快速和肮脏的近似,这将做到这一点:

> nchar( gsub( "[^X]", "", gsub( "[aeiouy]+", "X", tolower( x ))))
[1] 1 1 2 2 1 3
Run Code Online (Sandbox Code Playgroud)

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

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

这一切都取决于你的应用 - 这是否足够好或你需要更准确的东西.

  • 相同近似的更有效和更简单的版本将类似于"sapply"(gregexpr("[aeiouy] +",x,ignore.case = TRUE),length)`. (2认同)

Ari*_*man 5

这里有一些NLP工具:

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

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

检测单词中的音节


Zac*_*ach 5

koRpus软件包将帮助您解决很多问题,但使用起来有点困难。

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