You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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}")

关键细节解释:

  1. 字典处理:用strip()清理换行符和空格,转小写是为了避免比如Appleapple被误判为拼写错误,哈希表的查询时间复杂度是O(1),这也是哈希表比线性/二分搜索高效的地方
  2. 文档单词提取:用正则r'\b[a-zA-Z]+\b'可以精准提取纯字母的单词,自动忽略标点、数字和符号,同时整个文本转小写保证匹配一致性
  3. 去重处理:最后用set()去重,避免同一个错误单词在文档中多次出现时被重复返回

你可以直接运行这段代码,把你的dict.txttest.txt路径填对就行,应该就能得到正确的拼写错误单词列表啦!

内容的提问来源于stack exchange,提问作者Steven M

火山引擎 最新活动