| Server IP : 54.37.205.81 / Your IP : 216.73.216.76 Web Server : nginx/1.22.1 System : Linux vps-249481fa 6.1.0-50-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.176-1 (2026-07-02) x86_64 User : debian ( 1000) PHP Version : 8.2.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/lunr/ |
Upload File : |
from lunr.token_set import TokenSet
from lunr.exceptions import BaseLunrException
class TokenSetBuilder:
def __init__(self):
self.previous_word = ""
self.root = TokenSet()
self.unchecked_nodes = []
self.minimized_nodes = {}
def insert(self, word):
if word < self.previous_word:
raise BaseLunrException("Out of order word insertion")
common_prefix = 0
for i in range(min(len(word), len(self.previous_word))):
if word[i] != self.previous_word[i]:
break
common_prefix += 1
self.minimize(common_prefix)
node = (
self.root if not self.unchecked_nodes else self.unchecked_nodes[-1]["child"]
)
for i in range(common_prefix, len(word)):
next_node = TokenSet()
char = word[i]
node.edges[char] = next_node
self.unchecked_nodes.append(
{"parent": node, "char": char, "child": next_node}
)
node = next_node
node.final = True
self.previous_word = word
def finish(self):
self.minimize(0)
def minimize(self, down_to):
for i in range(len(self.unchecked_nodes) - 1, down_to - 1, -1):
node = self.unchecked_nodes[i]
child_key = str(node["child"])
if child_key in self.minimized_nodes:
node["parent"].edges[node["char"]] = self.minimized_nodes[child_key]
else:
node["child"]._str = child_key
self.minimized_nodes[child_key] = node["child"]
self.unchecked_nodes.pop()