JavaScript音节计数器 - 每行计数

时间:2014-04-19 13:13:13

标签: javascript nlp

电流

我已将this syllable counter script重新加入:

  • 获取textarea 1的值。
  • 计算textarea 1中音节的数量。
  • 在textarea 2中显示结果。
  • 每次编辑textarea 1的值时更新计数。
  • 充当函数(如果需要,可以在多个实例中运行)。

当前代码的示例功能

输入(Textarea 1)

i would appreciate
any help
at all

结果(Textarea 2)

11

当前代码

Here is the existing code as a JSFiddle


目标

我希望这个脚本能够:

  • 以每行为基础计算textarea 1的音节:大概是通过分割textarea 1值,其中有换行符,例如.split('\n');
  • 输出结果,显示每行计算的音节总数。

所需代码的示例功能

输入(Textarea 1)

i would appreciate
any help
at all

结果(Textarea 2)

6
3
2

问题

我对如何做到这一点非常感兴趣,并且非常感谢任何帮助或JSFiddle展示如何使用现有代码来实现这一目标。


备注

对于任何可能有兴趣使用音节计数功能代码本身的人:它不是100%准确,并且在某些单词上失败但是给出了一个很好的总体思路。

1 个答案:

答案 0 :(得分:1)

试试这个,让我知道你的需要是什么。

标注:

我创建了一个数组,它会将这些行存储起来var arrayOfLines = $("[name=set_" + $input + "]").val().match(/[^\r\n]+/g);

然后循环遍历该数组并完成您之前所做的操作,但是在每个数组条目上。然后将结果存储在tempArr中,并显示tempArr结果。

请参阅Fiddle

function $count_how_many_syllables($input) {
    $("[name=set_" + $input + "]").keyup(function () {

    var arrayOfLines = $("[name=set_" + $input + "]").val().match(/[^\r\n]+/g);
    var tempArr = [];
    var $content;
    var word;
    var $syllable_count;
    var $result;

    for(var i = 0; i < arrayOfLines.length; i++){
        $content = arrayOfLines[i];
        word = $content;
        word = word.toLowerCase();
        if (word.length <= 3) {
            word = 1;
        }
        if (word.length === 0) {
           return 0;
        }
        word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, '')
            .replace(/^y/, '')
            .match(/[aeiouy]{1,2}/g).length;
        $syllable_count = word;
        $result = $syllable_count;
        tempArr.push($result);
    }

    $("[name=set_" + $input + "_syllable_count]").val(tempArr);

    });
}

(function($) {
    $count_how_many_syllables("a");
})(jQuery);