目录

前言

要实现的规则如下:根据接龙的成语的第一个字与前一个成语结尾的字的比较,分一下三种模式模式1:字相同拼音也要相同

模式2:字相同拼音不要求相同

模式3:字不要相同拼音要求相同,即谐音就可以接龙的成语必须是四字成语已使用过的成语双方均不得再次使用一方不按照规则接龙或接不下去时判定失败

数据获取和清洗

本文语料来自于Bookdown图书下载网,抓下来之后,经过乱码处理、脏数据去除、分章数据合并、结构化提取等操作,得到了一份结构化好的json类型数据。我已经把它放在了github上,下载地址为github。

本成语库总共包含成3万个成语,其中四字成语大概2.9万个。每条数据包含以下字段:字段说明字段说明idiom成语本身pinyin拼音

source成语出处explanation成语释义

sample示例

代码实现

代码也已经放到了GitHub上,这里就不再贴出。源码地址为https://github.com/lukeplus/Idiom。下面主要讲讲如何使用。

示例1:from solitaire import IdiomSolitairegame = IdiomSolitaire()game.forward("一心一意")# 输出:(True, '意气飞扬')game.forward("扬眉吐气")# 输出:(True, '气壮山河')game.forward("呵呵呵呵")# 输出:(False, None)

示例2:xxxxxxxxxx

game = IdiomSolitaire()game.get_next_idiom("人山人海")# 输出:海市蜃楼game.get_next_idiom("人山人海")# 输出:海阔天空game.get_next_idiom("战战兢兢")# 输出:兢兢乾乾

示例3:xxxxxxxxxx

from solitaire import IdiomSolitairegame = IdiomSolitaire()# bot_first系统先开始idiom = game.bot_first()   # 输出:一心一意game.forward("意气飞扬")# 输出:(True, '扬长避短')

IdiomSolitaire类

IdiomSolitaire类负责成语接龙流程,以及游戏状态维护。支持三种模式,如下:xxxxxxxxxx

game= IdiomSolitaire(mode="pw")# pw表示字和拼音都要保持一致game= IdiomSolitaire(mode="p")# p表示拼音一致即可game= IdiomSolitaire(mode="w")# w表示字一样即可xxxxxxxxxx

game = IdiomSolitaire(mode="p")game.get_next_idiom("不三不四")# 输出:肆意横行

forward方法

推进游戏运行的主要方法,当第一次调用时,允许输入参数为空,表示由系统起头开始游戏。第一次调用不为空时,表示由客户端开始游戏。forward既要检验输入成语对上一个成语的承接(这是与get_next_idiom的主要区别),也要计算下一个成语。

返回二元组,第一个元素代表输入的成语是否准确,是否能承接上一个成语,第二个元素是下一个待接龙的成语。当返回(False, None),表示输入的成语不能连接上一个成语。用户输掉比赛。

当返回(True, None) , 表示机器找不到一个成语能接上用户输入的成语。机器输掉比赛。

get_next_idiom

不考虑上下文,单纯返回能承接输入词的词语。

总结与改进

总的来说,简单需求的成语接龙的实现几乎没什么难点,没有牵涉到复杂的算法。而实现它的目的,是觉得可以拿这份成语语料做其他NLP相关的更酷的事情。比如说,给定一段话,通过语义分析之后,得到与这段话意思最相近的一个成语。

当然,要把成语接龙做得更人性化,还是得花很多心思的,也没有那么简单,需要改进的地方很多。比如系统选词不应该是简单的随机选,而是应该考虑成语的难易程度、普及程度,毕竟如果老是随机选一些冷门词,那游戏就不好玩了。

python成语接龙代码_实现成语接龙(Python)相关推荐

  1. python执行一段代码_我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』...

    最近的"平安经"可谓是引起了不小的风波啊. 作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG. 为此明哥就研究了一下,如何在你执行任意 Python 代码 ...

  2. python迷宫小游戏代码_课内资源 - 基于python实现的迷宫游戏

    一.项目概述与编译环境 本次大作业选题为题目2,即小兔子找胡萝卜的迷宫问题,最终完成开发的游戏名为Caveman and Treasure(穴居人寻宝),游戏整体界面如下: 该项目在windows下编 ...

  3. python调用第三方软件发信代码_【IT专家】python调用第三方邮件接口

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 python 调用第三方邮件接口 2017/08/10 1 单线程发送 #!/usr/bin/env python# -*- coding: UT ...

  4. python执行txt中代码_【技术分享】文件解压之过 Python中的代码执行

    预估稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 一.前言 Python中负责解压压缩文件的代码实现上并不安全,存在目录遍历漏洞,攻击者可以利用该漏洞覆盖_ ...

  5. python 归一化feed-dict程序代码_深度学习-中国大学mooc-题库零氪

    第一讲 人工智能导论 2.29日考勤 1.以下关于深度学习和机器学习的关系,描述正确的是: A.机器学习的范畴包含深度学习: B.深度学习的范畴包含机器学习: C.二者没有关系: D.二者等同. 第三 ...

  6. 石头剪刀布python代码_我的第一个python程序,石头剪刀布猜拳游戏

    从决定学习python到今天,已经过去了好1个月,买的几本书还没一本看完的,惭愧. 忙不是借口,是时候来点计划,来点坚持.写点什么吧,算是学习的记录,也是对自己的鞭策. 今天写一个猜字游戏,模仿正在读 ...

  7. python30行代码_仅利用30行Python代码来展示X算法

    假如你对数独解法感兴趣,你可能听说过精确覆盖问题.给定全集 X 和 X 的子集的集合 Y ,存在一个 Y 的子集 Y*,使得 Y* 构成 X 的一种分割. 这儿有个Python写的例子. X = {1 ...

  8. 20个python代码_有用的20个python代码段(4)

    有用的20个python代码段(4): 1.使用列举获取索引和值对 以下脚本使用列举来迭代列表中的值及其索引.my_list = ['a', 'b', 'c', 'd', 'e'] for index ...

  9. python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)

    因为是示例为主,我们将方程组限制在二元一次方程组:x,y两个变量,两个方程.类似这样: 每个方程有两个变量,x和y,形式为:ax+by+c=d 由于这次有了两个方程,我们提取参数的代码就适合提炼为一个 ...

最新文章

  1. 机器人抓取领域性能评估标准
  2. 隐藏头视图即隐藏UINavigationBar
  3. c语言中%hu,%hx是什么意思
  4. 如何复制粘贴_年终工作总结如何写?复制粘贴肯定不行啦
  5. Android自定义属性、控件三步法
  6. 影响 PCR 体系蒸发的三大因素
  7. Python中可变数据类型和不可变数据类型
  8. gh0st源码分析:屏幕监控
  9. Python安装最新版最详细教程(3.10.2)
  10. 能让你少写1000行代码的20个正则表达式
  11. 计算机是如何进行时间同步的
  12. python本地识别二维码_十行代码实现文字识别,你敢信?
  13. linux设置开机启动 服务不支持chkconfig解决方法脚本
  14. 正则表达式的贪婪与非贪婪模式
  15. 被投毒的管道:研究员探索CI环境中的攻击方法
  16. MxCAD云图DWG转PDF
  17. Linux发包工具pktgen
  18. 24个足以改变事业的商业妙想
  19. SML-Abridgelab
  20. 视频压缩原理之 预测编码

热门文章

  1. 程序员工作中用一机多屏或者大显示器的好处
  2. SQL——PostgreSQL Driver
  3. 使用Qt合并图片的算法
  4. U深度U盘启动盘制作工具怎么用?U深度U盘启动盘制作工具使用教学
  5. Postfix邮箱(八):安装反垃圾邮件系统Spam Locker
  6. python win32api键盘_pythonwin32api键盘输入教程
  7. 中国大学慕课第7周测验
  8. 使用MicrobiomeAnalyst统计和功能分析微生物组数据
  9. OSI网络模型,IO模型,BIO模型,NIO模型,AIO模型,TCP/IP协议
  10. 计算机专业转正定级,大学生毕业一年以后千万别忘了转正定级(转自小志)