我正在尝试编写一些代码来执行以下操作(使用类):
我能够实现的前两个。但是,我的音节计数器不起作用,我不知道为什么......这是我的代码。
class SampleHaiku
attr_accessor :paragraph
def initialize(paragraph)
@paragraph = paragraph
end
def paragraph
@paragraph
end
def line_counter
@paragraph.lines.count
if @paragraph.lines.count == 3
puts true
else puts false
end
end
def syllable_counter
scount = []
@paragraph.split(' ').each do |letter|
if letter.to_s.downcase.include?("a")
scount << letter
elsif letter.to_s.downcase.include?("e")
elsif letter.to_s.downcase.include?("i")
scount << letter
elsif letter.to_s.downcase.include?("o")
scount << letter
elsif letter.to_s.downcase.include?("u")
scount << letter
elsif letter.to_s.downcase.include?("y")
scount << letter
else scount << " "
end
end
puts scount.to_s
return scount.join('').split(' ').size
end
end
haiku = SampleHaiku.new("green and speckled legs,
hop on logs and lily pads
splash in cool water")
puts haiku.paragraph
puts haiku.line_counter
puts haiku.syllable_counter
得出的是:
green and speckled legs,
hop on logs and lily pads
splash in cool water
true
["and", "hop", "on", "logs", "and", "lily", "pads", "splash", "in", "cool",
"water"]
1
--- ---编辑
我考虑用于音节计数器的内容包括以下内容:
计算元音。
Diagraphs(两个字母比拼写一个声音:“ai,ay,ee,ea,ie,ei,oo,oe,ey,ay,oy,au)算作一个元音(这是一般规则) ......我确信可能会有一些例外情况。)
包含双元音的单词计为一个元音。在我的帖子中,我只能根据多个来源计算我知道的元音只有大约75%的元音。
显然我无法将第二和第三个选项纳入此选项,但根据我在网上看到的不同来源,第一个选项在75%的时间内是正确的。
另外,当我将ha句文改为
时“haikus很容易
有时它们没有意义
冰箱“
到目前为止建议的代码给出了以下内容......
def syllable_counter
scount = []
@paragraph.split("").each do |letter|
if letter.to_s.downcase.include?("a")
scount << letter
elsif letter.to_s.downcase.include?("e")
scount << letter
elsif letter.to_s.downcase.include?("i")
scount << letter
elsif letter.to_s.downcase.include?("o")
scount << letter
elsif letter.to_s.downcase.include?("u")
scount << letter
elsif letter.to_s.downcase.include?("y")
scount << letter
else scount << " "
end
end
scount.to_s
return scount.join('').split(' ').size
end
放
haikus are easy
sometimes they do not make sense
refrigerator
22
对战
def syllable_counter
@paragraph.scan(/[aiouy]+e*|e(?!d$|ly).|[td]|ed|le$/).size
end
put
haikus are easy
sometimes they do not make sense
refrigerator
25
答案 0 :(得分:3)
你正在做的只是用元音检查每个单词(由于某种原因除了e)并将其添加到数组中。
通过@paragraph.split(' ')
进行分词而不是字母。如果要分成字母,则必须@paragraph.split("")
。但即便如此,那只会计算元音的数量
您可以查看第一个答案here。它有一个非常好的简单解决方案与正则表达式。
你可以这样做
@paragraph.scan(/[aiouy]+e*|e(?!d$|ly).|[td]ed|le$/).size
它不完美,但大部分时间都有效。
如果你想要一个完美的解决方案,需要更多的思考和英语语言知识。