如何在javascript中计算单词的音节数
How to compute number of syllables in a word in javascript?
是否有javascript库用于计数单词中的音节数?如何计数?
感谢编辑
感谢Sydenam和zozo提供的有用信息和可能的答案。
我在这个论坛上找到了Pesto的代码,但它是用Ruby编写的。其中一个简洁的版本如下:
def new_count(word)
word.downcase!
return 1 if word.length <= 3
word.sub!(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, '')
word.sub!(/^y/, '')
word.scan(/[aeiouy]{1,2}/).size
end
这看起来很短,但很复杂。你能把这个函数翻译成javascript吗?再次感谢。
翻译成javascript:
function new_count(word) {
word = word.toLowerCase(); //word.downcase!
if(word.length <= 3) { return 1; } //return 1 if word.length <= 3
word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, ''); //word.sub!(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, '')
word = word.replace(/^y/, ''); //word.sub!(/^y/, '')
return word.match(/[aeiouy]{1,2}/g).length; //word.scan(/[aeiouy]{1,2}/).size
}
console.log(new_count('she'));
console.log(new_count('spain'))
console.log(new_count('softball'))
console.log(new_count('contagion'))
我可以看到这是一个旧的帖子,但我偶然发现这个函数,并发现它的良好用途。
我想补充一点,这将提高音节帐户的准确性-(据我所知)。
我注意到字符串"changes"显示为只有一个音节。
我把es
从(?:[^laeiouy]es|ed|[^laeiouy]e)$
中去掉,所以现在是?:[^laeiouy]|ed|[^laeiouy]e)$
。
这似乎为以"es"结尾的单词增加了额外的音节数。此外,为了简化操作,我将匹配的单词数组放入一个单独的变量中,这样您就可以在给出任何输出之前检查是否计算了任何音节:
var count = function(word)
{
word = word.toLowerCase();
word = word.replace(/(?:[^laeiouy]|ed|[^laeiouy]e)$/, '');
word = word.replace(/^y/, '');
//return word.match(/[aeiouy]{1,2}/g).length;
var syl = word.match(/[aeiouy]{1,2}/g);
console.log(syl);
if(syl)
{
//console.log(syl);
return syl.length;
}
}
我发现这比必要的更方便。如果您在事件侦听器中运行的函数可能在有任何要检查的单词之前触发,这将是有用的,并防止任何错误,如Cannot read property 'length' of null
。
我只是想与任何可能发现并决定使用它的人分享我的发现。
你可以使用这个库proncingjs来计算使用CMU发音字典:
pronouncing.syllableCount(pronouncing.phonesForWord("adverse")[0])
2
看到:
abandon,3
abolish,3
absorb,2
accelerate,4
accept,2
access,2
accommodate,4
accompany,4
account,2
accumulate,4
accuse,2
ache,1
achieve,2
acknowledge,3
acquire,3
act,1
adapt,2
add,1
address,2
adhere,2
adjust,2
administer,4
admire,2
嗯…你拿一本语法书,开始一个字母一个字母地读这个字符串,如果有一个规则是匹配的,那么你在计数器上加一个+1。因为每种语言的规则都不一样,所以我不能告诉你怎么做。我这么做是为了罗马尼亚人……
Jonathan Hinds的代码工作得很好,除了这些词:something, sometimes, sometimes and somewhere。我更新了他的代码来解决这些问题:
var syllableCount = function(word)
{
word = word.toLowerCase();
var t_some = 0;
if(word.length>3)
{
if(word.substring(0,4)=="some")
{
word = word.replace("some","");
t_some++;
}
}
word = word.replace(/(?:[^laeiouy]|ed|[^laeiouy]e)$/, '');
word = word.replace(/^y/, '');
//return word.match(/[aeiouy]{1,2}/g).length;
var syl = word.match(/[aeiouy]{1,2}/g);
console.log(syl);
if(syl)
{
//console.log(syl);
return syl.length+t_some;
}
}
- 计算输入的每个单词组合的百分比
- 计算字符串javascript中的某些单词
- javascript来计算单词的总和
- 计算一个字母在一个单词中出现的次数
- 用于计算输入框中的单词的 JavaScript 代码
- 如何在 JavaScript 中计算 P 标签中的单词
- 正则表达式计算不包括 html 标记的单词
- jQuery:如果一个字段有Class,则计算其他字段中的单词
- 计算长字符串中每个句子的单词,jQuery
- 计算两个数组中所有可能的单词组合
- 计算字符串中的单词
- mongoDB - 计算 2 个字符串中的常用单词
- 如何计算文本中单词的频率
- 计算一个字母或一个单词在句子中的出现次数
- 我怎样才能使它计算字符而不是单词
- 如何计算文本区域中的#个单词
- 计算和限制文本区域中的单词
- 计算在字符串中搜索的单词
- 使用javascript计算多个文本区域剩余单词
- 计算页面上特定单词的出现次数