Python哈希表拼写检查实现遇阻,已完成线性与二分搜索版本
哈希表实现拼写检查的修正方案
嘿,我看你已经搞定了线性和二分搜索版本的拼写检查,卡在哈希表这里了对吧?咱们来一步步把问题解决掉!
先说说你现有代码里的几个小坑:
- 读取字典文件时,每行的单词会带着换行符
\n,导致哈希表的键是"apple\n"这种格式,和你从文档里提取的正常单词匹配不上 - 文档处理部分没完成,而且没考虑文本里的标点、大小写问题,这些都会影响检查结果
- 缺少遍历文档单词并对比哈希表的核心逻辑
下面是修正后的完整代码,我加了详细注释:
import re def spell_check_with_hash(dict_path, test_path): # 初始化哈希表(Python的dict本身就是哈希表实现) dictionary = {} # 读取字典文件,处理每个单词 with open(dict_path, 'r') as f: for line in f: # 去掉换行符和前后空格,转成小写(统一大小写避免误判) word = line.strip().lower() if word: # 跳过空行 dictionary[word] = 1 # 读取测试文档并提取所有单词 misspelled_words = [] with open(test_path, 'r') as f: text = f.read().lower() # 整个文本转小写 # 用正则提取所有字母组成的单词(忽略标点、数字) words = re.findall(r'\b[a-zA-Z]+\b', text) # 遍历每个单词检查是否在哈希表中 for word in words: if word not in dictionary: misspelled_words.append(word) # 返回去重后的拼写错误单词(避免重复的错误单词多次出现) return list(set(misspelled_words)) # 调用示例 if __name__ == "__main__": errors = spell_check_with_hash('dict.txt', 'test.txt') print("拼写错误的单词:") for error in errors: print(f"- {error}")
关键细节解释:
- 字典处理:用
strip()清理换行符和空格,转小写是为了避免比如Apple和apple被误判为拼写错误,哈希表的查询时间复杂度是O(1),这也是哈希表比线性/二分搜索高效的地方 - 文档单词提取:用正则
r'\b[a-zA-Z]+\b'可以精准提取纯字母的单词,自动忽略标点、数字和符号,同时整个文本转小写保证匹配一致性 - 去重处理:最后用
set()去重,避免同一个错误单词在文档中多次出现时被重复返回
你可以直接运行这段代码,把你的dict.txt和test.txt路径填对就行,应该就能得到正确的拼写错误单词列表啦!
内容的提问来源于stack exchange,提问作者Steven M




