Elephant 在「实现拼写检查器」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:Elephant
- 用例名称:实现拼写检查器
- 测试类型:文本生成
- 评测维度:代码生成
系统提示词(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` 列表中,并按字母顺序排列。 - 检查时忽略大小写(统一转为小写处理)。 **输入输出示例:**
评测结果
综合得分
该模型在此用例的得分为:85.0 分(满分 100 分),已通过
基础难度评测结果
- 得分:85.0 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
```python def levenshtein_distance(word1, word2): """ 使用动态规划计算两个单词之间的编辑距离(Levenshtein Distance)。 参数: word1 (str): 第一个单词 word2 (str): 第二个单词 返回: int: 两个单词之间的最小编辑距离 """ m, n = len(word1), len(word2) # 创建 (m+1) x (n+1) 的 DP 表 # 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 # 填充 DP 表 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: # 字符不同,考虑三种操作并取最小值 + 1 # 1. 插入:dp[i][j-1] + 1 # 2. 删除:dp[i-1][j] + 1 # 3. 替换:dp[i-1][j-1] + 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, dictionary): """ 拼写检查函数:判断单词是否在词典中,若不在则给出最相似的建议。 参数: word (str): 待检查的单词 dictionary (list): 词典列表,包含正确单词 返回: dict: 包含 'correct' 和 'suggestions' 的字典 """ # 统一转为小写处理,忽略大小写 word_lower = word.lower() dict_lower = [w.lower() for w in dictionary] # 若单词在词典中,直接返回正确 if word_lower in dict_lower: return {"correct": True, "suggestions": []} # 计算 word 与词典中每个单词的编辑距离 distances = [] for dict_word in dict_lower: dist = levenshtein_distance(word_lower, dict_word) distances.append((dist, dict_word)) # 找出最小编辑距离 min_distance = min(dist for dist, _ in distances) # 获取所有编辑距离等于最小距离的单词 suggestions = [w for dist, w in distances if dist == min_distance] # 按字母顺序排序 suggestions.sort() return {"correct": False, "suggestions": suggestions} # 测试用例 if __name__ == "__main__": # 测试用例 1: 单词在词典中 dict1 = ["apple", "banana", "cherry", "date"] result1 = spell_check("apple", dict1) print("Test 1: word='apple' in dictionary") print(f" Result: {result1}") # 期望: correct=True, suggestions=[] # 测试用例 2: 单词不在词典中,有唯一最小编辑距离 dict2 = ["cat", "dog", "bat", "cot"] result2 = spell_check("car", dict2) print("\nTest 2: word='car' not in dictionary, 'cat' is closest") print(f" Result: {result2}") # 期望: correct=False,...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【KIMI】代码整体实现良好,功能正确,代码质量高,测试用例覆盖全面。但在编辑距离计算上有一处错误,需要修正。代码的健壮性较好,但还可以进一步改进。
进阶难度评测结果
- 得分:81.7 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
下面是一个完整的 `SpellChecker` 类实现,满足所有功能需求,包括: - 使用动态规划计算 **Levenshtein 编辑距离** - 支持 **大小写不敏感** 匹配 - 提供 **候选词查找** 和 **带词频排序的建议** - 包含 **异常处理** - 提供 **3 个测试用例** --- ### ✅ SpellChecker 实现 ```python class SpellChecker: def __init__(self, word_freq_dict): """ 初始化拼写检查器。 :param word_freq_dict: 词典,格式为 {单词: 词频},词频为整数 """ if not isinstance(word_freq_dict, dict): raise TypeError("词典必须是一个字典类型") if not word_freq_dict: raise ValueError("词典不能为空") # 内部使用小写形式进行查找,保留原始大小写用于返回 self._word_to_original = {} # 小写 -> 原始单词(取第一个出现的) self._word_freq = {} # 小写 -> 词频 for word, freq in word_freq_dict.items(): if not isinstance(word, str) or not word.strip(): continue # 跳过无效单词 if not isinstance(freq, int) or freq 注:`'Pineapple'` 可能出现在候选中,因其与 `'apl'` 编辑距离可能 ≤2(取决于具体字符),但通常不会太近,实际取决于词典内容。 --- 此实现具有良好的模块化、可读性和健壮性,适用于基础拼写建议系统。
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【KIMI】整体而言,这是一个高质量的拼写检查器实现,满足了所有功能需求,代码质量良好,并且考虑了边界情况。但仍有一些细节可以改进,以增强代码的健壮性和可维护性。
困难难度评测结果
- 得分:90.0 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
# 拼写检查器系统实现 下面是一个完整的拼写检查器系统实现,包含 BK 树、加权编辑距离、Bigram 语言模型等核心功能。 ```python import math from collections import defaultdict from typing import List, Dict, Tuple, Optional class BKTreeNode: """BK 树节点类""" def __init__(self, word: str): self.word = word self.children = {} # key: 距离, value: BKTreeNode class BKTree: """ BK 树(Burkhard-Keller Tree)实现 BK 树是一种用于快速近似字符串匹配的树数据结构,特别适合在给定编辑距离阈值内 查找相似字符串。相比暴力遍历(O(N)),BK 树通过利用三角不等式性质,将搜索空间 从 O(N) 缩减到接近 O(log N)。其原理是: 1. 根节点作为参考词 2. 子节点按与父节点的编辑距离组织 3. 查询时只需访问距离在 [d-ε, d+ε] 范围内的分支 时间复杂度: - 插入:O(log N) 平均情况 - 查询:O(log N) 平均情况(优于暴力 O(N)) 空间复杂度: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 word in self: return if self.root is None: self.root = BKTreeNode(word) else: self._insert_node(self.root, word) self.size += 1 def _insert_node(self, node: BKTreeNode, word: str) -> None: """递归插入节点""" dist = self.distance_func(node.word, word) if dist == 0: return # 相同词不重复插入 if dist not in node.children: node.children[dist] = BKTreeNode(word) else: self._insert_node(node.children[dist], word) def query(self, word: str, max_distance: int) -> List[str]: """查询与给定词距离在 max_distance 内的所有词""" results = [] if self.root is not None: self._query_node(self.root, word, max_distance, results) return results def _query_node(self, node: BKTreeNode, word: str, max_distance: int, results: List[str]) -> None: """递归查询节点""" dist = self.distance_func(node.word, word) if dist bool: """检查词是否在树中(精确匹配)""" if self.root is None: return False node = self.root while node is not None: dist = self.distance_func(node.word, word) if dist == 0: return True if dist not in node.children: return False node = node.children[dist] return False class KeyboardLayout: """QWERTY 键盘布局坐标""" # 键位坐标(行, 列) KEYBOARD_COORDS = { 'q': (0, 0), 'w': (0, 1), 'e': (0, 2), 'r': (0, 3), 't': (0, 4), 'y': (0, 5), 'u': (0, 6), 'i': (0, 7), 'o': (0, 8), 'p': (0, 9), 'a': (1, 0), 's': (1,...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【KIMI】整体来看,这段代码是一个非常优秀的拼写检查器系统实现。它涵盖了所有核心功能,代码质量高,效率表现良好。BK 树和加权编辑距离的实现是亮点,显著提高了拼写检查的效率和准确性。Bigram 语言模型进一步提升了纠错的上下文相关性。代码结构清晰,模块化设计良好,易于维护和扩展。是一个非常完整的实现。
相关链接
您可以通过以下链接查看更多相关内容: