Подсчет слогов - PullRequest
       27

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

15 голосов
/ 18 декабря 2011

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

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

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

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

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

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

Ответы [ 4 ]

11 голосов
/ 11 января 2013

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
8 голосов
/ 18 декабря 2011

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

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

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

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

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

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

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

5 голосов
/ 18 декабря 2011

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

http://cran.r -project.org / веб / просмотров / NaturalLanguageProcessing.html

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

Обнаружение слогов в слове

4 голосов
/ 02 мая 2012

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

stopifnot(require(koRpus))
tokens <- tokenize(text, format="obj", lang='en')
flesch.kincaid(tokens)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...