deepseek-v4.1-flash 在「实现拼写检查器」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:deepseek-v4.1-flash
- 用例名称:实现拼写检查器
- 测试类型:文本生成
- 评测维度:代码生成
系统提示词(System Prompt)
这是给 AI 模型的背景设定和角色指令:
你是一名资深算法工程师,擅长字符串处理与动态规划算法。 回答要求: 1. 使用 Python 语言实现,代码需可直接运行。 2. 核心算法(编辑距离)必须使用动态规划实现,不得调用第三方库。 3. 代码需包含清晰的注释,解释关键步骤的逻辑。 4. 提供至少 3 组测试用例验证正确性,输出结果需格式清晰。 5. 追求代码简洁性与正确性,优先保证逻辑准确。
用户提示词(User Prompt)
这是用户给 AI 模型的具体任务要求:
请使用 Python 实现一个简单的拼写检查器,具体要求如下: **功能要求:** 1. 实现 `levenshtein_distance(word1, word2)` 函数,使用动态规划计算两个单词之间的编辑距离(Levenshtein Distance)。 - 编辑操作包括:插入一个字符、删除一个字符、替换一个字符,每种操作代价均为 1。 2. 实现 `spell_check(word, dictionary)` 函数: - 若 `word` 存在于 `dictionary` 中,返回 `{「correct」: True, 「suggestions」: []}`。 - 若 `word` 不在 `dictionary` 中,从词典中找出编辑距离最小的单词作为建议,返回 `{「correct」: False, 「suggestions」: [最相似单词列表]}`。 - 若存在多个编辑距离相同的最小值单词,全部包含在 `suggestions` 列表中,并按字母顺序排列。 - 检查时忽略大小写(统一转为小写处理)。 **输入输出示例:**
评测结果
综合得分
该模型在此用例的得分为:95.5 分(满分 100 分),已通过
基础难度评测结果
- 得分:95.5 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
下面是一个完整的 Python 拼写检查器实现,包含动态规划版 Levenshtein 编辑距离、忽略大小写的拼写检查,以及多组测试用例。 ```python def levenshtein_distance(word1, word2): """ 使用动态规划计算两个单词之间的 Levenshtein 编辑距离。 允许的编辑操作: - 插入一个字符 - 删除一个字符 - 替换一个字符 每种操作代价均为 1。 """ m, n = len(word1), len(word2) # dp[i][j] 表示:word1 的前 i 个字符转换为 word2 的前 j 个字符所需的最小编辑距离 dp = [[0] * (n + 1) for _ in range(m + 1)] # 初始化边界: # word1 前 i 个字符转换为空字符串,需要删除 i 次 for i in range(m + 1): dp[i][0] = i # 空字符串转换为 word2 前 j 个字符,需要插入 j 次 for j in range(n + 1): dp[0][j] = j for i in range(1, m + 1): for j in range(1, n + 1): if word1[i - 1] == word2[j - 1]: # 当前字符相同,无需额外操作 dp[i][j] = dp[i - 1][j - 1] else: # 分别对应三种操作: # dp[i - 1][j] 删除 word1[i - 1] # dp[i][j - 1] 插入 word2[j - 1] # dp[i - 1][j - 1] 替换 dp[i][j] = 1 + min( dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1] ) return dp[m][n] def spell_check(word, dictionary): """ 拼写检查函数,忽略大小写。 参数: word: 待检查的单词 dictionary: 词典列表 返回: { "correct": bool, "suggestions": list } """ word_lower = word.lower() # 忽略大小写判断单词是否已经在词典中 lower_dict_set = {w.lower() for w in dictionary} if word_lower in lower_dict_set: return {"correct": True, "suggestions": []} # 空词典无法给出建议 if not dictionary: return {"correct": False, "suggestions": []} min_distance = float("inf") suggestions = [] # 遍历词典,寻找编辑距离最小的单词 for dict_word in dictionary: distance = levenshtein_distance(word_lower, dict_word.lower()) if distance {w2}" print("\n" + "=" * 70) print("测试 2:拼写检查器") print("=" * 70) spell_cases = [ # 单词正确 ( "apple", ["apple", "banana", "orange"], {"correct": True, "suggestions": []} ), # 拼写错误,唯一最近单词 ( "aple", ["apple", "apply", "banana"], {"correct": False, "suggestions": ["apple"]} ), # 多个编辑距离相同的最小值,需要全部返回并按字母顺序排列 ( "cat", ["bat", "hat", "car", "dog"], {"correct": False, "suggestions": ["bat", "car", "hat"]} ), # 忽略大小写:词典中有 apple,输入 APPLE 应判定正确 ( "APPLE", ["apple", "banana"], {"correct": True, "suggestions": []} ), # 空词典,无建议 ( "zzz", [], {"correct": False, "suggestions": []} ), ] for word, dictionary, expected in spell_cases: result =...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】这是一份高质量的实现,完整满足了题目的所有功能要求。动态规划实现正确,拼写检查逻辑严谨,测试用例设计全面覆盖了各类边界情况。代码注释详尽,结构清晰,可读性强。是一个接近满分的优秀答案。 【GEMINI】这是一份极其优秀的拼写检查器实现。算法实现准确无误,代码质量和可读性堪称典范,测试用例覆盖面广且设计合理,完美地完成了所有任务要求。 【KIMI】该实现是一个完整且功能正确的拼写检查器,动态规划算法标准,代码结构清晰,注释充分,测试用例覆盖全面。主要优点在于逻辑准确、输出格式符合要求、大小写处理正确。改进空间在于增强异常输入的防御性处理,以及在大规模数据下的性能考虑。整体属于优秀的实现方案。
进阶难度评测结果
- 得分:96.8 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
# 拼写检查器 `SpellChecker` 实现 ## 一、核心算法说明 | 模块 | 思路 | |---|---| | **编辑距离** | 设 `dp[i][j]` 为 `word1[:i]` 与 `word2[:j]` 的最小编辑代价,转移方程 `dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1]+cost)`,其中 `cost = 0` 表示字符相同、`1` 表示替换。因当前行只依赖上一行与左侧单元,用**滚动数组**将空间从 `O(m·n)` 降到 `O(min(m, n))`。 | | **候选词剪枝** | 两词编辑距离 ≥ 长度差,故先过滤 `abs(len(a)-len(b)) > max_distance` 的词条,避免无意义的 DP。 | | **早退优化** | 传入 `max_distance` 时,若长度差已超限直接返回 `max_distance + 1`,超过阈值的距离无需精确求解。 | | **排序规则** | 主键:编辑距离升序 → 次键:词频降序 → 第三键:词典 key 字典序(保证结果稳定可复现)。 | --- ## 二、完整代码 ```python #!/usr/bin/env python3 # -*- coding: utf-8 -*- """拼写检查器(SpellChecker)。 基于 Levenshtein Distance(编辑距离)的候选词检索与词频排序工具。 核心算法 -------- 1. 编辑距离: 令 dp[i][j] 表示 word1 前 i 个字符与 word2 前 j 个字符的最小编辑代价: dp[i][0] = i, dp[0][j] = j dp[i][j] = min( dp[i-1][j] + 1, # 删除 dp[i][j-1] + 1, # 插入 dp[i-1][j-1] + (0 if word1[i-1] == word2[j-1] else 1) # 匹配/替换 ) 当前行仅依赖上一行与当前行左侧单元格,故用滚动数组将空间降为 O(min(m, n))。 2. 候选词检索: 编辑距离必然不小于两词长度差,因此先按 |len(a)-len(b)| > max_distance 剪枝, 再做精确 DP 计算。 3. 建议排序: (编辑距离升序, 词频降序, 小写词字典序)。 """ from collections.abc import Mapping as MappingABC from typing import Dict, List, Mapping, Optional, Tuple # 内部候选词记录:(小写 key, 词典原始拼写, 编辑距离, 词频) _Candidate = Tuple[str, str, int, int] # --------------------------------------------------------------------------- # # 参数校验工具 # --------------------------------------------------------------------------- # def _normalize_word(value: object, name: str = "word") -> str: """校验并规范化单词:必须是非空字符串,去除首尾空白。""" if not isinstance(value, str): raise TypeError(f"{name} 必须是 str,当前类型为 {type(value).__name__}") word = value.strip() if not word: raise ValueError(f"{name} 不能为空字符串或纯空白字符串") return word def _validate_max_distance(max_distance: object) -> int: """校验最大编辑距离,必须为非负整数。""" if isinstance(max_distance, bool) or not isinstance(max_distance, int): raise TypeError(f"max_distance 必须是 int,当前类型为 {type(max_distance).__name__}") if max_distance Optional[int]: """校验返回条数,必须为正整数或 None(表示返回全部)。""" if top_n is None: return None if...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】这是一份接近生产级别的高质量实现。代码在功能正确性、工程规范和鲁棒性三个维度均表现优秀。算法实现严谨(滚动数组优化、多级剪枝),设计模式合理(校验函数抽取、内部方法分离),异常处理全面细致。文档和注释质量高,测试用例覆盖广泛且包含断言验证。整体超出了题目的基本要求,体现了资深工程师的代码素养。 【GEMINI】这是一份极高质量、达到工业级标准的 Python 代码实现。作者不仅完美完成了拼写检查器的所有核心功能,还在空间复杂度(滚动数组)、时间复杂度(长度差剪枝、早退优化)上进行了深度优化。异常处理和边界测试覆盖极其全面,展现了深厚的算法功底和优秀的工程素养。 【KIMI】该实现是一份高质量的拼写检查器代码,完整覆盖了所有功能需求,算法实现正确,工程规范良好,异常处理全面。在动态规划空间优化、剪枝策略、大小写处理等细节上都体现了专业水平,可直接用于生产环境。
困难难度评测结果
- 得分:93.9 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
# 拼写检查器系统(SpellChecker) ## 一、完整代码实现 ```python # -*- coding: utf-8 -*- """ spell_checker.py ================ 一个高效的拼写检查器系统,包含四大核心模块: 1. BKTree —— 度量空间近似搜索树(词典索引) 2. KeyboardModel —— QWERTY 键盘几何模型 + 加权编辑距离 3. BigramLanguageModel —— 加一平滑的 Bigram 上下文语言模型 4. SpellChecker —— 上层业务接口(用户词典 / 词频 / 批量检查) 所有核心数据结构均附时间/空间复杂度分析。 """ from __future__ import annotations import math import re from collections import Counter, defaultdict from typing import Callable, Dict, List, Optional, Sequence, Set, Tuple __all__ = [ "KeyboardModel", "BKTree", "BigramLanguageModel", "SpellChecker", "weighted_levenshtein", "tokenize", ] # ============================================================================= # 0. 文本工具 # ============================================================================= _WORD_RE = re.compile(r"[A-Za-z]+(?:'[A-Za-z]+)?") def tokenize(text: str) -> List[str]: """切分为单词 token(保留 dont't 这类内部撇号)。 时间复杂度 O(L),L = 文本长度;空间复杂度 O(T),T = token 数。 """ return _WORD_RE.findall(text) def tokenize_with_positions(text: str) -> List[Tuple[str, int]]: """切分并返回 (token, 在原文中的起始字符偏移)。 时间复杂度 O(L),空间复杂度 O(T)。 """ return [(m.group(0), m.start()) for m in _WORD_RE.finditer(text)] # ============================================================================= # 1. 键盘几何模型 —— 加权编辑距离的权重来源 # ============================================================================= class KeyboardModel: """QWERTY 键盘几何模型,提供"按键物理距离"意义上的字符替换代价。 坐标构建 -------- 以键位为格点:行内 x 每键递增 1,行间 y 递增 1;第 2/3 行整体右移 形成真实键盘的错位(staggered): q w e r t y u i o p y = 0, x 偏移 0.0 a s d f g h j k l y = 1, x 偏移 0.5 z x c v b n m y = 2, x 偏移 1.0 归一化 + 代价变换 ----------------- u(a, b) = euclid(a, b) / MAX_KEY_DIST ∈ [0, 1] cost(a, b) = u(a, b) ** GAMMA (GAMMA = 0.3) 为什么用 u**0.3 而不是线性 u? * 键盘相邻键 u ≈ 0.11;若线性映射,代价仅 0.11,远小于一次 插入/删除(1.0),"手滑按键"几乎不受惩罚,与真实打字错误分布不符。 * 取凹变换 u**0.3 后:水平相邻键 ≈ 0.517(正好贴近题目要求的 0.5), 对角相邻键 ≈ 0.62,跨键盘远端键 q→p = 1.0(等于一次插入/删除)。 * 关键数学性质:GAMMA ≤ 1 时 g(u)=u**GAMMA 在 [0,∞) 上凹且 g(0)=0, 故 g 次可加(g(x+y) ≤ g(x)+g(y))。u...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】这是一份高质量的拼写检查器实现,完整覆盖了所有功能要求,代码工程规范性强。特别亮点包括:对γ=0.3凹变换保持度量性质的数学证明(并用26³三元组断言验证)、BK树剪枝原理的清晰阐述、综合评分权重的工程理由说明,以及「上一个已知词」上下文策略的合理设计。测试用例设计全面,量化展示了BK树的搜索空间缩减效果和上下文重排序的实际效果。整体达到生产级代码标准。 【GEMINI】这是一份极其优秀的拼写检查器系统实现。作者不仅具备扎实的算法功底(如 BK 树、加权编辑距离、Bigram 语言模型的标准实现),更展现出了深厚的数学素养和工程实践经验。通过引入凹幂变换解决了“键盘加权距离”与“BK 树度量空间剪枝”之间的数学冲突,这是绝大多数实现都会忽略的致命细节。代码规范、注释详尽、测试完备,堪称典范。 【KIMI】该实现是一个专业级的拼写检查器系统,展现了深厚的算法功底和工程能力。核心亮点包括:严格证明加权编辑距离的度量性质(BK树正确性的数学基础)、详尽的复杂度分析注释、清晰的分层架构设计(编辑距离定候选集→语言模型定排序)。代码不仅满足功能需求,更在可维护性、可扩展性和性能优化上表现出色,是高质量的工程实现。
相关链接
您可以通过以下链接查看更多相关内容: