Hello.
As you are looking for a way to map the English word(s) to the source
Original word(s), using Strong's tagged text for both english and
greek/hebrew version would let you easily map each one. The only
"intelligent" decision left to do would be to decide which word maps
to which in sentence where a given Strong's word would occurs more
than one time.
This can be done with the sword library and some module with Strong's tagging.
https://www.crosswire.org/sword/index.jsp
Greek, hebrew and KJV (there may be other translation with Strongs data).
https://www.crosswire.org/sword/modules/ModInfo.jsp?modName=MorphGNT
https://www.crosswire.org/sword/modules/ModInfo.jsp?modName=LXX
https://www.crosswire.org/sword/modules/ModInfo.jsp?modName=OSHB
https://www.crosswire.org/sword/modules/ModInfo.jsp?modName=KJV
Using the diatheke command line tool (by example "diatheke -b MorphGNT
-o an -f plain -k John 1:1") , you can display the Strong's number,
all what is left is to "draw the line" between each text :
John 1:1: In <G1722> the beginning <G746> was <G2258> the Word <G3588>
<G3056>, and <G2532> the Word <G3588> <G3056> was <G2258> with <G4314>
God <G3588> <G2316>, and <G2532> the Word <G3588> <G3056> was <G2258>
God <G2316>.
(KJV)
John 1:1: Ἐν <G1722> ἀρχῇ <G0746> ἦν <G1510> ὁ <G3588> λόγος <G3056>,
καὶ <G2532> ὁ <G3588> λόγος <G3056> ἦν <G1510> πρὸς <G4314> τὸν
<G3588> θεόν <G2316>, καὶ <G2532> θεὸς <G2316> ἦν <G1510> ὁ <G3588>
λόγος <G3056>.
(MorphGNT)
The Sword libary in itself is in C++ . There are wrapper for python.
I do not know how to make something smarter than that, but if I had
to, i think i would look for the following project for the greek part
of the problem:
https://github.com/biblissima/eulexis
I use a web frontend to get automatic greek parsing and i find it impressive:
https://outils.biblissima.fr/fr/eulexis/
If anyone knows of something like this for hebrew, please let us know.