[sword-devel] Searching for entity attributes

Tobias Klein contact at tklein.info
Tue Jun 18 13:58:36 EDT 2024


> On 5/14/24 5:20 PM, David "Judah's Shadow" Blue wrote:
>>>
>>> I'm sure I could add some logic to check the given module and adapt the
>>> token to fit, but that doesn't help the other issue I've found. When
>>> searching for, say, G11 in a module that isn't 0 padded, all occurrences
>>> of G11 are found, but so are all occurrences of G110, G1105, etc.
>>> Assuming that normalization of padding on the entity attributes adds
>>> padding to them so it's in the form of G0XXXX, that should cut down on
>>> the false matches significantly.
>>>
>>> In node-sword-interface I added some logic for this, so that the user does
>>> not have to consider that.
>>>
>>>
>>> https://github.com/ezra-bible-app/node-sword-interface/blob/794c349bece231
>>> e2aa58bdacb7fe4aaffe774bcf/src/sword_backend/module_search.cpp#L146>
>>>              // If the Strong's key is OT we need to insert a zero in front
>>>
>>> of the key
>>>
>>>              // This is necessary because the Sword modules with Strong's
>>>
>>> have a zero in front of the Hebrew Strong's numbers
>>>
>>>              if (searchTerm[0] == 'H' &&
>>>
>>> this->_textProcessor.moduleHasStrongsZeroPrefixes(module)) {
>>>
>>>                  // Cut out the number from the Strong's key (starting at
>>>
>>> index 1 until end of string)
>>>
>>>                  string strongsKey = searchTerm.substr(1,
>>>
>>> searchTerm.size());
>>>
>>>                  // Overwrite the searchTerm with an inserted 0
>>>                  searchTerm = "H0" + strongsKey;
>>>              
>>>              }
> I just checked in diatheke and it looks like this will fail for the NASB, for
> instance, because the NASB doesn't have leading 0s in either Testament.
>
> And the bigger issue in my interface, when you retrieve a Strong's number from
> the lexicon by searching for a term (i.e. Alpha), it passes through the
> strongsPadding logic and gets leading 0's added. Until strongsPadding is added
> to the entity attribute search in the SWORD engine, I may fall back to
> stripping 0's out of the users input if the first search comes up empty. But
> that still won't solve the issue of searching for G matching G11, and so on.
> For that, I feel, the solution is to do use the strongsPadding logic on the
> entity attributes since that seems to add leading 0's.

I don't think I have either of those issues in node-sword-interface.

The module-based logic has the purpose that you prevent adding the 
padding if the module does not have it - that's what the helper function 
moduleHasStrongsZeroPrefixes 
<https://github.com/ezra-bible-app/node-sword-interface/blob/794c349bece231e2aa58bdacb7fe4aaffe774bcf/src/sword_backend/text_processor.cpp#L610>() 
is for.

Regarding the issue with G1 also matching G11, etc. I have the following 
snippet of code below the section I posted above:

             // from swmodule.h api docs:
             // for use with entryAttrib search type to match whole 
entry to value, e.g., G1234 and not G12345
             flags |= SWModule::SEARCHFLAG_MATCHWHOLEENTRY;

             searchTerm = "Word//Lemma./" + searchTerm;

Best regards,
Tobias


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://crosswire.org/pipermail/sword-devel/attachments/20240618/30df4f31/attachment.htm>


More information about the sword-devel mailing list