# 1.txt
C語言中文網
# 2.txt
http://c.biancheng.net
# 3.txt
「C語言中文網」是一個線上學習程式設計的網站,我們發布了多套文字教學,它們都通俗易懂,深入淺出。
# 4.txt
C語言中文網成立於 2012 年初,目前已經運營了將近 7 年,我們致力於分享精品教學,幫助對程式設計感興趣的讀者。
# 5.txt
堅持做好一件事情,做到極致,讓自己感動,讓使用者心動,這就是足以傳世的作品!
class SearchEngineBase: def __init__(self): pass #搜尋器 def add_corpus(self, file_path): with open(file_path, 'rb') as fin: text = fin.read().decode('utf-8') self.process_corpus(file_path, text) #索引器 def process_corpus(self, id, text): raise Exception('process_corpus not implemented.') #檢索器 def search(self, query): raise Exception('search not implemented.') #使用者介面 def main(search_engine): for file_path in ['1.txt', '2.txt', '3.txt', '4.txt', '5.txt']: search_engine.add_corpus(file_path) while True: query = input() results = search_engine.search(query) print('found {} result(s):'.format(len(results))) for result in results: print(result)以上程式碼僅是建立了搜尋引擎的一個基本框架,它可以作為基礎類別被其他類繼承,那麼繼承自此類的類將分別代表不同的搜尋引擎,它們應該各自實現基礎類別中的 process_corpus() 和 search() 方法。
#繼承SearchEngineBase類,並重寫了 process_corpus 和 search 方法 class SimpleEngine(SearchEngineBase): def __init__(self): super(SimpleEngine, self).__init__() #建立索引時使用 self.__id_to_texts = {} def process_corpus(self, id, text): #以檔案路徑為鍵,檔案內容為值,形成鍵值對,儲存在字典中,由此建立索引 self.__id_to_texts[id] = text def search(self, query): results = [] #依次檢索字典中的鍵值對,如果檔案內容中包含使用者要搜尋的資訊,則將此檔案的檔案路逕儲存在 results 列表中 for id, text in self.__id_to_texts.items(): if query in text: results.append(id) return results search_engine = SimpleEngine() main(search_engine)執行結果為:
C語言中文網
found 3 result(s):
1.txt
3.txt
4.txt