Подсчет слогов

Я ищу, чтобы назначить некоторые различные оценки читаемости для текста в R, такие как плоть Кинкейд.

кто-нибудь знает способ сегментировать слова в слоги с помощью R? Мне не обязательно нужны сами сегменты слога, но граф.

например:

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

даст: 1, 1, 2, 2, 1, 3

каждую цифру, соответствующую количеству слогов в слове.

4 ответов


некоторые инструменты для НЛП доступны здесь:

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

задача нетривиальная, хотя. Дополнительные подсказки (включая алгоритм, который вы можете реализовать) здесь:

определения слогов в слове


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 правильно: если вы хотите правильное решение, это нетривиальный.

например, вы должны следить за странными вещами, такими как silent e в конце слова (например,панели), или знать, когда он не молчит, как в финал.

однако, если вы просто хотите быстрый-и-грязный приближении, это сделает это:

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

для того чтобы понять как части работают, как раз обнажайте прочь функция вызывает извне in, начиная с nchar а то gsub, etc... ...пока выражение не обретет для тебя смысл.

но я предполагаю, что, учитывая борьбу между властью R и изобилием исключений в английском языке, вы могли бы получить достойный ответ (может быть, 99% правильно?) разбор обычного текста, без большой работы-черт, простой парсер выше может получить 90% + право. С немного больше работы, вы могли бы иметь дело с silent e, если вы как.

все зависит от вашего приложения-является ли это достаточно или вам нужно что-то более точное.


на корпус поможет вам immensley, но это немного трудно работать.

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