Quick question.
How can I test a word to see if it is singular or plural?
I'd really like:
test_singularity('word') # => true
test_singularity('words') # => false
I bet rails is capable!
Thanks.
Quick question.
How can I test a word to see if it is singular or plural?
I'd really like:
test_singularity('word') # => true
test_singularity('words') # => false
I bet rails is capable!
Thanks.
Well in rails, you can do a string#singularize|#pluralize
comparison to return a true or false value.
But I would think due to the nature of language itself, this might need some backup to do be completely accurate.
You could do something like this
def test_singularity(str)
str.pluralize != str and str.singularize == str
end
But to see how accurate, I ran a quick set of words.
%w(word words rail rails dress dresses).each do |v|
puts "#{v} : #{test_singularity(v)}"
end
word : true
words : false
rail : true
rails : false
dress : false
dresses : false
I was a little surprised actually, since 'dress' does get pluralized properly, but when it goes through the #singularize it runs into a bit of a snag.
'dress'.pluralize # => dresses
'dress'.singularize # => dres
Most of the times i never test for singularity or plural, i just convert it to the singular or plural form i require. This always works, like this
plural_form = org_word.singularize.pluralize
singular_form = org_word.pluralize.singularize
Working further on this, a working function is easy to supply:
require 'active_support'
def is_singular?(str)
str.pluralize.singularize == str
end
%w(word words rail rails dress dresses).each do |v|
puts "#{v} : #{is_singular?(v)}"
end
which gives the following output:
word : true
words : false
rail : true
rails : false
dress : true
dresses : false
But like i said at the top: i actually almost never test whether a word is singular or plural, but convert it immediately to the wanted case.
Neither ruby nor rails come with a specific method for testing for "plurality" on words.
As nowk said, the most you can do is implement them yourself, comparing with word.pluralize
and word.singularize
. This will give you a quick-and-cheap-and-generally-good way of testing. It will fail some times, though.
If you need more precision, you will need to use the Ruby Linguistics gem, which can deal with dress and dresses properly (but it's heavier).