Use macula-greek English glosses in suggest modal instead of KJV kjv_def

Adds public/nt-strongs-gloss.json (100 KB) — the most-common per-word
English gloss for each Strong's number, computed from the macula-greek
SBLGNT dataset. This replaces the fragile kjv_def comma-parsing approach:
grace now shows "grace" not "acceptable", God shows "God" not "X exceeding",
will shows "will" not "desire", etc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 4.6 committed 2026-05-28 13:12:10 -04:00
1 parent 64e77fb40e
commit 537ea24eb3
2 files changed
+21 -3

No files matched your search

+1
View File
@@ -0,0 +1 @@
{"G976":"book","G1078":"birth","G2424":"Jesus","G5547":"Christ","G5207":"son","G1138":"David","G11":"Abraham","G1080":"born","G2464":"Isaac","G1161":"but","G2384":"Jacob","G2455":"Judas","G2532":"and","G3588":"the","G80":"brothers","G846":"him","G5329":"Perez","G2196":"Zerah","G1537":"from","G2283":"Tamar","G2074":"Hezron","G689":"Ram","G284":"Amminadab","G3476":"Nahshon","G4533":"Salmon","G1003":"Boaz","G4477":"Rahab","G5601":"Obed","G4503":"Ruth","G2421":"Jesse","G935":"king","G4672":"Solomon","G3774":"Uriah","G4497":"Rehoboam","G7":"Abijah","G760":"Asa","G2498":"Jehoshaphat","G2496":"Joram","G3604":"Uzziah","G2488":"Jotham","G881":"Ahaz","G1478":"Hezekiah","G3128":"Manasseh","G300":"Amon","G2502":"Josiah","G2423":"Jeconiah","G1909":"on","G3350":"deportation","G897":"Babylon","G3326":"with","G4528":"Shealtiel","G2216":"Zerubbabel","G10":"Abiud","G1662":"Eliakim","G107":"Azor","G4524":"Zadok","G885":"Achim","G1664":"Eliud","G1648":"Eleazar","G3157":"Matthan","G2501":"Joseph","G435":"men","G3137":"Mary","G3739":"which","G3004":"said","G3956":"all","G3767":"therefore","G1074":"generation","G575":"from","G2193":"until","G1180":"fourteen","G3779":"so","G2258":"was","G3423":"engaged","G3384":"mother","G4250":"before","G2228":"or","G4905":"come together","G848":"them","G2147":"found","G1722":"in","G1064":"*","G2192":"have","G4151":"Spirit","G40":"Holy","G1342":"righteous","G5607":"was","G3361":"not","G2309":"want","G1165":"disgrace","G1014":"want","G2977":"secretly","G630":"release","G5023":"these","G1760":"considered","G2400":"behold","G32":"angel","G2962":"Lord","G2596":"according to","G3677":"dream","G5316":"appeared","G5399":"afraid","G3880":"took","G1135":"woman","G4675":"your","G1063":"for","G2076":"is","G5088":"bear","G2564":"called","G3686":"name","G4982":"saved","G2992":"people","G266":"sin","G5124":"this","G3650":"whole","G1096":"happened","G2443":"so that","G4137":"fulfilled","G5259":"by","G1223":"through","G4396":"prophets","G3933":"virgin","G1694":"Immanuel","G3177":"translated","G2257":"our","G2316":"God","G1453":"raised","G5258":"sleep","G4160":"do","G5613":"as","G4367":"commanded","G3756":"not","G1097":"know","G965":"Bethlehem","G2449":"Judea","G2250":"day","G2264":"Herod","G3097":"wise men","G395":"east","G3854":"came","G1519":"to","G2414":"Jerusalem","G4226":"where","G2453":"jews","G3708":"saw","G792":"stars","G2064":"come","G4352":"worship","G191":"heard","G5015":"troubled","G4863":"gathered","G749":"chief priests","G1122":"scribes","G4441":"asked","G3844":"from","G2036":"said","G1125":"written","G4771":"you","G1093":"earth","G2448":"Judah","G3760":"by no means","G1646":"least","G1488":"are","G2232":"governor","G1831":"went out","G2233":"consider","G3748":"who","G4165":"shepherd","G3450":"my","G2474":"Israel","G5119":"then","G198":"determined","G5550":"time","G3992":"sent","G4198":"go","G1833":"search","G199":"carefully","G4012":"about","G3813":"child","G1875":"when","G518":"reported","G3427":"me","G3704":"so that","G2504":"and I","G4254":"go ahead of","G2476":"standing","G1883":"on","G3757":"where","G5463":"rejoice","G5479":"joy","G3173":"great","G4970":"greatly","G3614":"house","G4098":"fell","G455":"opened","G2344":"treasure","G4374":"brought","G1435":"gift","G5557":"gold","G3030":"frankincense","G4666":"myrrh","G5537":"warned","G344":"return","G4314":"to","G243":"another","G3598":"way","G402":"withdrew","G5561":"country","G5343":"flee","G125":"Egypt","G2468":"be","G1563":"there","G302":"*","G4671":"you","G3195":"was about to","G2212":"seek","G622":"destroy","G3571":"night","G5054":"death","G3754":"that","G1702":"mocked","G2373":"became ~ angry","G3029":"very","G649":"sent","G337":"kill","G3816":"servant","G3725":"region","G1332":"two years old","G2736":"down","G2408":"Jeremiah","G5456":"voice","G4471":"Ramah","G2805":"weeping","G3602":"mourning","G4183":"many","G4478":"Rachel","G2799":"weep","G5043":"children","G3870":"urge","G1526":"are","G5053":"died","G2348":"dead","G5590":"life","G1525":"enter","G745":"Archelaus","G936":"reign","G473":"for","G3962":"father","G565":"went","G3313":"part","G1056":"Galilee","G2730":"dwell","G4172":"city","G3478":"Nazareth","G3480":"of Nazareth","G1565":"that","G2491":"John","G910":"baptist","G2784":"preach","G2048":"wilderness","G3340":"repent","G1448":"approached","G932":"kingdom","G3772":"heaven","G3778":"this","G2268":"Isaiah","G994":"crying out","G2090":"prepared","G2117":"immediately","G5147":"paths","G1742":"clothing","G2359":"hair","G2574":"camel","G2223":"belt","G1193":"leather","G3751":"waist","G5160":"food","G200":"locusts","G3192":"honey","G66":"wild","G1607":"came","G4066":"surrounding region","G2446":"Jordan","G907":"baptized","G4215":"river","G1843":"confessing","G5330":"Pharisees","G4523":"Sadducees","G908":"baptism","G1081":"brood","G2191":"vipers","G5101":"what","G5263":"show","G5213":"you","G3709":"wrath","G2590":"fruit","G514":"worthy","G3341":"repentance","G1380":"think","G1438":"himself","G1410":"can","G3037":"stone","G5130":"these","Line truncated
+20 -3
View File
@@ -918,6 +918,23 @@ useEffect(() => {
const _concordanceRef = useRef(null);
const _concordanceLoadingRef = useRef(null);
// Cache for the NT Strong's→English gloss map (from macula-greek dataset), loaded once
const _glossRef = useRef(null);
const _glossLoadingRef = useRef(null);
const loadNtGloss = async () => {
if (_glossRef.current) return _glossRef.current;
if (_glossLoadingRef.current) return _glossLoadingRef.current;
_glossLoadingRef.current = fetch('/nt-strongs-gloss.json')
.then((res) => res.json())
.then((data) => {
_glossRef.current = data;
_glossLoadingRef.current = null;
return data;
});
return _glossLoadingRef.current;
};
const loadNtConcordance = async () => {
if (_concordanceRef.current) return _concordanceRef.current;
if (_concordanceLoadingRef.current) return _concordanceLoadingRef.current;
@@ -959,7 +976,7 @@ useEffect(() => {
}
setSuggestingGreekForChunkId(chunkId);
try {
const [concordance, dict] = await Promise.all([loadNtConcordance(), loadGreekDict()]);
const [concordance, dict, gloss] = await Promise.all([loadNtConcordance(), loadGreekDict(), loadNtGloss()]);
const bookData = concordance[chapter.bookAbbrev] ?? {};
const chapterData = bookData[chapter.chapter] ?? {};
@@ -986,7 +1003,7 @@ useEffect(() => {
strongKey,
lexeme: entry?.lemma ?? '',
translit: entry?.translit ?? '',
def: entry?.kjv_def ?? 'No definition found.',
def: gloss[strongKey] ?? entry?.kjv_def ?? 'No definition found.',
entry,
});
}
@@ -2159,7 +2176,7 @@ const restoreRemoteProject = async (id) => {
/>
<div className="min-w-0 flex-1">
<div className="flex items-baseline gap-2">
<span className="font-semibold text-slate-900">{(w.def ? (w.def.split(',').map(s => s.trim()).filter(s => !s.startsWith('X ') && !s.startsWith('+ ')).map(s => s.replace(/^[\s()\-]+/, '').trim()).find(s => s.length > 0) || w.def.split(',')[0].trim()) : w.strongKey)}</span>
<span className="font-semibold text-slate-900">{w.def || w.strongKey}</span>
<span className="text-sm text-slate-500">{w.lexeme}</span>
{w.translit && <span className="text-xs text-slate-400 italic">{w.translit}</span>}
<span className="text-xs font-mono text-slate-300">{w.strongKey}</span>