10 Years
Discussion Span
Last Post by pyTony

Unfortunately, it won't always be accurate unless you go to great pains. This is due to there being multiple rules (and exceptions to those rules) for the English language.


Is there a reliable way to 'pluralize' english words with Python?

there are some cookbook recipe in ASPN you can refer to.
they may not be wat you want, but at least will give you a head start


Python's regex module re allows you to establish english plural rules in a more condensed from. This one should take care of most common plurals, you may add more rules ...

# using module re to pluralize most common english words
# (rule_tuple used as function default, so establish it first)
import re
# (pattern, search, replace) regex english plural rules tuple
rule_tuple = (
('[ml]ouse$', '([ml])ouse$', '\\1ice'), 
('child$', 'child$', 'children'), 
('booth$', 'booth$', 'booths'), 
('foot$', 'foot$', 'feet'), 
('ooth$', 'ooth$', 'eeth'), 
('l[eo]af$', 'l([eo])af$', 'l\\1aves'), 
('sis$', 'sis$', 'ses'), 
('man$', 'man$', 'men'), 
('ife$', 'ife$', 'ives'), 
('eau$', 'eau$', 'eaux'), 
('lf$', 'lf$', 'lves'), 
('[sxz]$', '$', 'es'), 
('[^aeioudgkprt]h$', '$', 'es'), 
('(qu|[^aeiou])y$', 'y$', 'ies'), 
('$', '$', 's')
def regex_rules(rules=rule_tuple):
    for line in rules:
        pattern, search, replace = line
        yield lambda word: re.search(pattern, word) and re.sub(search, replace, word)
def plural(noun):
    for rule in regex_rules():
        result = rule(noun)
        if result: 
            return result
# testing ...
print plural("man")    # men
print plural("woman")  # women
print plural("lady")   # ladies
print plural("wife")   # wives
print plural("leaf")   # leaves
# okay according to Webster ...
print plural("index")  # indexes
print plural("fungus") # funguses    
# etc.
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.