2017-06-26 10 views
1

Meine Hashcodes gibt nur den vollständigen Titel des Worts zurück. Ich möchte es machen, um die Ergebnisse zu zeigen mit nur Stichwörter für mindestens 2 Wort (ab) dann zeigen Sie die Ergebnisse (Funktion erhalten).Suche nach Schlüsselwort statt ganzes Wort - py

Mein Hash-Code

class hashin: 
def __init__(self): 
    self.size = 217 # size of hash table 
    self.map = [None] * self.size 

def _get_hash(self, key): 
    hash = 0 
    for char in str(key): 
     hash += ord(char) 
    return hash % self.size 
#returns the ASCII value of char in str(key) 

def add(self, key, value): # add item to list 
    key_hash = self._get_hash(key) 
    key_value = [key, value] 
    if self.map[key_hash] is None: 
     self.map[key_hash] = list([key_value]) 
     return True 
    else: 
     for pair in self.map[key_hash]: 
      if pair[0] == key: 
       pair[1] = value 
       return True 
     self.map[key_hash].append(key_value) 
     return True 

def get(self, key): # search for item 
    key_hash = self._get_hash(key) 
    if self.map[key_hash] is not None: 
     for pair in self.map[key_hash]: # find pair of words 
      if pair[0] == key: # if pair is equals to the whole title of the word 
       return pair[0] + " - " + pair[1] 
    return "Error no results for %s \nEnter the correct word." % (key) 

Probe Ausgänge:

wenn ganze Titel

Sample Output search (needs to have the whole word in order to show)

Wenn Schlüsselwort (i eingegeben wurde

eingegeben wurde müssen die Ergebnisse zeigen, auch wenn Stichwort wurde eingegeben)

no results when keyword is typed

Was ich brauche, ist: Ausgang: Cheater - Kygos und die anderen Wörter mit Chea in ihrem Namen

+0

Sie könnten besser erklären, Sie Beispiele für Ein- und Ausgänge zeigen könnten Sie besser zu verstehen. – eyllanesc

+0

Darüber hinaus hat Beziehung mit Pyqt, da die Funktionalität, die Proben nicht von Pyqt benötigen, wie es Ihren Code zeigt. – eyllanesc

+0

Entschuldigung, ich werde versuchen, meine Frage erneut zu veröffentlichen, dann posten Sie ein Bild darüber –

Antwort

1

Eine Hash-Tabelle für diese Aufgabe nicht die richtige Datenstruktur ist. Der Zweck eines Hash-Wertes besteht darin, die Suche auf eine kleine Teilmenge der Möglichkeiten zu beschränken. Da der Hash-Wert von der gesamten Zeichenfolge abhängig ist, wird nur ein Teil der Zeichenfolge die falsche Teilmenge geben.

Eine bessere Datenstruktur für diese Aufgabe ist ein trie (manchmal auch als "Präfixbaum" bezeichnet). Während es nicht schwer ist, diese Datenstruktur selbst zu schreiben, gibt es bereits viele getestete, sofort einsatzbereite Module auf PyPI.

See: https://pypi.python.org/pypi?%3Aaction=search&term=trie&submit=search