使用模板字符串和词性标注构建填空故事引擎

发布日期:2026-03-25 10:04:03   浏览量 :0
发布日期:2026-03-25 10:04:03  
0

填词游戏(Mad Libs)看起来像是一个微不足道的编程练习:用用户输入的内容替换模板中的占位词。五分钟就能搞定,对吧?但当你试图把它真正做好时,就会发现自然语言充满了各种边界情况,这些情况会把一个玩具项目变成一项真正的文本处理挑战。

基础引擎

最简单的填词游戏实现使用带有占位符的模板字符串:

function 填词游戏(模板, 词语) {
  return 模板.replace(/\{(\w+)\}/g, (匹配项, ) => {
    return 词语[] || 匹配项;
  });
}

const 模板 = "那只{形容词}{名词}{动词}跃过了那道{形容词2}{名词2}。";
const 词语 = {
  形容词: "紫色的",
  名词: "大象",
  动词: "",
  形容词2: "懒洋洋的",
  名词2: "篱笆"
};

填词游戏(模板, 词语);
// "那只紫色的大象跳跃过了那道懒洋洋的篱笆。"

这种方法虽然可行,但存在一些问题。每个占位符都需要唯一的键名,这意味着模板作者必须想出诸如形容词2形容词3这样的名称。它无法确保词性正确,也无法正确处理冠词(“a”或“an”)。

“a”与“an”的问题

英语中,“a”用于辅音音素开头的单词前,而“an”用于元音音素开头的单词前。当用户提供一个随机的形容词或名词时,冠词可能会用错。

"我看见了一只 elephant" → 错误
"我看见了一只 an elephant" → 正确
"我看见了一只 a unique elephant" → 正确(u 发音为“yoo”)
"一小时后我看见了" → 正确(h 不发音)

仅检查单词首字母的简单方法会失败,因为英语的发音并不总与拼写一致。更稳健的判断方式如下:

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部