Skip to content

Instantly share code, notes, and snippets.

@fhardison
Created March 19, 2020 11:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fhardison/94d668537e4bf513c293113284d1c4e8 to your computer and use it in GitHub Desktop.
Save fhardison/94d668537e4bf513c293113284d1c4e8 to your computer and use it in GitHub Desktop.
python file that using JTauber's next_best algorithm from his vocabulary-tools repo and py-sblgnt and the lemmatisation from https://github.com/openscriptures/GreekResources to create a reading order for the Greek Bible. The order is below. Note that the lines in the order that start with numbers are NT books and the number is their place in the…
from greek_normalisation.utils import nfc, strip_last_accent_if_two, grave_to_acute
import re
from ordering import next_best
import sys
import glob
import json
from pysblgnt import morphgnt_rows
from collections import defaultdict
def strip_punc(x):
return re.sub(r'[.,?!;·]', '', x)
def clean_word(x):
return strip_last_accent_if_two(grave_to_acute(strip_punc(nfc(x))))
def buffer_to_set(buffer):
return set([clean_word(x) for x in ' '.join(buffer).split(' ')])
def get_gnt_data_chapters():
file_data = {}
books = range(1, 28)
for i in books:
chapter_buffer = []
cur_chapter = -1
for row in morphgnt_rows(i):
bcv = row['bcv']
book = bcv[0:2]
cpt = bcv[2:4]
lemma = row['lemma']
if cur_chapter == -1:
cur_chapter = cpt
if cpt == cur_chapter:
chapter_buffer.append(lemma)
else:
file_data[f"{book}.{cur_chapter}"] = buffer_to_set(chapter_buffer)
cur_chapter = cpt
chapter_buffer = [lemma]
return file_data
def load_lxx_file_chapters(fpath, file_data=defaultdict(list)):
with open(fpath, 'r', encoding="UTF-8") as f:
data = json.load(f)
chapter_buffer = []
cur_chapter = -1
for verse, items in data.items():
book, cpt, vs = verse.split('.', maxsplit=2)
if cur_chapter == -1:
cur_chapter = cpt
if cpt == cur_chapter:
chapter_buffer.extend([x['lemma'] for x in items])
else:
file_data[f"{book}.{cur_chapter}"] = buffer_to_set(chapter_buffer)
cur_chapter = cpt
chapter_buffer = [x['lemma'] for x in items]
file_data[f"{book}.{cpt}"] = buffer_to_set(chapter_buffer)
return file_data
def load_lxx_file_verses(fpath, file_data=defaultdict(list)):
with open(fpath, 'r', encoding="UTF-8") as f:
data = json.load(f)
chapter_buffer = []
cur_chapter = -1
for verse, items in data.items():
book, cpt, vs = verse.split('.', maxsplit=2)
file_data[verse] = [clean_word(x['lemma']) for x in items]
return file_data
def load_all_lxx_chatpers():
data = {}
for FILE in glob.glob('./GreekResources/LxxLemmas/*.js'):
data = load_lxx_file_chapters(FILE, data)
return data
lxx_data = load_all_lxx_chatpers()
gnt_data = get_gnt_data_chapters()
all_data = lxx_data.copy()
all_data.update(gnt_data)
for x in next_best(all_data):
print(x[0])
Lam.0
Ps.116
Ps.150
Od.13
Ps.133
Ps.122
Ps.66
Ps.99
Ps.127
Ps.130
Ps.132
Ps.112
Ps.120
Ps.125
Ps.124
Ps.121
Ps.86
Ps.14
Isa.12
Ps.123
Ps.23
Ps.97
Ps.46
Ps.92
Ps.53
Ps.69
Ps.12
Ps.129
Ps.60
Ps.3
Ps.19
Ps.115
Ps.137
Ps.98
Ps.109
Ps.110
Ps.81
Ps.114
Ps.85
Ps.95
Ps.141
Ps.22
Ps.27
Ps.42
Ps.4
Ps.1
Ps.142
PsSol.10
Ps.25
PsSol.6
PsSol.7
PsSol.14
Ps.111
Ps.149
Ps.84
Ps.74
Ps.126
Ps.52
Ps.119
Ps.20
PsSol.1
Ps.136
Ps.55
Ps.56
Ps.13
Ps.5
Ps.11
Ps.35
Ps.62
Ps.100
Ps.63
Ps.10
Ps.6
Ps.144
Ps.40
Ps.51
Ps.96
Ps.29
Ps.15
Ps.139
Ps.94
Ps.45
Ps.128
Ps.33
Ps.91
Ps.32
Ps.131
Ps.24
Ps.89
Ps.75
Ps.26
Ps.90
Ps.16
Num.30
Ps.145
Od.6
Jonah.2
Ps.41
Od.14
PsSol.12
Ps.28
Ps.2
Ps.58
Ps.61
Isa.64
Ps.151
Ps.8
Ps.148
Ps.93
Ps.65
Joel.3
Qoh.11
Ps.146
Ps.140
PsSol.11
PsSol.9
Ps.83
04.17
PsSol.18
Ps.135
Ps.134
Ps.113
23.01
Ps.147
Ps.107
Ps.102
Ps.80
Ps.30
Od.3
Ps.7
PsSol.15
Ps.64
Isa.4
Od.9
Zech.13
Od.11
Ezek.2
Ps.39
1Sam.18
Jonah.3
PsSol.3
Ps.47
Sir.15
Ps.117
Hos.14
Ps.21
Ps.57
Ezek.15
Ps.143
Job.25
Ps.49
Ps.70
Isa.25
Ps.38
Ps.31
Ps.59
PsSol.13
Jonah.4
Hos.12
Hos.11
Zech.3
Isa.38
Od.10
Jer.49
1Chr.17
2Sam.7
Ps.9
27.10
TobS.4
Ps.78
Od.5
Isa.26
Isa.20
Isa.31
Zech.4
Deut.17
Deut.30
Ezek.35
Mal.2
Qoh.6
Qoh.1
Qoh.5
Qoh.8
Qoh.3
Bar.5
Ezek.6
Isa.56
Ps.18
Od.7
Ps.43
Sir.2
Ps.108
Isa.63
Isa.53
04.15
23.04
Ezek.18
Ps.87
1Sam.3
Lev.3
Lev.17
23.02
27.05
27.15
04.16
23.03
Ps.50
Qoh.9
27.04
Jer.25
Isa.62
Isa.35
Jer.24
Jer.34
Jer.35
Ps.138
Isa.48
Jer.1
Isa.52
Ezek.12
Ezek.11
Mal.1
Zech.12
Hos.8
2Chr.19
Jer.44
Mic.5
Jer.40
Ps.76
Jer.21
Zech.2
Zech.5
Lam.5
2Sam.9
Hos.3
Deut.26
Zech.8
Ps.72
Ps.73
Ezek.9
Bar.2
Jer.50
Judg.17
Ezek.20
Ezek.19
Ezek.10
Zech.6
Zech.1
Hag.1
Jer.41
Gen.3
TobS.13
TobBA.13
2Chr.27
Exod.11
Num.12
Gen.20
Gen.16
Gen.17
Lev.12
Jer.11
Ps.34
Job.23
Isa.50
Deut.13
Ezek.14
Zech.7
Dan.12
DanTh.12
1Kgs.13
Ps.71
Judg.21
1Chr.10
Gen.12
2Chr.7
04.14
2Chr.6
2Esdr.11
Isa.32
Isa.42
Jer.37
Judg.2
Isa.27
27.08
Isa.49
Jer.46
27.06
Ezek.31
Ps.79
Jer.33
Mic.3
Mic.2
Jer.14
Gen.7
2Chr.1
Hos.1
Amos.2
Ezek.37
Hos.6
Isa.39
2Kgs.20
27.13
27.11
27.12
27.20
1Kgs.3
27.17
06.10
27.19
27.14
Gen.8
1Sam.19
Lev.9
Gen.9
Ps.36
Jer.18
Josh.23
Deut.25
Amos.8
1Sam.8
1Sam.29
1Sam.28
Hos.10
2Esdr.15
Num.29
Num.28
Num.9
2Chr.15
Num.20
2Chr.10
Deut.16
Deut.31
Ezek.46
Ezek.8
Ezek.7
Jer.51
Jer.19
Jer.7
Deut.5
Exod.20
Deut.6
Exod.17
Exod.19
Isa.51
Isa.24
Isa.55
Isa.9
Exod.5
Jer.29
Mic.4
1Sam.7
Ezek.34
Ezek.29
Ezek.36
Gen.13
Jer.15
Exod.34
Exod.13
Exod.3
Exod.33
Zech.14
Isa.46
Deut.7
Zeph.1
1Sam.31
Hos.9
Ezek.33
Zech.10
Ps.105
Ps.104
Ezek.25
Lam.1
Obad.1
Jer.12
Josh.8
Joel.2
Josh.3
Exod.7
Exod.8
2Chr.33
Gen.44
Ezek.32
Gen.6
Sir.17
Gen.1
Hos.4
Deut.12
Gen.2
Isa.18
Judg.14
Ps.37
Judg.13
2Chr.12
1Kgs.14
Ps.48
Zeph.3
Amos.4
Jer.5
Isa.57
27.07
Deut.27
Josh.1
2Chr.30
Deut.34
Josh.20
Gen.23
Deut.11
PsSol.5
Josh.4
Joel.1
Od.4
Hab.3
Ps.44
Amos.3
Cant.3
Zech.9
Ruth.3
Ruth.1
DanTh.10
DanTh.9
Ezek.1
Dan.10
Dan.9
Jer.23
Deut.8
Bar.1
2Sam.12
2Sam.11
Joel.4
Num.25
Jer.3
PsSol.2
Num.35
Ezek.45
1Chr.21
Isa.45
Isa.43
Num.15
Lev.20
Lev.18
Isa.60
Gen.28
Gen.47
Gen.27
Num.23
Mic.6
Isa.17
Gen.29
Sir.16
2Kgs.21
Hos.5
04.08
Lev.24
Exod.10
Od.1
Exod.15
Exod.14
Exod.40
Num.18
2Chr.13
Zeph.2
Qoh.4
Job.35
2Chr.5
1Chr.13
1Sam.16
1Sam.11
Judg.19
Isa.29
Lev.2
Lev.7
Lev.23
Lev.6
Lev.16
Lev.15
Exod.29
Jer.13
Judg.15
Josh.2
Exod.4
Lev.27
Lev.8
Lev.4
Lev.1
Lev.5
Exod.1
Ezek.48
Ezek.5
Ezek.44
Num.19
Num.6
Ps.68
Jer.48
Gen.33
Gen.18
Exod.24
Lev.10
Deut.10
Josh.14
Deut.9
Exod.32
Sir.46
1Chr.22
Hos.13
Isa.65
Mic.7
Ezek.24
Josh.22
Gen.32
Hos.2
Gen.21
07.13
Job.27
Josh.24
Qoh.2
Qoh.7
Ps.77
TobS.12
TobBA.12
TobS.10
TobBA.10
TobBA.9
Jer.20
Jer.9
1Sam.4
2Kgs.1
1Kgs.17
2Kgs.3
2Kgs.7
2Chr.21
2Chr.16
DanTh.8
Dan.8
Isa.34
Amos.1
Isa.2
Isa.59
Ezek.38
Jer.32
Ezek.26
Sir.44
Sir.49
Od.8
2Chr.14
2Sam.18
TobS.8
TobBA.8
2Kgs.13
Gen.50
Gen.37
Num.36
Num.27
TobS.9
Job.1
2Sam.14
TobS.6
TobBA.6
TobBA.3
TobS.3
Jdt.5
TobBA.14
Deut.33
Nah.1
Isa.21
Jer.8
1Kgs.8
Mal.3
Sir.48
Josh.5
PsSol.8
Josh.6
Isa.6
Job.26
PsSol.17
TobBA.5
TobS.5
TobBA.7
TobS.7
Isa.54
Isa.33
Gen.35
07.08
Bar.4
Jdt.9
Ps.106
Jdt.14
Num.8
13.03
Ezek.4
Esth.7
2Chr.32
Isa.13
Num.24
Isa.23
Isa.47
Mic.1
TobBA.11
Isa.22
Esth.6
Hag.2
Hos.7
Sir.5
Jer.42
Sir.35
Isa.11
Cant.8
Lev.26
Amos.9
Od.12
Gen.34
Ezek.39
Jdt.3
Deut.29
Deut.15
Jer.39
Isa.5
Gen.39
Ps.88
Exod.18
Gen.15
Gen.24
Jer.16
Ruth.2
2Sam.1
Lev.21
Num.14
Exod.2
Sir.8
04.03
Job.17
Sir.7
19.01
19.08
Amos.5
Job.18
Job.34
01.07
1Chr.19
Job.13
Job.33
Josh.9
Ps.54
Deut.18
1Kgs.21
Nah.2
Isa.61
04.02
Jer.17
1Sam.12
2Sam.6
1Sam.24
Hab.1
Num.17
Job.21
Num.5
14.02
07.05
Sir.28
PsSol.16
Sir.6
Prov.13
Isa.16
Exod.23
Isa.14
Num.22
Job.16
Job.32
Amos.6
Cant.6
Sir.34
Lam.3
Lam.2
Sir.36
1Sam.10
2Chr.22
2Chr.23
1Kgs.19
2Kgs.2
2Kgs.11
2Sam.24
2Kgs.10
Zech.11
Jer.6
04.10
27.16
04.05
Isa.10
Isa.15
Jer.10
Cant.5
Judg.10
Jonah.1
1Kgs.9
2Chr.8
2Chr.2
2Chr.9
Ezek.42
Nah.3
04.09
Ezek.13
2Sam.22
Ps.17
Job.14
Exod.39
Job.7
Exod.31
Isa.30
Isa.8
2Kgs.16
Ps.67
Gen.45
Judg.18
Prov.24
Prov.18
Prov.2
14.01
19.03
13.01
06.04
Prov.20
Isa.41
TobS.14
Josh.7
Isa.1
Ezek.30
Deut.19
Qoh.10
Jer.45
Gen.48
07.03
02.11
01.21
07.06
DanTh.7
Jer.2
01.19
Dan.4
06.14
Dan.6
1Kgs.20
Prov.4
01.25
01.04
02.13
01.24
04.01
04.07
2Kgs.8
2Esdr.1
01.03
04.06
01.17
06.07
08.04
02.04
03.15
Jdt.6
03.17
03.18
01.20
01.12
Cant.2
06.06
2Kgs.24
2Chr.36
07.02
04.13
04.20
02.10
2Sam.10
1Sam.20
10.01
2Chr.18
Ezek.43
Exod.12
Gen.19
Gen.26
1Sam.22
1Kgs.22
Sir.51
02.02
01.09
02.01
01.08
02.03
01.22
01.16
02.08
03.04
2Chr.25
2Sam.4
2Kgs.14
Jer.4
Deut.23
Exod.9
Exod.22
1Sam.6
1Chr.16
2Chr.35
27.09
Job.2
Job.11
Num.16
Job.4
Prov.8
Prov.1
06.09
Ezek.22
Sir.47
07.12
Job.19
Sir.12
20.04
08.10
Isa.44
08.03
08.07
06.05
08.02
Sir.21
Sir.40
Isa.19
TobBA.4
Job.8
Job.37
Job.36
DanTh.6
Isa.7
Isa.36
1Chr.29
Jdt.12
Deut.22
Exod.27
Exod.37
Exod.26
2Chr.24
Exod.38
Num.4
03.21
Isa.58
19.05
Job.10
Job.12
Prov.36
Job.29
Isa.28
1Kgs.18
Jdt.13
01.10
01.11
05.03
Job.3
Job.22
Sir.24
Isa.40
Sir.39
Sir.1
Sir.10
03.20
02.12
Ps.103
PsSol.4
Sir.14
Sir.18
08.01
Sir.3
19.02
Gen.41
Gen.40
2Esdr.5
2Esdr.6
2Sam.8
1Chr.18
1Sam.26
1Sam.23
Ps.101
1Kgs.1
2Chr.17
2Kgs.4
03.14
03.13
2Sam.16
Deut.21
01.06
Gen.42
Deut.20
Sir.33
Prov.12
Job.15
Job.24
2Esdr.3
Job.5
1Esdr.7
19.04
Exod.16
03.12
10.03
Prov.9
1Sam.15
Prov.11
Prov.35
10.05
Sir.25
09.03
06.13
07.14
Prov.3
Sir.4
13.04
Job.30
Prov.16
Job.28
08.05
01.18
01.13
04.12
03.16
03.07
04.11
Cant.1
Dan.11
Cant.7
09.01
01.14
02.06
05.08
Gen.31
Gen.30
Ezek.28
Jer.22
2Chr.3
Exod.25
Ezek.40
Deut.4
Cant.4
Prov.19
Prov.17
Sir.29
Deut.24
Ezek.3
Gen.5
Prov.5
Isa.66
Prov.10
19.10
Jer.28
2Esdr.19
Job.20
27.02
Jer.52
Sir.20
Judg.11
1Sam.1
1Sam.2
Jer.36
Esth.10
Deut.2
01.15
01.23
Ezek.21
Jer.47
TobS.11
Judg.20
Lam.4
Od.2
Deut.32
Jer.26
2Chr.26
Jdt.11
DanTh.5
Dan.5
DanTh.2
DanTh.4
2Esdr.14
DanTh.1
1Esdr.3
Hab.2
Lev.22
07.11
27.01
27.03
07.10
12.03
20.02
19.06
03.19
07.01
Dan.7
09.05
13.02
12.01
10.02
10.04
06.15
Sir.19
TobBA.2
Esth.5
1Chr.28
Exod.30
Exod.35
Gen.43
Jdt.16
Prov.15
2Kgs.6
Ruth.4
Gen.38
Gen.11
1Sam.5
Jdt.1
1Sam.27
1Sam.25
1Sam.17
Qoh.12
Job.9
Deut.1
Ezek.17
Gen.49
1Sam.9
19.09
21.03
03.06
02.05
Sir.45
Lev.25
Wis.10
09.04
06.03
11.01
04.18
Sir.11
27.21
Job.6
Prov.22
Sir.32
08.08
Ezek.41
2Sam.19
2Sam.17
03.05
Wis.1
01.26
06.02
07.15
Wis.3
Prov.7
Exod.21
21.02
Sir.42
Sir.26
Sir.27
Sir.23
Prov.21
Jdt.7
06.08
Prov.34
11.03
07.04
01.02
07.07
07.09
Jdt.2
Job.38
1Kgs.12
03.11
03.09
02.09
02.14
Sir.9
Ps.82
Sir.38
Prov.14
08.09
Amos.7
Wis.9
Judg.12
Deut.3
2Kgs.5
05.04
01.05
DanTh.3
1Sam.13
TobS.2
2Sam.20
2Chr.4
02.07
Lev.19
Job.31
Jer.30
1Sam.21
Judg.16
2Esdr.12
1Kgs.15
DanTh.11
06.12
08.12
1Kgs.10
2Kgs.25
SusTh.1
Sus.1
Judg.6
03.23
09.02
05.11
21.04
Job.39
05.22
03.22
05.12
Job.41
Judg.4
Jer.38
Sir.31
08.06
2Sam.2
Sir.43
2Kgs.18
06.11
Job.40
03.10
Sir.41
1Chr.20
2Sam.13
Esth.2
03.02
Num.31
2Esdr.16
Bar.3
2Kgs.15
2Esdr.18
2Chr.34
Wis.6
Dan.3
BelTh.1
Bel.1
Deut.28
Sir.37
05.09
04.19
02.15
01.27
03.08
Isa.37
2Kgs.19
21.01
05.23
Lev.14
04.04
15.02
08.11
05.01
05.15
Jdt.8
Jdt.10
16.01
03.01
Sir.22
20.03
Prov.32
Dan.2
Jdt.4
05.25
19.12
15.04
Judg.3
05.06
Gen.4
2Chr.20
Jer.27
Prov.31
Prov.33
Gen.22
Judg.7
1Kgs.5
2Sam.15
Sir.30
Isa.3
Wis.2
Ezek.23
Judg.8
Dan.1
2Esdr.9
05.10
Sir.50
05.24
05.05
2Chr.28
05.26
27.18
Prov.6
2Kgs.12
2Kgs.22
Ezek.16
1Kgs.6
15.01
Wis.16
Jdt.15
Jer.43
2Kgs.17
Esth.9
1Mac.16
1Mac.3
1Mac.1
1Mac.2
Esth.4
19.07
17.01
15.03
17.02
Job.42
1Chr.14
22.01
Prov.23
Ezek.47
20.01
2Kgs.9
1Esdr.4
Sir.13
1Esdr.2
1Esdr.6
Num.3
Num.21
Num.32
Josh.16
01.01
Prov.30
2Chr.29
Num.10
Num.2
Num.1
Num.7
1Sam.14
2Esdr.7
2Chr.11
1Mac.4
1Mac.7
Josh.10
12.02
2Chr.31
Judg.5
Gen.14
05.02
05.07
16.02
1Kgs.11
Exod.28
Exod.36
11.02
2Esdr.4
Wis.5
2Kgs.23
Exod.6
Wis.12
06.01
Josh.11
Josh.12
1Mac.8
1Mac.10
1Mac.13
1Mac.12
1Mac.14
15.05
Josh.17
1Sam.30
Wis.4
19.11
Wis.8
Sir.Prolog
1Chr.15
1Mac.6
1Kgs.16
05.14
05.16
05.18
1Mac.11
05.13
2Esdr.23
TobBA.1
TobS.1
1Chr.23
Num.11
1Mac.5
Judg.9
1Kgs.7
1Kgs.2
16.03
2Sam.21
05.21
2Mac.1
Wis.11
Ezek.27
Esth.3
Lev.13
22.02
2Sam.3
2Sam.5
1Mac.9
Num.13
4Mac.12
Wis.15
1Esdr.1
05.19
Num.34
4Mac.18
Wis.14
Wis.18
1Chr.25
Judg.1
05.20
4Mac.4
4Mac.17
4Mac.10
05.17
EpJer.1
Deut.14
Lev.11
Jer.31
Josh.13
Esth.1
Wis.19
Gen.25
Wis.7
Wis.13
4Mac.11
4Mac.9
4Mac.16
4Mac.14
4Mac.3
4Mac.1
4Mac.2
2Mac.11
2Mac.7
Josh.21
1Mac.15
4Mac.7
Esth.8
Num.33
4Mac.8
4Mac.5
4Mac.13
4Mac.6
1Chr.24
1Chr.26
1Chr.3
3Mac.7
2Mac.10
2Mac.9
4Mac.15
Gen.46
2Mac.15
2Mac.13
2Mac.8
2Mac.6
3Mac.2
2Mac.2
3Mac.3
Wis.17
2Mac.3
2Esdr.21
1Chr.27
3Mac.1
2Esdr.8
Josh.18
2Esdr.22
2Mac.5
1Chr.12
03.03
1Kgs.4
1Chr.5
3Mac.6
2Esdr.20
2Esdr.13
2Mac.14
1Chr.9
Gen.36
1Chr.1
Gen.10
3Mac.4
3Mac.5
2Mac.12
05.27
2Mac.4
2Sam.23
Ps.118
2Esdr.10
1Chr.6
1Esdr.8
1Chr.8
Num.26
1Chr.11
1Chr.2
2Esdr.17
2Esdr.2
1Chr.7
1Esdr.9
Josh.19
1Chr.4
Josh.15
1Esdr.5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment