Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
70 changes: 39 additions & 31 deletions hebrew_numbers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
12 changes: 11 additions & 1 deletion hebrew_numbers/tests.py
Original file line number Diff line number Diff line change
@@ -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):
Expand Down Expand Up @@ -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()