doubao-seed-2-0-pro 在「实现拼写检查器」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:doubao-seed-2-0-pro
- 用例名称:实现拼写检查器
- 测试类型:文本生成
- 评测维度:代码生成
系统提示词(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` 列表中,并按字母顺序排列。 - 检查时忽略大小写(统一转为小写处理)。 **输入输出示例:**
评测结果
综合得分
该模型在此用例的得分为:75.16 分(满分 100 分),已通过
基础难度评测结果
- 得分:75.16 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
### 实现思路 我们基于**莱文斯坦距离(Levenshtein Distance)** 实现拼写检查器,核心逻辑分为两步: 1. 优先判断待检查单词是否已存在于词典中,存在则直接判定拼写正确; 2. 若不存在,计算待检查单词与词典中所有单词的编辑距离,返回距离最小的单词作为拼写建议,同时支持忽略大小写、最大距离阈值等扩展配置。 --- ### 代码实现 ```python def levenshtein_distance(s1: str, s2: str) -> int: """ 动态规划计算两个字符串的莱文斯坦距离: 允许的操作:插入/删除/替换单个字符,每次操作计数为1 """ m, n = len(s1), len(s2) # dp[i][j] 表示s1前i个字符转成s2前j个字符的最小编辑距离 dp = [[0] * (n + 1) for _ in range(m + 1)] # 边界初始化:空字符串和长度为k的字符串距离为k for i in range(m + 1): dp[i][0] = i for j in range(n + 1): dp[0][j] = j # 填充DP表 for i in range(1, m + 1): for j in range(1, n + 1): if s1[i-1] == s2[j-1]: # 字符相同无需操作 dp[i][j] = dp[i-1][j-1] else: # 取删除/插入/替换三种操作的最小值+1 dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1 return dp[m][n] def spell_check(word: str, dictionary: list, ignore_case: bool = True, max_distance: int = None) -> dict: """ 拼写检查主函数 :param word: 待检查的单词 :param dictionary: 正确单词构成的词典列表 :param ignore_case: 是否忽略大小写,默认True :param max_distance: 最大允许编辑距离,超过则不返回建议,默认None无限制 :return: 检查结果,包含是否正确、建议单词、最小编辑距离等信息 """ if not dictionary: return {"correct": False, "suggestion": None, "info": "词典为空"} # 预处理待检查单词 target = word.lower() if ignore_case else word # 第一步:检查单词是否已经在词典中 for correct_word in dictionary: cmp_word = correct_word.lower() if ignore_case else correct_word if cmp_word == target: return {"correct": True, "suggestion": correct_word, "distance": 0} # 第二步:遍历词典找最相似的单词 min_distance = float('inf') best_suggestion = None for correct_word in dictionary: cmp_correct = correct_word.lower() if ignore_case else correct_word # 剪枝优化:长度差超过当前最小距离直接跳过,无需计算 if abs(len(target) - len(cmp_correct)) >= min_distance: continue # 计算编辑距离 dist = levenshtein_distance(target, cmp_correct) if dist max_distance: return {"correct": False, "suggestion": None, "distance": min_distance, "info": f"无符合条件的建议,最小距离为{min_distance}"} return {"correct": False, "suggestion": best_suggestion, "distance": min_distance} ``` --- ### 测试用例 ```python if __name__ == "__main__": dictionary = ["apple", "banana", "cherry",...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】该实现的 levenshtein_distance 核心算法正确,代码注释清晰,有一定的工程扩展意识(剪枝、阈值参数等)。但最关键的问题是 spell_check 函数未能满足题目的核心功能要求:返回结构使用了 suggestion(单数)而非 suggestions(列表),且完全缺失多候选词收集和按字母排序的功能,这是对题目需求的根本性误解。如果按题目要求实现,应收集所有最小距离的单词并排序 【KIMI】该实现展示了扎实的动态规划算法功底,Levenshtein距离计算正确且包含优化。但spell_check函数存在关键功能缺陷:未按题目要求返回所有最小编辑距离的候选词并按字母序排列,而是仅返回单个最佳建议,且返回值格式与规范不符。这属于对需求理解不透彻导致的实现偏差。代码质量和健壮性方面表现良好,注释详尽、结构清晰,但边界测试覆盖不够全面。建议在需求分析和功能验证环节加强,确保实现与规格完全一 【GEMINI】这是一份高质量的实现。模型不仅完美对齐了提示词中的算法要求,还在工程实践上表现出色,包括高效的剪枝逻辑、完善的错误处理机制以及清晰的代码注释。提供的测试用例非常全面,展示了极强的逻辑严密性。
进阶难度评测结果
- 得分:67.69 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
### 拼写检查器实现方案 以下是满足所有需求的完整拼写检查器设计,包含类结构、核心方法实现和示例用法: --- #### 完整代码实现 ```python from collections import defaultdict from typing import List, Dict class SpellChecker: def __init__(self, word_freq_dict: Dict[str, int]): """ 初始化拼写检查器 :param word_freq_dict: 词典字典,key为正确原词,value为对应词频(正整数) """ if not word_freq_dict: raise ValueError("输入词典不能为空") for freq in word_freq_dict.values(): if not isinstance(freq, int) or freq int: """ 计算两个字符串的莱文斯坦编辑距离(支持插入/删除/替换三种操作) :param s1: 字符串1 :param s2: 字符串2 :return: 编辑距离值 """ m, n = len(s1), len(s2) # 初始化DP表,dp[i][j]表示s1前i个字符转成s2前j个字符的最小操作次数 dp = [[0] * (n + 1) for _ in range(m + 1)] # 边界初始化 for i in range(m + 1): dp[i][0] = i # s1前i个字符全删除得到空串 for j in range(n + 1): dp[0][j] = j # 空串插入j个字符得到s2前j个字符 # 填充DP表 for i in range(1, m + 1): for j in range(1, n + 1): if s1[i-1] == s2[j-1]: dp[i][j] = dp[i-1][j-1] else: # 三种操作取最小值:删除s1字符/插入s2字符/替换字符 dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1 return dp[m][n] def get_candidates(self, target_word: str, max_edit_distance: int = 2) -> List[str]: """ 获取错误单词的候选词列表,按编辑距离最小优先、词频降序 secondary 字典序升序排序 :param target_word: 待检查的目标单词 :param max_edit_distance: 最大允许编辑距离,超过该值的词不会作为候选 :return: 排序后的候选词列表 """ target_lower = target_word.lower() target_len = len(target_lower) # 1. 首先检查目标单词是否已经在词典中,直接返回匹配的原词 if target_lower in self.lower_to_originals: originals = self.lower_to_originals[target_lower] # 按词频降序,词频相同按原词字典序升序排序 return sorted(originals, key=lambda x: (-self.word_freq[x], x)) min_dist = float('inf') candidates = [] # 2. 遍历所有词典词计算编辑距离,筛选最小距离候选 for lower_word, originals in self.lower_to_originals.items(): word_len = len(lower_word) # 剪枝优化:长度差大于当前最小距离的词直接跳过,编辑距离至少为长度差 if abs(word_len - target_len) > min_dist: continue # 计算编辑距离(全小写比较,实现大小写不敏感) dist = self.levenshtein_distance(target_lower, lower_word) if dist max_edit_distance: return [] return sorted(candidates, key=lambda x: (-self.word_freq[x], x)) ``` --- #### 核心功能验证 ```python if __name__ == "__main__": # 示例词典:原词 -> 词频 word_freq = { "Apple": 200,...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】该实现展示了良好的代码风格和正确的编辑距离算法,但存在严重的功能缺失问题:核心方法 `suggest` 完全未实现,`get_candidates` 的筛选逻辑与需求不符(只返回最小距离词而非所有距离≤max_distance的词)。这些问题导致功能完整性严重不足,无法满足题目的基本要求。建议补全 `suggest` 方法并修正 `get_candidates` 的筛选逻辑。 【KIMI】该实现存在严重的功能缺失和逻辑错误。最核心的 `suggest` 方法完全未实现,`get_candidates` 方法的逻辑与题目要求严重不符(只返回最小编辑距离的词而非所有不超过 max_distance 的词,且排序逻辑错误)。虽然代码风格和基础异常处理有一定水准,但关键功能未满足需求,无法作为可用的拼写检查器。建议:1) 补全 `suggest` 方法实现;2) 修正 `get_cand 【GEMINI】这是一个非常优秀的实现。不仅完全满足了提示词的所有功能要求,还在代码健壮性(输入校验)、性能优化(长度差剪枝)和可扩展性(类型注解和优化建议)方面表现出色。代码逻辑清晰,测试用例覆盖了边界情况和核心需求,体现了高级开发者的水平。
困难难度评测结果
- 得分:89.5 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
--- ## 一、完整代码实现 ```python import re import math from typing import List, Dict, Tuple from collections import defaultdict # QWERTY键盘坐标定义 (x: 横向位置, y: 纵向行号) KEYBOARD_COORDS = { 'q': (0, 0), 'w': (1, 0), 'e': (2, 0), 'r': (3, 0), 't': (4, 0), 'y': (5, 0), 'u': (6, 0), 'i': (7, 0), 'o': (8, 0), 'p': (9, 0), 'a': (0, 1), 's': (1, 1), 'd': (2, 1), 'f': (3, 1), 'g': (4, 1), 'h': (5, 1), 'j': (6, 1), 'k': (7, 1), 'l': (8, 1), 'z': (0, 2), 'x': (1, 2), 'c': (2, 2), 'v': (3, 2), 'b': (4, 2), 'n': (5, 2), 'm': (6, 2) } MAX_KEY_DIST = 9.0 # 键盘最远键位距离(q到p的欧氏距离) def weighted_levenshtein(s: str, t: str) -> float: """ 键盘布局感知的加权编辑距离 插入/删除代价=1,替换代价基于键位距离映射到[0.5, 1.0]区间 时间复杂度: O(L1*L2) L1/L2为两个单词长度 空间复杂度: O(L1*L2) """ m, n = len(s), len(t) dp = [[0.0] * (n + 1) for _ in range(m + 1)] # 初始化边界 for i in range(m + 1): dp[i][0] = i * 1.0 for j in range(n + 1): dp[0][j] = j * 1.0 # 动态规划填充 for i in range(1, m + 1): for j in range(1, n + 1): if s[i-1] == t[j-1]: replace_cost = 0.0 else: c1, c2 = s[i-1].lower(), t[j-1].lower() if c1 not in KEYBOARD_COORDS or c2 not in KEYBOARD_COORDS: replace_cost = 1.0 else: x1, y1 = KEYBOARD_COORDS[c1] x2, y2 = KEYBOARD_COORDS[c2] dist = math.hypot(x1 - x2, y1 - y2) replace_cost = 0.5 + (dist - 1) * 0.5 / (MAX_KEY_DIST - 1) dp[i][j] = min( dp[i-1][j] + 1.0, # 删除 dp[i][j-1] + 1.0, # 插入 dp[i-1][j-1] + replace_cost # 替换 ) return dp[m][n] class BKNode: """BK树节点定义""" __slots__ = ['word', 'children'] # 优化内存占用 def __init__(self, word: str): self.word = word self.children: Dict[float, BKNode] = {} # key: 编辑距离, value: 子节点 class BKTree: """ Burkhard-Keller 树实现,用于快速近似字符串匹配 插入平均复杂度: O(log N) N为词典规模 查询平均复杂度: O(k log N) k为返回候选数,远优于暴力O(N) """ def __init__(self, distance_func): self.root = None self.distance_func = distance_func self.size = 0 def insert(self, word: str) -> None: """插入单词到BK树""" if not self.root: self.root = BKNode(word) self.size += 1 return current = self.root while True: d = self.distance_func(current.word, word) if d == 0: # 单词已存在 return if d not in...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【GEMINI】这是一份极高水平的实现。候选人不仅精通算法原理(如 BK 树的三角不等式剪枝),还能将其转化为高质量的工程代码。在加权编辑距离的实现上,通过坐标映射和归一化公式精准满足了题目对键位距离代价的要求。综合评分系统考虑了距离、上下文概率和词频三个维度,并进行了归一化处理,体现了深厚的自然语言处理背景。 【KIMI】整体上,代码实现了一个高效、准确的拼写检查器系统,满足题目的所有要求。代码结构清晰,模块化设计合理,注释详细。在算法效率和代码质量方面表现良好。但是,还有进一步提升的空间,如优化变量命名、增加异常处理等。
相关链接
您可以通过以下链接查看更多相关内容: