基于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
Go语言带缓冲的通道实现
Apr 26 Golang
Golang: 内建容器的用法
May 05 Golang
go mod 安装依赖 unkown revision问题的解决方案
May 06 Golang
基于Golang 高并发问题的解决方案
May 08 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
golang内置函数len的小技巧
Jul 25 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
golang的文件创建及读写操作
Apr 14 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang并发工具Singleflight
May 06 Golang
Go语言测试库testify使用学习
Jul 23 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
PHP之预定义接口详解
2015/07/29 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
js链表操作(实例讲解)
2017/08/29 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
JsonServer安装及启动过程图解
2020/02/28 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Django密码存储策略分析
2020/01/09 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
人事专员岗位职责
2013/11/20 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
敬老模范事迹
2014/05/21 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
苏州园林导游词
2015/02/03 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python