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

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

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

так, например:

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

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

Каждое число соответствует числу слогов в слове.

Ответы

Ответ 2

qdap версия 1.1.0 выполняет эту задачу:

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

## [1] 1 1 2 2 1 3

Ответ 3

gsk3 верен: если вы хотите правильное решение, оно нетривиально.

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

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

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

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

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

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

Ответ 4

Пакет koRpus поможет вам избавиться от immensley, но с ним немного сложно работать.

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