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.pswp.cn/news/538771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538771.shtml
英文地址,請注明出處:http://en.pswp.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…