题目29 英文输入法单词联想

主管期望你来实现英文输入法单词联想功能
需求如下
依据用户输入的单词前缀
从已输入的英文语句中联想出用户想输入的单词
按字典序输出联想到的单词序列
如果联想不到
请输出用户输入的单词前缀
注意
英文单词联想时区分大小写
缩略形式如
"don't" 判定为两个单词 "don"和 "t"
输出的单词序列不能有重复单词
且只能是英文单词,不能有标点符号

输入描述
输入两行
首行输入一段由英文单词word和标点构成的语句str

接下来一行为一个英文单词前缀pre
0 < word.length() <= 20
0 < str.length <= 10000
0 < pre <=20

输出描述
输出符合要求的单词序列或单词前缀
存在多个时,单词之间以单个空格分割

示例一
输入
I love you
He

输出
He

说明
用户已输入单词语句"I love you",
中提炼出"I","love","you"三个单词
接下来用户输入"He" ,
从已经输入信息中无法联想到符合要求的单词
所以输出用户输入的单词前缀

示例二
输入
The furthest distance in the world,Is not between life and death,But when I stand in front or you,Yet you don't know that I love you.
f

输出
front furthest

### 英文输入法单词联想功能测试点 #### 测试数据准备 为了全面覆盖各种可能的情况,需准备好多种类型的测试用例。这些测试用例应包括但不限于正常情况下的输入、边界条件以及异常处理。 #### 正常情况下输入的测试 - **单个字符前缀** 当用户仅输入一个字母作为前缀时,程序应该能够返回所有以该字母开头的单词列表。例如,对于前缀`d`,预期输出可能是`dog, don, door...`等[^1]。 - **多个连续字符前缀** 对于较长的前缀字符串,比如`do`,应当只显示那些确实以前缀`do`开始的单词,像`doctor, document, dogma...`等等。 - **大小写字母敏感度** 考虑到需求指出要区分大小写,因此当给出大写的首字母或其他位置的大写字母时,如`Do`, 应该只会找到完全匹配此模式的项,即`Don't`中的`Don`会被视为不同的条目。 #### 边界条件与特殊场景测试 - **不存在符合条件的结果** 如果没有任何单词能从前缀推断出来,则应回显原始的前缀本身给用户查看。例如,假设语料库内无任何单词是以`xyz`起始的话,那么最终呈现的就是`xyz`。 - **标点符号过滤机制** 用户可能会不小心连同一些非字母符号一起键入,这时系统得有能力识别并忽略掉它们,从而不影响后续逻辑判断过程。譬如说,即使有人打下了`don't.`,也只需提取出有效部分来进行比较运算。 - **去重能力验证** 若存在重复词条(由于某些原因),则确保不会多次打印相同的内容。也就是说,即便原文档里出现了两次甚至更多次相同的表达方式,最后得到的答案依旧保持唯一性。 ```python def test_word_prediction(): sentence = "I love programming and I also enjoy coding." prefix_list = ["pro", "enj", "xyz"] expected_outputs = [ ['programming'], ['enjoy'], ['xyz'] ] actual_output = [] for pre in prefix_list: result = predict_words(sentence, pre) actual_output.append(result) assert all([set(a) == set(e) for a,e in zip(actual_output, expected_outputs)]) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羊族的希望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值