基于Python实现西西成语接龙小助手


Posted in Golang onAugust 05, 2022

介绍

代码地址:https://github.com/taishan1994/chinese_chengyujielong

读完该文,你可以收获:

  • python爬虫的简单使用。
  • 构建前缀树以进行搜索提示。
  • 构建一个简单的成语接龙小程序。

爬虫模块

首先展示下我们最终获得的成语的数据:

,成语,拼音,成语解释,典故出处,近义词,反义词,常用程度,感情色彩,语法用法,成语结构,产生年代,英文翻译,成语谜面
0,阿匼取容,ē ǎn qǔ róng,阿匼:一味迎合的样子。一味巴结别人以求得他们的喜欢,《新唐书 杨再思传》:“居宰相十余年,阿匼取容,无所荐达。”,阿谀取容,刚正不阿,生僻,贬义词,作谓语、定语;用于人,联合式,古代,,
1,阿姑阿翁,ā gū ā wēng,阿:名词的前缀。姑:丈夫的母亲。翁:丈夫的父亲。指公公婆婆。,见:“阿家阿翁”。,阿家阿翁,,一般,褒义词,作主语、宾语;指公公婆婆,联合式,近代,father-in-law and mother-in-law,
2,阿娇金屋,ā jiāo jīn wū,阿娇:指汉武帝刘彻的姑母(长公主刘娇)的女儿。原指汉武帝刘彻要用金屋接纳阿娇为妇。这里泛指美丽高贵的女子。,语出旧题汉·班固《汉武故事》:汉武帝幼时曾对姑母长公主说:“若得阿娇(姑母之女)作妇,当以金屋贮之。”,金屋藏娇,,一般,褒义词,作宾语、定语;多用于女性,偏正式,古代,,
3,阿家阿翁,ā jiā ā wēng,阿:名词的前缀。家:通“姑”,丈夫的母亲。翁:丈夫的父亲。指公公婆婆。,唐·赵璘《因话录》卷一:“郭暖尝与升平公主琴瑟不调。尚父拘暖,自诣朝童结罪。上召而慰之曰:‘谚云:不痴不聋,不作阿家阿翁。'”,阿公阿婆,,一般,褒义词,作主语、宾语;指公公婆婆,联合式,古代,husband's father and mother,
4,阿平绝倒,ā  píng  jué  dǎo,以之比喻对对方的言论极为佩服。亦用为讥讽言论极为乖谬,常贻笑大方。,据《晋书·卫玠传》及《王澄传》载:玠好言玄理。琅玡王澄字平子,兄昵称之曰:“阿平”。有高名,少所推许,每闻玠言,辄叹息绝倒。故时为之语曰:“卫玠谈道,平子绝倒。”,,,一般,,,,,,
5,阿斗太子,ā dǒu tài zǐ,阿斗:三国蜀汉刘备之子刘禅的小名。此人庸碌无能,虽有诸葛亮等人全力扶助,也不能振兴蜀汉。指懦弱无能的人,高阳《胡雪岩全传 灯火楼台》:“丈夫是个阿斗太子,哪怕你是诸葛亮,也只好叹口气。”,扶不起的阿斗,,常用,贬义词,作主语、宾语、定语;多用于比喻句,偏正式,现代,an ignorant and incapable man <good-for-nothing fellow>,刘禅

每条成语包含以下属性:成语,拼音,成语解释,典故出处,近义词,反义词,常用程度,感情色彩,语法用法,成语结构,产生年代,英文翻译,成语谜面。具体获取成语的方式在spider,py里面,直接运行parse_url3_detail()即可得到以上数据。这里我们去看一下网页:

基于Python实现西西成语接龙小助手

我们要先获取每一页的初始信息,在get_all_chengyu3()里面注释的部分就是,在得到之后已经将其存储下来了,接着随便点击一个成语,进入到具体的详情页:

基于Python实现西西成语接龙小助手

会发现所有的信息都在带有class属性为view_con clearfix的div下,我们可以通过BeautifulSoup的find函数找到这些标签,比如:div = soup.find("div", {"class":"view_con clearfix"}),然后再进一步获取该标签下的一些数据:

dl = div.find("dl")
dts = dl.find_all("dt")
dds = dl.find_all("dd")
for dt,dd in zip(dts, dds):
    cate = dt.text.replace('[', '')
    cate = cate.replace(']', '')
    cate = cate.strip()
    content = dd.text
    content = content.strip()

我们可以通过.text来获取标签包裹的文本,比如

作谓语、定语;用于人

可以得到作谓语、定语;用于人

前缀树搜索提示

代码位于trie.py里面。前缀树的构建很简单,我们从头遍历每一个成语,分别将成语存储到每一个比字或词当中,在搜索的时候以该字或词为键,直接得到值即可:

# coding:utf-8
"""
利用前缀树进行搜索提示
"""


class TrieTree(object):

    def __init__(self):
        self.dict_trie = dict()

    def add_node(self, word):
        word = word.strip()
        tree = self.dict_trie
        for i in range(1, len(word)+1):
            char = word[:i]
            if char not in tree:
                tree[char] = [word]
            else:
                tree[char].append(word)


    def build_trie_tree(self, cy_list):
        """ 创建 trie 树 """
        for word in cy_list:
            self.add_node(word)

    def search(self, word):
        """ 搜索给定 word 字符串中与词典匹配的 entity,
        返回值 None 代表字符串中没有要找的实体,
        如果返回字符串,则该字符串就是所要找的词汇的类型
        """
        tree = self.dict_trie
        res = tree.get(word, None)
        return res


if __name__ == '__main__':
    import pandas as pd
    from pprint import pprint
    trie = TrieTree()
    data = pd.read_csv("data/cycd.csv")
    cys = data["成语"].values.tolist()
    trie.build_trie_tree(cys)
    # pprint(trie.dict_trie)
    print(trie.search("略"))
    
['略不世出', '略地侵城', '略地攻城', '略施小计', '略无忌惮', '略知一二', '略知皮毛', '略窥一斑', '略胜一筹', '略见一斑', '略逊一筹', '略高一筹', '略识之无', '略迹原心', '略迹原情', '略迹论心']

成语接龙

程序在cyjl.py里面,运行之后,我们得到:

==============================
=== 欢迎进行西西嘛呦成语接龙游戏 ===
请选择难度(输入1(简单),输入2(困难))
难度:2

这里的困难模式指西西助手在回答的时候会考虑成语最后一个字在语料库中开头出现的次数,返回出现次数最少的成语来让你尽可能的回答不上来。然后就会出一个字:

出题: 株

此时,你可以输入提示来获取一阶段提示,主要是其中一个答案的解释,还不会,再输入再提示,会给出该成语的前三个字。还是不会,则输入看看,则会展示可能的一些结果(需要注意的是提示的成语可能没在这个结果中,因为我们只返回前5个)。接着我们想了解该成语,输入介绍 成语名,就会展示出该成语的一些信息。其它的一些注意的是,对于输入空值和不正确的值都进行了处理,不会影响程序的运行。

出题: 袖
你的回答:提示
提示:成语解释-- 袖手:藏手于袖中;充耳:塞住耳朵。指不闻不问,漠然置之
你的回答:再提示
提示:前三个字-- 袖手充...
你的回答:看看
['袖中挥拳', '袖手傍观', '袖手充耳', '袖手旁观', '袖里乾坤']
你的回答:介绍 袖手充耳
==============================
成语:袖手充耳
拼音:xiù shǒu chōng ěr
成语解释:袖手:藏手于袖中;充耳:塞住耳朵。指不闻不问,漠然置之
典故出处:清·夏燮《中西纪事·江上议款》:“既不能誓师讨贼,视其力之所能为,则当袖手充耳,姑听命于发踪指示之人。”
近义词:袖手旁观、充耳不闻、漠然置之
反义词:nan
常用程度:一般
感情色彩:褒义词
语法用法:作谓语、定语;用于处事
成语结构:联合式
产生年代:近代
英文翻译:nan
成语谜面:nan
==============================
你的回答:

到此这篇关于基于Python实现西西成语接龙小助手 的文章就介绍到这了,更多相关Python成语接龙内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Golang 相关文章推荐
用golang如何替换某个文件中的字符串
Apr 25 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
go语言中GOPATH GOROOT的作用和设置方式
May 05 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
go开发alertmanger实现钉钉报警
Jul 16 Golang
Go语言基础map用法及示例详解
Nov 17 Golang
如何解决goland,idea全局搜索快捷键失效问题
Apr 03 Golang
victoriaMetrics库布隆过滤器初始化及使用详解
Apr 05 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Go获取两个时区的时间差
Apr 20 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 Golang
Go中使用gjson来操作JSON数据的实现
Aug 14 Golang
Python测试框架pytest核心库pluggy详解
Aug 05 #Golang
Go结合Gin导出Mysql数据到Excel表格
Aug 05 #Golang
GO中sync包自由控制并发示例详解
Aug 05 #Golang
Go语言编译原理之源码调试
Aug 05 #Golang
Go语言编译原理之变量捕获
Aug 05 #Golang
在ubuntu下安装go开发环境的全过程
Aug 05 #Golang
Go语言测试库testify使用学习
Jul 23 #Golang
You might like
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
验证手机号码的JS方法分享
2013/09/10 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
校园网站的创业计划书范文
2013/12/30 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
2016中秋节广告语
2016/01/28 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
使用python创建股票的时间序列可视化分析
2022/03/03 Python
Golang 并发编程 SingleFlight模式
2022/04/26 Golang
Android Studio 计算器开发
2022/05/20 Java/Android
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS