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

目录
  • 介绍
  • 爬虫模块
  • 前缀树搜索提示
  • 成语接龙

介绍

代码地址: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()即可得到以上数据。这里我们去看一下网页:

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

会发现所有的信息都在带有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成语接龙内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Python编写简易的成语接龙游戏

    目录 前言 1.游戏规则 2.正式敲代码 2.1模块导入 2.2读取txt数据 2.3界面设置 2.4电脑接龙 2.5重新开始新游戏 2.6成语是否合法 2.7读取成语的数据 2.8附完整的项目源码 3.效果展示 前言 "胸藏文墨怀如谷,腹有诗书气自华".      ——<和董传留别> 成语接龙是中华民族传统的文字游戏. 它历史悠久,是传统文字.文化.文明的一个缩影,也是老少皆宜的民间文化娱乐活动. 成语接龙:"龙腾虎跃,该你了!"          

  • Python爬取成语接龙类网站

    介绍 本文将展示如何利用Python爬虫来实现诗歌接龙. 该项目的思路如下: 利用爬虫爬取诗歌,制作诗歌语料库: 将诗歌分句,形成字典:键(key)为该句首字的拼音,值(value)为该拼音对应的诗句,并将字典保存为pickle文件: 读取pickle文件,编写程序,以exe文件形式运行该程序. 该项目实现的诗歌接龙,规则为下一句的首字与上一句的尾字的拼音(包括声调)一致.下面将分步讲述该项目的实现过程. 诗歌语料库 首先,我们利用Python爬虫来爬取诗歌,制作语料库.爬取的网址为:https

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

    目录 介绍 爬虫模块 前缀树搜索提示 成语接龙 介绍 代码地址:https://github.com/taishan1994/chinese_chengyujielong 读完该文,你可以收获: python爬虫的简单使用. 构建前缀树以进行搜索提示. 构建一个简单的成语接龙小程序. 爬虫模块 首先展示下我们最终获得的成语的数据: ,成语,拼音,成语解释,典故出处,近义词,反义词,常用程度,感情色彩,语法用法,成语结构,产生年代,英文翻译,成语谜面 0,阿匼取容,ē ǎn qǔ róng,阿匼:

  • 基于Python的一个自动录入表格的小程序

    ## 帮阿雪写的一个小程序 --------------------------------------------------------------------------------------------------- 上大学的时候,总是会由很多表格需要同学们去搞,尤其是刚开学的那个时候,显然是很烦躁, 阿雪刚开学的时候,作为班干部,表示有时候刚录表不是很熟悉经常会弄到很晚,甚至还会弄错, 这就让我很是触动,所以想帮她搞一搞,顺便增强一下我们的友谊/hhhhhh ------------

  • 基于python pygame实现的兔子吃月饼小游戏

    目录 小游戏规则简介 实现 初始化游戏窗口 游戏逻辑 实现玩家类 实现月饼类 交互逻辑 总结 中秋佳节就快来临,给各位大佬整个兔子吃月饼的小游戏助助兴,废话不多说,开整. 小游戏规则简介 玩家通过"wsad"或者"↑↓←→"键控制兔子移动,使得兔子可以吃到更多的月饼,月饼一旦生成之后位置不会变,也不会消失,就等着兔子去吃,就是这么简单.但是吃了月饼会变重,重到一定程度会有想不到的效果. 实现 使用Python的pygame模块开发,pygame是用来开发游戏软件的P

  • 基于Python编写一个宝石消消乐小游戏

    目录 开发工具 环境搭建 原理简介 开发工具 python版本:3.6.4 相关模块: pygame:以及一些python自带的模块. 环境搭建 安装python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 游戏规则: 玩家通过鼠标交换相邻的拼图,若交换后水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分,同时生成新的拼图以补充消失的部分,否则,交换失败,玩家不得分.玩家需要在规定时间内获取尽可能高的得分. 实现过程: 首先加载一些必要的游戏素材: 加载背景音乐: py

  • 基于 Serverless +企业微信打造 nCoV 疫情监控小助手

    最近的一些疫情信息很让人揪心,为了方便大家掌握疫情信息,在空闲之余做了一个关于 nCoV 的疫情监控小助手.主要的功能是通过企业微信的 WebHook 来推送疫情信息.这里将使用 Serverless 的整体代码思路和架构方式分享给大家.本文作者:tabor 实现效果 我们想要实现的大致的效果是这样的: 首先,我们需要解决的是数据来源问题,这里我们可以使用 python 爬虫来做这件事情,但是由于个人比较懒所以直接用的 2019-nCoV-Crawler  ,这个项目已经集成了现有的 API,所

  • 基于Python os模块常用命令介绍

    1.os.name---判断现在正在实用的平台,Windows返回'nt':linux返回'posix' 2.os.getcwd()---得到当前工作的目录. 3.os.listdir()--- 4.os.remove---删除指定文件 5.os.rmdir()---删除指定目录 6.os.mkdir()---创建目录(只能创建一层) 7.os.path.isfile()---判断指定对象是否为文件.是则返回True. 8.os.path.isdir()---判断指定对象是否为目录 9.os.p

  • 基于python时间处理方法(详解)

    在处理数据和进行机器学习的时候,遇到了大量需要处理的时间序列.比如说:数据库读取的str和time的转化,还有time的差值计算.总结一下python的时间处理方面的内容. 一.字符串和时间序列的转化 time.strptime():字符串=>时间序列 time.strftime():时间序列=>字符串 import time start = "2017-01-01" end = "2017-8-12" startTime = time.strptime

  • 基于Python闭包及其作用域详解

    关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被称为闭包(closure),而这个被内部函数引用的变量则被成为自由变量 闭包和函数调用没多少相关,而是关于使用定义在其他作用域的变量 命名空间和作用域 我们把命名空间看做一个大型的字典类型(Dict),里面包含了所有变量的名字和值的映射关系.在 Python 中,作用域实际上可以看做是"在当前

  • 基于python的字节编译详解

    定义: 把模块定义成二进制语言程序的这个过程叫做字节编译 python是解释型语言,它的字节编译是由解释器完成的 编译py文件,生成pyc结尾的文件的方法, 方法一: Import zipfile.py 方法二: 以上这篇基于python的字节编译详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐