基于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 28 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
Go遍历struct,map,slice的实现
Jun 13 Golang
再次探讨go实现无限 buffer 的 channel方法
Jun 13 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
golang中的struct操作
Nov 11 Golang
golang使用map实现去除重复数组
Apr 14 Golang
实现GO语言对数组切片去重
Apr 20 Golang
Golang jwt身份认证
Apr 20 Golang
Python测试框架pytest核心库pluggy详解
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
php zend解密软件绿色版测试可用
2008/04/14 PHP
php对数组排序代码分享
2014/02/24 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
php基础教程
2015/08/26 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
js 操作符实例代码
2009/10/24 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
python如何查看系统网络流量的信息
2016/09/12 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
python实现列表的排序方法分享
2019/07/01 Python
python实现指定ip端口扫描方式
2019/12/17 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
临床医学系毕业生推荐信
2013/11/09 职场文书
药学专业个人自我评价
2013/11/11 职场文书
审美与表现自我评价
2015/03/09 职场文书
幸福来敲门观后感
2015/06/04 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
详解Python生成器和基于生成器的协程
2021/06/03 Python
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python