See Bible Downloads - Bible SuperSearch
There are also data sets with cross references.
A small csv from the link above:
"Verse ID","Book Name","Book Number",Chapter,Verse,Text
1,Genesis,1,1,1,"In the beginning God created the heavens and the earth."
2,Genesis,1,1,2,"And the earth was waste and void; and darkness was upon the face of the deep: and the Spirit of God moved upon the face of the waters."
3,Genesis,1,1,3,"And God said, Let there be light: and there was light."
4,Genesis,1,1,4,"And God saw the light, that it was good: and God divided the light from the darkness."
5,Genesis,1,1,5,"And God called the light Day, and the darkness he called Night. And there was evening and there was morning, one day."
6,Genesis,1,1,6,"And God said, Let there be a firmament in the midst of the waters, and let it divide the waters from the waters."
7,Genesis,1,1,7,"And God made the firmament, and divided the waters which were under the firmament from the waters which were above the firmament: and it was so."
8,Genesis,1,1,8,"And God called the firmament Heaven. And there was evening and there was morning, a second day."
9,Genesis,1,1,9,"And God said, Let the waters under the heavens be gathered together unto one place, and let the dry land appear: and it was so."
10,Genesis,1,1,10,"And God called the dry land Earth; and the gathering together of the waters called he Seas: and God saw that it was good."
11,Genesis,1,1,11,"And God said, Let the earth put forth grass, herbs yielding seed, [and] fruit-trees bearing fruit after their kind, wherein is the seed thereof, upon the earth: and it was so."
12,Genesis,1,1,12,"And the earth brought forth grass, herbs yielding seed after their kind, and trees bearing fruit, wherein is the seed thereof, after their kind: and God saw that it was good."
13,Genesis,1,1,13,"And there was evening and there was morning, a third day."
14,Genesis,1,1,14,"And God said, Let there be lights in the firmament of heaven to divide the day from the night; and let them be for signs, and for seasons, and for days and years:"
15,Genesis,1,1,15,"and let them be for lights in the firmament of heaven to give light upon the earth: and it was so."
16,Genesis,1,1,16,"And God made the two great lights; the greater light to rule the day, and the lesser light to rule the night: [he made] the stars also."
17,Genesis,1,1,17,"And God set them in the firmament of heaven to give light upon the earth,"
18,Genesis,1,1,18,"and to rule over the day and over the night, and to divide the light from the darkness: and God saw that it was good."
19,Genesis,1,1,19,"And there was evening and there was morning, a fourth day."
20,Genesis,1,1,20,"And God said, Let the waters swarm with swarms of living creatures, and let birds fly above the earth in the open firmament of heaven."
21,Genesis,1,1,21,"And God created the great sea-monsters, and every living creature that moveth, wherewith the waters swarmed, after their kind, and every winged bird after its kind: and God saw that it was good."
22,Genesis,1,1,22,"And God blessed them, saying, Be fruitful, and multiply, and fill the waters in the seas, and let birds multiply on the earth."
23,Genesis,1,1,23,"And there was evening and there was morning, a fifth day."
24,Genesis,1,1,24,"And God said, Let the earth bring forth living creatures after their kind, cattle, and creeping things, and beasts of the earth after their kind: and it was so."
25,Genesis,1,1,25,"And God made the beasts of the earth after their kind, and the cattle after their kind, and everything that creepeth upon the ground after its kind: and God saw that it was good."
26,Genesis,1,1,26,"And God said, Let us make man in our image, after our likeness: and let them have dominion over the fish of the sea, and over the birds of the heavens, and over the cattle, and over all the earth, and over every creeping thing that creepeth upon the earth."
27,Genesis,1,1,27,"And God created man in his own image, in the image of God created he him; male and female created he them."
28,Genesis,1,1,28,"And God blessed them: and God said unto them, Be fruitful, and multiply, and replenish the earth, and subdue it; and have dominion over the fish of the sea, and over the birds of the heavens, and over every living thing that moveth upon the earth."
29,Genesis,1,1,29,"And God said, Behold, I have given you every herb yielding seed, which is upon the face of all the earth, and every tree, in which is the fruit of a tree yielding seed; to you it shall be for food:"
30,Genesis,1,1,30,"and to every beast of the earth, and to every bird of the heavens, and to everything that creepeth upon the earth, wherein there is life, [I have given] every green herb for food: and it was so."
31,Genesis,1,1,31,"And God saw everything that he had made, and, behold, it was very good. And there was evening and there was morning, the sixth day."
Sketch
Full Sketch with text Input (with blinking Cursor, Enter to submit, Backspace to delete last letter, Esc to delete last search)
// Bible full text search
// constants
final int borderDistanceMainText = 22;
final int borderDistanceBibleText = 62;
final int lineDistance = 17;
// variables
Table tableBible;
String input="", search="";
int numberOfFindings = 0;
// --------------------------------------------------------------------------
void setup() {
size(1400, 860);
// load and show some data
tableBible=loadTable("asv.csv", "header");
println(tableBible.getColumnCount()); // Prints 6
println(tableBible.getRowCount()); // Prints 31102
// show headlines
TableRow row = tableBible.getRow(0);
for (int i=0; i < tableBible.getColumnCount(); i++) {
print(" | "+row.getColumnTitle(i)); // Prints
}
println("");
}//func
void draw() {
background(0);
// Main text upper left corner
fill(255); // white
text("Enter your search (submit with Enter, use Backspace): "
+input
+caret(), borderDistanceMainText, borderDistanceMainText);
// green text upper right corner
fill(0, 255, 0); // green
if (search.equals("")) {
// search phrase is empty, we show Bible text
text("Full text. Enter a search phrase and hit Enter ",
width-130, borderDistanceMainText,
110, 900);
} else {
// The search word has been entered, show the search word in green
text("Search:\n"
+ search
+ " \n(Esc to delete).\n"
+ numberOfFindings
+ " findings.",
width-130, borderDistanceMainText,
110, 900);
}//else
// Main Bible Output / search results
showText();
//
}//func
//---------------------------------------------------------------------------------
// Input functions
void keyPressed() {
if (key==CODED) {
return;
} else if (key==ESC) {
search="";
numberOfFindings=0;
key=0;
} else if (key==BACKSPACE) {
if (input.length()>0) {
input = input.substring( 0, input.length()-1 );
}
} else if (key==ENTER||key==RETURN) {
search=input;
input="";
} else if (key=='#') {
exit();
} else {
input+=key;
}
}//func
//---------------------------------------------------------------------------------
// Other important functions
void showText() {
fill(255);
if (! search.equals("")) {
// show search results
Iterable<TableRow> results = tableBible.matchRows( search, "Text" );
// println((TableRow)results.getRowCount());
int i=0;
for (TableRow row : results) {
showRow(row, i);
i++;
// we can quit after 10 findings
// if (i>10) break;
// we can quit when screen is full
// if ( i*lineDistance +borderDistance > width+30) break;
}//for
// Evaluate i:
if (i==0) {
text (" No findings", borderDistanceMainText, 1*lineDistance +borderDistanceBibleText);
numberOfFindings=0;
} else {
numberOfFindings=i;
}
} else {
// no search - show bible text
for (int i=0; i < 10; i++) {
TableRow row = tableBible.getRow(i);
showRow(row, i);
}
}
}//func
//---------------------------------------------------------------------------------
// Tools
void showRow(TableRow row_, int lineNumber_) {
text(
row_.getString("Book Name") + " "+
row_.getString("Chapter") + ":"+
row_.getString("Verse") + ": "+
row_.getString("Text"),
borderDistanceMainText, lineNumber_*lineDistance +borderDistanceBibleText);
}
String caret() {
// Blinking cursor: return | or blank
if (millis() % 1000 < 500)
return "|";
else
return " ";
}
//
Remark 1
Anyway, in the graphic you posted, the x-axis are the chapters of the Bible.
They are not in the csv but you can calculate them.
For example for Leviticus 3 the absolute chapter number is 3 + the sum of all chapters in the books before Leviticus (so result is 3 + Genesis chapters + Exodus chapters).
That’s your screen position.
Remark 2
You can make another Sketch B to write a new csv and let the current Sketch A use the additional new csv. The csv would contain the number of chapters for each biblical book, and also how many chapters there are in the Bible before this book (so when you think of Leviticus, say Genesis has 50 Chapters and Exodus 40 chapters, the entry would be 90. Then for Leviticus 3 you could say 90 + 3).
The screen pos for each biblical chapter is then .
Remark 3
You could make a grid of all biblical books and connect them (instead of using the chapters). Here is an example Sketch.
The Sketch is a bit more difficult because
- it uses a HashMap (and an ArrayList) to store the books from the csv-Bible and
- to store the books that occur in the search.
It also uses OOP.
It can be optimized of course. You can also switch between two views with Space Bar.
Please note that because the books are shown in two columns, the cross references within a column are just a vertical line. Bad. That could be improved when we would show the books in a circle.
// Bible full text search - with graphical lines between books
// imports
import java.util.Map;
// constants
final int borderDistanceMainText = 22;
final int borderDistanceBibleTextY = 62;
final int lineDistance = 17;
// variables
Table tableBible;
String input="", search="";
int numberOfFindings = 0;
boolean showGraphical = true; // How the search is displayed, toggle with ' ' Space Bar
// Books data
ArrayList<BiblicalBook> books = new ArrayList();
HashMap<String, BiblicalBook> hashMapBiblicalBooks = new HashMap<String, BiblicalBook>();
HashMap<String, Integer> hashMapBiblicalBooksFromSearch = new HashMap<String, Integer>();
// --------------------------------------------------------------------------
void setup() {
size(1400, 860);
// load and show some data
tableBible=loadTable("asv.csv", "header");
println(tableBible.getColumnCount()); // Prints 6
println(tableBible.getRowCount()); // Prints 31102
// show headlines
TableRow row = tableBible.getRow(0);
for (int i=0; i < tableBible.getColumnCount(); i++) {
print(" | "+row.getColumnTitle(i)); // Prints
}
println("");
initHashMap();
}//func
void draw() {
background(0);
// display book titels as grid
if (showGraphical) {
for (BiblicalBook bb : books) {
bb.display();
}
}
// Main text upper left corner
fill(255); // white
text("Enter your search (submit with Enter, use Backspace, toggle results view with Space Bar): "
+input
+caret(), borderDistanceMainText, borderDistanceMainText);
// green text upper right corner
fill(0, 255, 0); // green
if (search.equals("")) {
// search phrase is empty, we show Bible text
text("Full text. Enter a search phrase and hit Enter ",
width-130, borderDistanceMainText,
110, 900);
} else {
// The search word has been entered, show the search word in green
text("Search:\n"
+ search
+ " \n(Esc to delete).\n"
+ numberOfFindings
+ " findings.",
width-130, borderDistanceMainText,
110, 900);
}//else
// Main Bible Output / search results
showTextOrResults();
//
}//func
//---------------------------------------------------------------------------------
// Input functions
void keyPressed() {
if (key==CODED) {
return;
} else if (key==ESC) {
search="";
numberOfFindings=0;
key=0;
} else if (key==BACKSPACE) {
if (input.length()>0) {
input = input.substring( 0, input.length()-1 );
}
} else if (key==ENTER||key==RETURN) {
// submit
search=input;
// input="";
// init search
Iterable<TableRow> results = tableBible.matchRows( search, "Text" );
hashMapBiblicalBooksFromSearch.clear();
for (TableRow row2 : results) {
String bibBook = row2.getString("Book Name");
// new?
if (hashMapBiblicalBooksFromSearch.get(bibBook) == null) {
// add
hashMapBiblicalBooksFromSearch.put(bibBook, 1);
}
}
} else if (key=='#') {
exit(); // leave entire Sketch
} else if (key==' ') {
// Space Bar
showGraphical = ! showGraphical;// toggle
} else {
input+=key;
}
}//func
//---------------------------------------------------------------------------------
// Other important functions
void showTextOrResults() {
fill(255); // white
if (! search.equals("")) {
// show search results
// Grapical or textual
if (showGraphical) {
showResultsGraphical();
//showResultsGraphical2(results);
//
} else {
showResultsAsText();
}
//
} else {
// no search - show bible text
for (int i=0; i < 10; i++) {
TableRow row = tableBible.getRow(i);
showRow(row, i);
} //for
} //else
} //func
void showResultsAsText() {
// get results from table
Iterable<TableRow> results = tableBible.matchRows( search, "Text" );
int i=0;
for (TableRow row : results) {
showRow(row, i);
i++;
// we can quit after 10 findings
// if (i>10) break;
// we can quit when screen is full
// if ( i*lineDistance +borderDistance > width+30) break;
}//for
// Evaluate i:
if (i==0) {
text (" No findings", borderDistanceMainText, 1*lineDistance +borderDistanceBibleTextY);
numberOfFindings=0;
} else {
numberOfFindings=i;
}
}
//void showResultsGraphical2(Iterable<TableRow> results) {
// // This is a bad version and would run MUCH slower
// // get results from table
// Iterable<TableRow> results = tableBible.matchRows( search, "Text" );
// for (TableRow row : results) {
// for (TableRow row2 : results) {
// if (row!=row2) {
// BiblicalBook book1 = hashMapBiblicalBooks.get( row.getString("Book Name") );
// BiblicalBook book2 = hashMapBiblicalBooks.get( row2.getString("Book Name") );
// book1.showLine(book2);
// }//if
// }//for
// }//for
//}//func
void showResultsGraphical() {
// Using an enhanced loop to iterate over each entry
// This can be optimized
for (Map.Entry me : hashMapBiblicalBooksFromSearch.entrySet()) {
//print(me.getKey() + " is ");
//println(me.getValue());
for (Map.Entry me2 : hashMapBiblicalBooksFromSearch.entrySet()) {
if (me!=me2) {
BiblicalBook book1 = hashMapBiblicalBooks.get(me.getKey() ) ;
BiblicalBook book2 = hashMapBiblicalBooks.get(me2.getKey() ) ;
book1.showLine(book2);
}
}
}//for
}//func
void initHashMap() {
HashMap<String, Integer> hashMapBiblicalBooksLocal = new HashMap<String, Integer>();
int yStart = borderDistanceBibleTextY+220;
int x=125, y= yStart;
int columnCounterForBiblicalBooks=0;
for (TableRow row : tableBible.rows()) {
String bibBook = row.getString("Book Name");
// new?
if (hashMapBiblicalBooksLocal.get(bibBook) == null) {
// yes, add
hashMapBiblicalBooksLocal.put(bibBook, 1);
BiblicalBook newBiblicalBook = new BiblicalBook();
newBiblicalBook.name= bibBook;
newBiblicalBook.pos = new PVector(x, y);
// set anchor
if (columnCounterForBiblicalBooks == 0)
newBiblicalBook.anchor = new PVector(x+119, y);
else if (columnCounterForBiblicalBooks == 1)
newBiblicalBook.anchor = new PVector(x-4, y);
else {
println("Error unknown columnCounterForBiblicalBooks +++++++++++++++++++++++");
exit();
return;
}//else
// add
books.add(newBiblicalBook);
hashMapBiblicalBooks.put(bibBook, newBiblicalBook);
// inc y pos
y+=lineDistance;
if (y > height-33) {
// new column
columnCounterForBiblicalBooks++;
x+=190;
y = yStart;
}//if
}//if
}//for
}//func
//---------------------------------------------------------------------------------
// Tools
void showRow(TableRow row_, int lineNumber_) {
text(
row_.getString("Book Name") + " "+
row_.getString("Chapter") + ":"+
row_.getString("Verse") + ": "+
row_.getString("Text"),
borderDistanceMainText, lineNumber_*lineDistance +borderDistanceBibleTextY);
}
String caret() {
// Blinking cursor: return | or blank
if (millis() % 1000 < 500)
return "|";
else
return " ";
}
//===============================================================================
class BiblicalBook {
String name; // name of the book
PVector pos; // text position on the screen
PVector anchor; // anchor for blue line (can be different from pos)
void display() {
fill(255);
text(name,
pos.x, pos.y);
}//method
void showLine (BiblicalBook book_ ) {
stroke(0, 0, 255);
line(anchor.x, anchor.y,
book_.anchor.x, book_.anchor.y);
if (dist(mouseX, mouseY, anchor.x, anchor.y ) < 19) {
// display verse or something
}//if
} //method
//
}//class
//
Book Names
Here are the book names.
BookName
Genesis
Exodus
Leviticus
Numbers
Deuteronomy
Joshua
Judges
Ruth
1 Samuel
2 Samuel
1 Kings
2 Kings
1 Chronicles
2 Chronicles
Ezra
Nehemiah
Esther
Job
Psalms
Proverbs
Ecclesiastes
Song of Solomon
Isaiah
Jeremiah
Lamentations
Ezekiel
Daniel
Hosea
Joel
Amos
Obadiah
Jonah
Micah
Nahum
Habakkuk
Zephaniah
Haggai
Zechariah
Malachi
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
Books with number of chapters
Book,NumberOfChapters
Genesis,50
Exodus,40
Leviticus,27
Numbers,36
Deuteronomy,34
Joshua,24
Judges,21
Ruth,4
1 Samuel,31
2 Samuel,24
1 Kings,22
2 Kings,25
1 Chronicles,29
2 Chronicles,36
Ezra,10
Nehemiah,13
Esther,10
Job,42
Psalms,150
Proverbs,31
Ecclesiastes,12
Song of Solomon,8
Isaiah,66
Jeremiah,52
Lamentations,5
Ezekiel,48
Daniel,12
Hosea,14
Joel,3
Amos,9
Obadiah,1
Jonah,4
Micah,7
Nahum,3
Habakkuk,3
Zephaniah,3
Haggai,2
Zechariah,14
Malachi,4
Matthew,28
Mark,16
Luke,24
John,21
Acts,28
Romans,16
1 Corinthians,16
2 Corinthians,13
Galatians,6
Ephesians,6
Philippians,4
Colossians,4
1 Thessalonians,5
2 Thessalonians,3
1 Timothy,6
2 Timothy,4
Titus,3
Philemon,1
Hebrews,13
James,5
1 Peter,5
2 Peter,3
1 John,5
2 John,1
3 John,1
Jude,1
Revelation,22
Nice project!
Warm regards,
Chrisir