From ebf84fbca0be786041be5444548e43b1da4c753b Mon Sep 17 00:00:00 2001 From: meirg Date: Wed, 15 Jul 2020 23:11:04 +0300 Subject: [PATCH 1/4] add gematria ktana functionality --- hebrew_numbers/__init__.py | 69 +++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/hebrew_numbers/__init__.py b/hebrew_numbers/__init__.py index dca5853..a45dd0a 100644 --- a/hebrew_numbers/__init__.py +++ b/hebrew_numbers/__init__.py @@ -9,38 +9,45 @@ 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 = 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 latter in name: + sum += MAP_DICT[char][1] + sum = str(sum) + return int(sum[0]) + int(sum[1]) if len(sum) >= 2 else sum + def gematria_to_int(string): res = 0 @@ -48,7 +55,7 @@ def gematria_to_int(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 From 8811069eebaf33745588d90c075147e44a5368f5 Mon Sep 17 00:00:00 2001 From: meirg Date: Wed, 15 Jul 2020 23:26:55 +0300 Subject: [PATCH 2/4] update README file --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) 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) From 1f5af42d933de40238cf5953db29f4853f0cebec Mon Sep 17 00:00:00 2001 From: meirg Date: Sun, 19 Jul 2020 10:02:18 +0300 Subject: [PATCH 3/4] return always int --- hebrew_numbers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hebrew_numbers/__init__.py b/hebrew_numbers/__init__.py index a45dd0a..09bb9b6 100644 --- a/hebrew_numbers/__init__.py +++ b/hebrew_numbers/__init__.py @@ -46,7 +46,7 @@ def gematria_ktana_to_int(name): for latter in name: sum += MAP_DICT[char][1] sum = str(sum) - return int(sum[0]) + int(sum[1]) if len(sum) >= 2 else sum + return int(sum[0]) + int(sum[1]) if len(sum) >= 2 else int(sum) def gematria_to_int(string): From a5ef6edfb9bec5c7d241cf374f2d300ecc8fec28 Mon Sep 17 00:00:00 2001 From: meirg Date: Tue, 21 Jul 2020 10:02:25 +0300 Subject: [PATCH 4/4] add test, fix typo and make the code compatible to python 2.7 --- hebrew_numbers/__init__.py | 61 +++++++++++++++++++------------------- hebrew_numbers/tests.py | 12 +++++++- 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/hebrew_numbers/__init__.py b/hebrew_numbers/__init__.py index 09bb9b6..43761b7 100644 --- a/hebrew_numbers/__init__.py +++ b/hebrew_numbers/__init__.py @@ -9,41 +9,42 @@ specialnumbers = yaml.safe_load(io.open(DATA_PATH, encoding='utf8')) - -MAP_DICT = 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]) +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 latter in name: + 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) 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()