搜索关键字而不是整个词 - py

时间:2017-06-26 03:33:50

标签: python python-3.x hash trie prefix-tree

我的哈希码只返回单词的整个标题。 我想让它只使用关键字来显示结果 至少2个单词(从前)然后显示结果(获取功能)。

我的哈希码

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)

样本输出:

输入整个标题时

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

键入关键字时(即使键入关键字,我也需要显示结果)

no results when keyword is typed

我需要的是: 输出: 骗子 - Kygos 以及他们名字中的chea的其他词语

1 个答案:

答案 0 :(得分:0)

哈希表不是此任务的正确数据结构。哈希值的目的是将搜索范围缩小到可能性的一小部分。由于哈希值取决于整个字符串,因此仅使用字符串的一部分将给出错误的子集。

此任务的更好的数据结构是trie(有时称为"前缀树")。虽然自己编写这种数据结构并不困难,但PyPI上已经有许多已经过测试的现成模块。

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