Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

34
LINES

< > BotCompany Repo | #1028973 - wordIndex_lookupString

JavaX fragment (include) [tags: use-pretranspiled]

Libraryless. Click here for Pure Java version (3871L/24K).

// returns a prefiltered list of elements; you still need to do a
// full-text search on those.
// If it returns null, you have to search all elements
static <A> Cl<A> wordIndex_lookupString(WordIndex<A> index, S query) {
  L<IntRange> ranges = index.wordRanges(query);
  if (empty(ranges)) null;
  new L<Set<A>> sets;
  
  for (IntRange r : ranges) { // go through words in query
    S word = substring(query, r);
    Set<A> l;
    if (r.start == 0)
      if (r.end == l(query))
        l = msmGetAllAsSet(index.index, containingIC(index.words(), word));
      else
        l = msmGetAllAsSet(index.index, endingWithIC(index.words(), word));
    else if (r.end == l(query))
      l = msmGetAllAsSet(index.index, prefixSubSet(index.words(), word));
    else
      l = index.get(word);
    if (empty(l)) ret l;
    sets.add(l);
  }
  Set<A> smallest = smallestCollection(sets), out = smallest;
  for (Set<A> set : sets) {
    if (set == smallest) continue;
    new Set<A> out2;
    for (A a : out)
      if (set.contains(a))
        out2.add(a);
    out = out2;
  }
  ret out;
}

download  show line numbers  debug dex   

Travelled to 5 computer(s): bhatertpkbcr, mqqgnosmbjvj, pzhvpgtvlbxg, tvejysmllsmz, xrpafgyirdlv

No comments. add comment

Snippet ID: #1028973
Snippet name: wordIndex_lookupString
Eternal ID of this version: #1028973/12
Text MD5: 2122ffc37290d0a75f35ff1d27fe436a
Transpilation MD5: 016383dfc319861b4032be792faf4fb5
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2020-07-15 13:33:53
Source code size: 1110 bytes / 34 lines
Pitched / IR pitched: No / No
Views / Downloads: 57 / 105
Version history: 11 change(s)
Referenced in: #1006654 #1029005

Formerly at http://tinybrain.de/1028973 & http://1028973.tinybrain.de