# Copyright 2018-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.
"""abydos.phonetic._parmar_kumbharana.
Parmar-Kumbharana phonetic algorithm
"""
from deprecation import deprecated
from ._phonetic import _Phonetic
from .. import __version__
__all__ = ['ParmarKumbharana', 'parmar_kumbharana']
[docs]class ParmarKumbharana(_Phonetic):
"""Parmar-Kumbharana code.
This is based on the phonetic algorithm proposed in :cite:`Parmar:2014`.
.. versionadded:: 0.3.6
"""
_rules = {
4: {'OUGH': 'F'},
3: {'DGE': 'J', 'OUL': 'U', 'GHT': 'T'},
2: {
'CE': 'S',
'CI': 'S',
'CY': 'S',
'GE': 'J',
'GI': 'J',
'GY': 'J',
'WR': 'R',
'GN': 'N',
'KN': 'N',
'PN': 'N',
'CK': 'K',
'SH': 'S',
},
}
_del_trans = {65: '', 69: '', 73: '', 79: '', 85: '', 89: ''}
[docs] def encode(self, word):
"""Return the Parmar-Kumbharana encoding of a word.
Parameters
----------
word : str
The word to transform
Returns
-------
str
The Parmar-Kumbharana encoding
Examples
--------
>>> pe = ParmarKumbharana()
>>> pe.encode('Gough')
'GF'
>>> pe.encode('pneuma')
'NM'
>>> pe.encode('knight')
'NT'
>>> pe.encode('trice')
'TRS'
>>> pe.encode('judge')
'JJ'
.. versionadded:: 0.3.0
.. versionchanged:: 0.3.6
Encapsulated in class
"""
word = word.upper() # Rule 3
word = self._delete_consecutive_repeats(word) # Rule 4
# Rule 5
i = 0
while i < len(word):
for match_len in range(4, 1, -1):
if word[i : i + match_len] in self._rules[match_len]:
repl = self._rules[match_len][word[i : i + match_len]]
word = word[:i] + repl + word[i + match_len :]
i += len(repl)
break
else:
i += 1
word = word[:1] + word[1:].translate(self._del_trans) # Rule 6
return word
[docs]@deprecated(
deprecated_in='0.4.0',
removed_in='0.6.0',
current_version=__version__,
details='Use the ParmarKumbharana.encode method instead.',
)
def parmar_kumbharana(word):
"""Return the Parmar-Kumbharana encoding of a word.
This is a wrapper for :py:meth:`ParmarKumbharana.encode`.
Parameters
----------
word : str
The word to transform
Returns
-------
str
The Parmar-Kumbharana encoding
Examples
--------
>>> parmar_kumbharana('Gough')
'GF'
>>> parmar_kumbharana('pneuma')
'NM'
>>> parmar_kumbharana('knight')
'NT'
>>> parmar_kumbharana('trice')
'TRS'
>>> parmar_kumbharana('judge')
'JJ'
.. versionadded:: 0.3.0
"""
return ParmarKumbharana().encode(word)
if __name__ == '__main__':
import doctest
doctest.testmod()