基于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 空map和未初始化map的注意事项说明
Apr 29 Golang
golang import自定义包方式
Apr 29 Golang
golang 在windows中设置环境变量的操作
Apr 29 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
使用golang编写一个并发工作队列
May 08 Golang
Golang 语言控制并发 Goroutine的方法
Jun 30 Golang
Go 语言结构实例分析
Jul 04 Golang
go使用Gin框架利用阿里云实现短信验证码功能
Aug 04 Golang
Golang实现可重入锁的示例代码
May 25 Golang
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
Jun 14 Golang
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
Jun 21 Golang
基于Python实现西西成语接龙小助手
Aug 05 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中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
php实现webservice实例
2014/11/06 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
简单的js表单验证函数
2013/10/28 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
vue构建动态表单的方法示例
2018/09/22 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
Python中endswith()函数的基本使用
2015/04/07 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
Python中DJANGO简单测试实例
2015/05/11 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
numpy基础教程之np.linalg
2019/02/12 Python
详解python中init方法和随机数方法
2019/03/13 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
韩语专业本科生求职信
2013/10/01 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
初二生物教学反思
2014/02/03 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
员工福利申请报告
2015/05/15 职场文书
董事会决议范本
2015/07/01 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
初中美术教学反思
2016/02/17 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python