목록에 이름의 기록 데이터 (1000에 가까운)를 저장하여 사용자가 설정 한 입력 쿼리에 대해 자동 완성을 수행하는 매우 최소한의 코드가 있습니다. 지금은 사전 식으로 가장 작은 순서로 제안합니다. 목록에 저장Python - 무작위 쿼리를 사용하여 숫자와 제안에 대한 자동 완성 기능
이름은 (가상)입니다 : 사용자가 주어진
names = ["show me 7 wonders of the world","most beautiful places","top 10 places to visit","Population > 1000","Cost greater than 100"]
쿼리가 될 수 있습니다
queries = ["10", "greater", ">", "7 w"]
현재 구현 :
class Index(object):
def __init__(self, words):
index = {}
for w in sorted(words, key=str.lower, reverse=True):
lw = w.lower()
for i in range(1, len(lw) + 1):
index[lw[:i]] = w
self.index = index
def by_prefix(self, prefix):
"""Return lexicographically smallest word that starts with a given
prefix.
"""
return self.index.get(prefix.lower(), 'no matches found')
def typeahead(usernames, queries):
users = Index(usernames)
print "\n".join(users.by_prefix(q) for q in queries)
이 작품 쿼리가 미리 저장된 이름으로 시작하면 문제 없습니다. 그러나 무작위 항목 (문자열의 중간에서 쿼리)을 만들면 제안을 제공하지 못합니다. 또한 숫자를 인식하지 못하고 숫자도 인식하지 못합니다.
기존 구현을 개선하기 위해 위의 기능을 포함 할 수있는 방법이 있는지 궁금합니다.
도움을 주시면 대단히 감사하겠습니다.
괜찮습니다. 하지만 쿼리를 대/소문자를 구분하지 싶습니다. 현재는 소문자와 대문자를 다르게 간주합니다. –
그냥 item.lower()에서 prefix.lower()를 수행 한 다음 – Keatinge
예. 그건 그렇습니다. 특정 검색어에 대해 상위 5 개 이름을 제안하는 등의 개선을위한 아이디어가 있습니까? –