diff --git a/README.md b/README.md index 4ccf381..a565d5e 100644 --- a/README.md +++ b/README.md @@ -28,11 +28,21 @@ int_to_gematria(298, gershayim=False) # u'רחצ' ``` +### gematria_ktana_to_int + +```python +from hebrew_numbers import gematria_ktana_to_int +gematria_ktana_to_int('נחמה') +# 4 +``` + + ## Features * conversion from string of letters to an integer number * conversion of integer to string (using [hebrew-special-numbers](https://github.com/chaimleib/hebrew-special-numbers)) + ## Contributing See the [contribution guide](CONTRIBUTING.md) diff --git a/hebrew_numbers/__init__.py b/hebrew_numbers/__init__.py index dca5853..43761b7 100644 --- a/hebrew_numbers/__init__.py +++ b/hebrew_numbers/__init__.py @@ -9,46 +9,54 @@ specialnumbers = yaml.safe_load(io.open(DATA_PATH, encoding='utf8')) -MAP = ( - (1, u'א'), - (2, u'ב'), - (3, u'ג'), - (4, u'ד'), - (5, u'ה'), - (6, u'ו'), - (7, u'ז'), - (8, u'ח'), - (9, u'ט'), - (10, u'י'), - (20, u'כ'), - (30, u'ל'), - (40, u'מ'), - (50, u'נ'), - (60, u'ס'), - (70, u'ע'), - (80, u'פ'), - (90, u'צ'), - (100, u'ק'), - (200, u'ר'), - (300, u'ש'), - (400, u'ת'), - (500, u'ך'), - (600, u'ם'), - (700, u'ן'), - (800, u'ף'), - (900, u'ץ') -) -MAP_DICT = dict([(k, v) for v, k in MAP]) +MAP_DICT = {u'א': [1, 1], + u'ב': [2, 2], + u'ג': [3, 3], + u'ד': [4, 4], + u'ה': [5, 5], + u'ו': [6, 6], + u'ז': [7, 7], + u'ח': [8, 8], + u'ט': [9, 9], + u'י': [10, 1], + u'כ': [20, 2], + u'ל': [30, 3], + u'מ': [40, 4], + u'נ': [50, 5], + u'ס': [60, 6], + u'ע': [70, 7], + u'פ': [80, 8], + u'צ': [90, 9], + u'ק': [100, 1], + u'ר': [200, 2], + u'ש': [300, 3], + u'ת': [400, 4], + u'ך': [20, 2], + u'ם': [40, 4], + u'ן': [50, 5], + u'ף': [80, 8], + u'ץ': [90, 9]} + GERESH = set(("'", '׳')) +def gematria_ktana_to_int(name): + sum = 0 + for char in name: + if char in ['"', "'"]: + continue + sum += MAP_DICT[char][1] + sum = str(sum) + return int(sum[0]) + int(sum[1]) if len(sum) >= 2 else int(sum) + + def gematria_to_int(string): res = 0 for i, char in enumerate(string): if char in GERESH and i < len(string)-1: res *= 1000 if char in MAP_DICT: - res += MAP_DICT[char] + res += MAP_DICT[char][0] return res diff --git a/hebrew_numbers/tests.py b/hebrew_numbers/tests.py index 386a214..0d81178 100644 --- a/hebrew_numbers/tests.py +++ b/hebrew_numbers/tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import unittest -from . import gematria_to_int, int_to_gematria +from . import gematria_to_int, int_to_gematria, gematria_ktana_to_int class TestGematriaToInt(unittest.TestCase): @@ -40,6 +40,16 @@ def test_no_gershayim(self): ): self.assertEqual(int_to_gematria(num, gershayim=False), heb) +class TestGematriaKtanaToInt(unittest.TestCase): + + def test_gematria_ktana(self): + for heb, num in ( + (u'בן', 7), + (u'נעמה', 3), + (u'תשמ"ץ', 2), + (u"איצקוביץ'", 3) + ): + self.assertEqual(gematria_ktana_to_int(heb), num) if __name__ == '__main__': unittest.main()