Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/galaxy/util/inflection.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/galaxy/util/inflection.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +# Copyright (c) 2006 Bermi Ferrer Martinez +# +# bermi a-t bermilabs - com +# See the end of this file for the free software, open source license (BSD-style). +# +# Modified by the Galaxy team. + +import re + + +class Inflector: + """ + Inflector for pluralizing and singularizing English nouns. + """ + # This is a small subset of words that either have the same singular and plural form, or have no singular form + NONCHANGING_WORDS = { + 'equipment', + 'information', + 'rice', + 'money', + 'species', + 'series', + 'sheep', + 'sms', + } + + IRREGULAR_WORDS = { + 'person': 'people', + 'man': 'men', + 'child': 'children', + 'sex': 'sexes', + 'move': 'moves', + 'octopus': 'octopi', + } + + PLURALIZE_RULES = ( + ('(?i)(quiz)$', '\\1zes'), + ('(?i)^(ox)$', '\\1en'), + ('(?i)([m|l])ouse$', '\\1ice'), + ('(?i)(matr|vert|ind)ix|ex$', '\\1ices'), + ('(?i)(x|ch|ss|sh)$', '\\1es'), + ('(?i)([^aeiouy]|qu)ies$', '\\1y'), + ('(?i)([^aeiouy]|qu)y$', '\\1ies'), + ('(?i)(hive)$', '\\1s'), + ('(?i)(?:([^f])fe|([lr])f)$', '\\1\\2ves'), + ('(?i)sis$', 'ses'), + ('(?i)([ti])um$', '\\1a'), + ('(?i)(buffal|tomat)o$', '\\1oes'), + ('(?i)(bu)s$', '\\1ses'), + ('(?i)(alias|status|virus)', '\\1es'), + ('(?i)(ax|test)is$', '\\1es'), + ('(?i)s$', 's'), + ('(?i)$', 's') + ) + + SINGULARIZE_RULES = ( + ('(?i)(quiz)zes$', '\\1'), + ('(?i)(matr)ices$', '\\1ix'), + ('(?i)(vert|ind)ices$', '\\1ex'), + ('(?i)^(ox)en', '\\1'), + ('(?i)(alias|status|virus)es$', '\\1'), + ('(?i)(cris|ax|test)es$', '\\1is'), + ('(?i)(shoe)s$', '\\1'), + ('(?i)(o)es$', '\\1'), + ('(?i)(bus)es$', '\\1'), + ('(?i)([m|l])ice$', '\\1ouse'), + ('(?i)(x|ch|ss|sh)es$', '\\1'), + ('(?i)(m)ovies$', '\\1ovie'), + ('(?i)(s)eries$', '\\1eries'), + ('(?i)([^aeiouy]|qu)ies$', '\\1y'), + ('(?i)([lr])ves$', '\\1f'), + ('(?i)(tive)s$', '\\1'), + ('(?i)(hive)s$', '\\1'), + ('(?i)([^f])ves$', '\\1fe'), + ('(?i)(^analy)ses$', '\\1sis'), + ('(?i)((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', '\\1\\2sis'), + ('(?i)([ti])a$', '\\1um'), + ('(?i)(n)ews$', '\\1ews'), + ('(?i)s$', ''), + ) + + def pluralize(self, word): + '''Pluralizes nouns.''' + return self._transform(self.PLURALIZE_RULES, word) + + def singularize(self, word): + '''Singularizes nouns.''' + return self._transform(self.SINGULARIZE_RULES, word, pluralize=False) + + def cond_plural(self, number_of_records, word): + '''Returns the plural form of a word if first parameter is greater than 1''' + if number_of_records != 1: + return self.pluralize(word) + return word + + def _transform(self, rules, word, pluralize=True): + return self._handle_nonchanging(word) or self._handle_irregular(word, pluralize=pluralize) or self._apply_rules(rules, word) or word + + def _handle_nonchanging(self, word): + lower_cased_word = word.lower() + # Check if word is an item or the suffix of any item in NONCHANGING_WORDS + for nonchanging_word in self.NONCHANGING_WORDS: + if lower_cased_word.endswith(nonchanging_word): + return word + + def _handle_irregular(self, word, pluralize=True): + for form_a, form_b in self.IRREGULAR_WORDS.items(): + if not pluralize: + form_a, form_b = form_b, form_a + match = re.search('(' + form_a + ')$', word, re.IGNORECASE) + if match: + return re.sub('(?i)' + form_a + '$', match.expand('\\1')[0] + form_b[1:], word) + + def _apply_rules(self, rules, word): + for pattern, replacement in rules: + if re.search(pattern, word): + return re.sub(pattern, replacement, word) + + +# Copyright (c) 2006 Bermi Ferrer Martinez +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software to deal in this software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of this software, and to permit +# persons to whom this software is furnished to do so, subject to the following +# condition: +# +# THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THIS SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THIS SOFTWARE.