For those of you who have not found a Bible reading schedule or are not satisfied with what you have and want a change, the following recipe is provided as the result of a programming project today for the New Year. Begin with the first reference and read up to but not including the next reference. Continue from day to day, and you will find that by the end of the year, the entire Bible has been read with equally spaced portions of reading and time. The schedule was developed with the intention to read about the same number of words per day. The Bible used was "bible13.txt" (King James Version) from Project Gutenberg.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | OLD = ['Genesis', 'Exodus', 'Leviticus', 'Numbers', 'Deuteronomy', 'Joshua',
'Judges', 'Ruth', '1 Samuel', '2 Samuel', '1 Kings', '2 Kings',
'1 Chronicles', '2 Chronicles', 'Ezra', 'Nehemiah', 'Esther', 'Job',
'Psalm', 'Proverbs', 'Ecclesiastes', 'Song of Solomon', 'Isaiah',
'Jeremiah', 'Lamentations', 'Ezekiel', 'Daniel', 'Hosea', 'Joel',
'Amos', 'Obadiah', 'Jonah', 'Micah', 'Nahum', 'Habakkuk', 'Zephaniah',
'Haggai', 'Zechariah', 'Malachi']
NEW = ['Matthew', 'Mark', 'Luke', 'John', 'Acts', 'Romans', '1 Corinthians',
'2 Corinthians', 'Galatians', 'Ephesians', 'Philippians', 'Colossians',
'1 Thessalonians', '2 Thessalonians', '1 Timothy', '2 Timothy', 'Titus',
'Philemon', 'Hebrews', 'James', '1 Peter', '2 Peter', '1 John', '2 John',
'3 John', 'Jude', 'Revelation']
ALL = OLD + NEW
################################################################################
def main():
bible_text = get_bible()
bible_array = parse_bible(bible_text)
iterator = Bible_Iter(bible_array)
words = iterator.total / 365
index = words
try:
while True:
print(iterator.get_reference())
temp = int(index)
while temp != iterator.index:
iterator.next_word()
iterator.next_vers()
index += words
except:
input('DONE')
def get_bible():
return open('bible13.txt').read()
def parse_bible(string):
'Parse Bible and return 3D array.'
book = chap = vers = 1
form = '%02u:%03u:%03u'
book_s, chap_s, vers_s = [], [], []
start = 0
while True:
try:
start = string.index(form % (book, chap, vers), start) + 11
end = string.index('\n\n', start)
vers_s.append(' '.join(string[start:end].split()))
start = end
vers += 1
except:
if vers != 1:
chap_s.append(vers_s)
vers_s = []
chap += 1
vers = 1
elif chap != 1:
book_s.append(chap_s)
chap_s = []
book += 1
chap = 1
elif book != 1:
return book_s
else:
raise EOFError
################################################################################
class Bible_Iter:
def __init__(self, bible_3D):
self.bible = bible_3D
self.total = 0
self.__book = 0
self.__chap = 0
self.__vers = 0
self.__word = 0
self.index = 0
for book in bible_3D:
for chapter in book:
for index, verse in enumerate(chapter):
words = verse.split()
chapter[index] = words
self.total += len(words)
def get_word(self):
return self.bible[self.__book][self.__chap][self.__vers][self.__word]
def next_word(self):
self.index += 1
self.__word += 1
if len(self.bible[self.__book][self.__chap][self.__vers]) == self.__word:
self.__word = 0
self.__vers += 1
if len(self.bible[self.__book][self.__chap]) == self.__vers:
self.__vers = 0
self.__chap += 1
if len(self.bible[self.__book]) == self.__chap:
self.__chap = 0
self.__book += 1
if len(self.bible) == self.__book:
self.__book = 0
raise EOFError
def next_vers(self):
vers = self.__vers
while vers == self.__vers:
self.next_word()
def get_reference(self):
book = ALL[self.__book]
reference = '{0} {1}:{2}'.format(book, self.__chap + 1, self.__vers + 1)
return reference
################################################################################
if __name__ == '__main__':
main()
|
For those interested in developing their own Bible reading guides, the code is presented here for further development and modification.
Does anyone know of Python code that can divide words up by syllable? If it takes a quantum of time to read each syllable and space, then the words of the Bible (or any book for that matter) could be divided up that way. Once the total count was known, the book could be split up by a similar algorithm, and the time to read each section would be even more likely to take the same amount of time.
I expect a code like this to maintain an interactive database and current time. Thus when, during my meditations I accidentally read a double helping the program knows to reduce my load during the remaining two hundred twenty-seven days.
(you could process the bible13 with TeX set to narrow width. Then parse the log file for syllabic split. You'd do this all from within python using subprocess module)