python成语接龙代码_实现成语接龙(Python)

目录

前言

要实现的规则如下:根据接龙的成语的第一个字与前一个成语结尾的字的比较,分一下三种模式模式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相关的更酷的事情。比如说,给定一段话,通过语义分析之后,得到与这段话意思最相近的一个成语。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencv android jni,OpenCV - AndroidStudio的JNI工程及引用OpenCV

一把利刃,用不好,会伤到你遍体鳞伤。用得好,便为你披荆斩棘,所向披靡。好与不好之间,便是历练。几经波折,终于跌跌撞撞,集成了OpenCV,并实现了灰度图片,自此一扇新的大门已经打开。至此我手中已…

python语句int_python中的int函数

int函数用来把其他类型向下转换为整数类型 int(3.6) --- 3 int(3.2) --- 3 int(1/3) --- 0 int("1") --- 1 int()可以按照指定的进制的整数转换为十进制的整数,如果不指定默认是十进制转换为十进制,第二个参数给0和不给一样,除非你…

13.JAVA基础:八进制,十六进制表示

原文路径:http://simon-c.iteye.com/blog/802149 点击查看原文 ----------------------------------------------------------- 可以使用八进制、十六进制的类型:long, int, short, byte 八进制表示:以0作为前缀,数码有0,1,…

excel图表交互联动_深入讲解EasyShu图表与引用数据动态联动功能

EasyShu一开始的架构是将制作好的图表最终返回给用户,不依赖用户工作表的单元格区域引用,可满足图表绘制后的脱离数据源分享传播,无奈用户最强烈的反馈是要求图表与数据保持联动,这一需求实在对EasyShu是一个巨大的挑战。为了将Ea…

使用pipenv代替virtualenv管理python包

前言 第一次接触到 pipenv 是因为看到董明伟大神的《使用pipenv管理你的项目》,之前可能和大家的选择类似使用 virtualenv 或者 pyenv 来管理 python 的包环境。virtualenv 是针对python的包的多版本管理,通过将python包安装到一个模块来作为python的包虚…

android代码生成excel,AndroidExcel

Android_Excel在android中生成excel##效果图##初始化数据首先我们要先造下测试数据,这里我把数据写死在一个常量类Const中,如下:public class Const {public interface OrderInfo{public static final String[][] orderOne new String[][] {…

14.JAVA整型变量

表示形式 Java语言整型常数的3种表示形式: 1、十进制整数:99,-100,0 2、八进制整数:要以0开头,如015 3、十六进制整数:以0x开头,如0x15 点击查看十进制八进制十六进制概念 public static v…

exists sql用法_干货!SQL性能优化,书写高质量SQL语句

写SQL语句的时候我们往往关注的是SQL的执行结果,但是是否真的关注了SQL的执行效率,是否注意了SQL的写法规范?以下的干货分享是在实际开发过程中总结的,希望对大家有所帮助!1. limit分页优化当偏移量特别大时&#xff0…

python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!原文链接地址:「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)Appium是一个开源测试自动化框架,可用于原生,混…

一些adb的常用命令

显示正在运行的服务 adb shell dumpsys activity services [packageName] 打开一个Activity adb shell am start -n {包(package)名}/Activity绝对路径(ex:com.xxx.xxx.xxxActivity) 以调试模式启动一个Activity adb shell am start -D -n {包…

android 调用restful,android调用springmvc写的restful

下载srpingmvc的相关jarhttp://www.cnblogs.com/liuhongfeng/p/4919963.html配置spingmvc和相关接口http://blog.csdn.net/jianyuerensheng/article/details/51258942如果报错,检查JDK版本是否和本地的一致在UserController.jave中添加接口package com.zjn.controll…

eureka server配置_springcloud项目搭建第三节:eureka集群

在上一节搭建的项目基础上,在创建一个eureka-server-two的子项目和eureka-server项目一样,然后修改各自项目的application.yml文件eureka-server项目的application.yml文件修改2点1.修改eureka的注册地址改成另一个eureka-server-two项目的注册中心地址2…

15.浮点类型

数值范围 float类型又被称为单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。 double类型又被称为双精度类型,尾数可以精确到14位有效数字。 浮点类型默认是double。 public static void main(…

c4d流体插件_(图文+视频)C4D野教程:TFD、XP和RF三大流体插件协作案例

在逛INS的时候,看见国外一位叫做BastardFilms的大神制作了很多流体的效果:尤其是他制作的很多液态烟雾的流体,我特别喜欢,由于我不知道怎么下载INS的视频,所以这里只有发个截图大家看看:作者这里有说明是用…

form表单用js提前执行函数若不成功则不提交_面试必会的重复提交 8 种解决方案!...

重复提交看似是一个小儿科的问题,但却存在好几种变种用法。在面试中回答的好,说不定会有意想不到的收获!现把这 8 种解决方案分享给大家!1.什么是幂等在我们编程中常见幂等select查询天然幂等delete删除也是幂等,删除同一个多次效…

16.char类型

char,占2个字节。 单引号用来表示字符常量。例如a. char类型用来表示在Unicode编码表中的字符。 unicode编码被设计用来处理各种语言的所有文字,它占了2个字节,可允许有65536个字符。 Java语言中还允许使用转义字符‘\,来将其后的…

转向Kotlin——数据类和封闭类

数据类和封闭类是Kotlin中的两种特殊的类,今天一起了解一下。更多精彩内容也可以关注我的微信公众号——Android机动车 数据类 数据类是Kotlin的一个语法糖。Kotlin编译器会自动为数据类生成一些成员函数,以提高开发效率。 数据类的使用 无论是Java服务器…

idea前端可视化_jsp可视化开发工具_netbeans jsp可视化_idea 可视化开发 jsp

数字生态钜惠来袭!秒杀 2核4G 5M带宽 1200元/3年,1核1G首购 99元/年把默认改成 myeclipse jsp editor()原默认的jsp编辑器是 myeclipse visual jspdesigner,顾名思义,此编译器是jsp可视化编辑器,对于初学者有很多的帮助…

开博尔智能android播放器,高端安卓播放器的选择——开博尔Q10Plus 二代 4K高清播放器...

随着OPPO和三星相继宣布退出4K蓝光播放器市场,先锋的新机迟迟无法大量铺货,现在市面上可选择的4K播放器就比较少了,价格也很高了,于是很多人开始将注意力转向了安卓机,其中开博尔是比较有代表性的厂家了,这…

17.类型转换

自动类型转换 容量小的数据类型可以自动转换为容量大的数据类型 byte b 123;//byte b2 300;//报错,超过了byte最大值127//char c -3;//报错,char范围是0~65536,不在范围char c2 a;//a在ascii码里是98int i c2;long d01 123213;float f…