使用代码列出金庸小说中使用过的所有成语
去年的今天,金庸与世长辞,当时Jerry在成都地铁一号线下班的路上得知了这个消息,回到家立即写了一篇文章来悼念:金庸的武侠世界和SAP的江湖。
一年的时间转瞬即逝,大家都忙碌于各自的生活,很多人对金老的离世已经淡忘了,不过Jerry这种金庸的死忠粉,对于这个一周年忌日还是记得很清楚的。
因为Jerry手上事情很多,没时间在这个特殊的日子写文章纪念了,就发一小段代码吧。
需求:列出金庸任意一本小说里出现的所有成语。
实现:Jerry部署在Github上的一个web应用,链接如下:
http://jerrywang-sap.cn/FioriODataTestTool2014/WebContent/050_Keyword.html
首先点击超链接“成语全集”:
点击之后,存储于该web应用本地存储的一个文本文件里的全部19830个成语,以树的形式加载到内存中,并显示在网页上:
然后复制一本金庸小说的内容,粘贴到网页的“内容”区域,点击按钮“测试”:
可以看到仅仅用了246毫秒,就将这部一百多万字的《倚天屠龙记》里出现的所有成语,以红色高亮的方式高亮出来。
这个功能咋实现的?Chrome打开Jerry的网页,F12开启开发者工具,就能看到JavaScript源代码,当然也可以从我的Github上获得.
Jerry简单讲下实现原理。Web应用里有一个文本文件,里面维护了汉语里全部的成语,通过分号分隔。
运行时,这些内容会被加载到内存中,构建成一棵树,如下图所示:
其中叶节点以属性end为true区分。
成语检索的核心逻辑位于search函数里,让我们用《笑傲江湖》里一句响亮的口号“日月神教千秋万载,一统江湖”来单步调试,了解其实现逻辑。
进入165行的外层while循环,再进入173行的内层for循环,检测是否有测试字符串第一个字符“日”开头的成语。因为成语是由4个字符组成,所以需要用内层for循环逐一试探,如果遇到tblCur.end为true的元素,说明在测试字符串中发现了一个成语。
下图是内层for循环第一次执行后的tblCur内容:
内层循环执行第二次,此时tblCur指向一棵由所有“日月”开头的成语组成的树:
执行内层循环的第三次迭代,因为在树“日-月”这个分支下面没有“神”这个节点,所以结束当前的内层循环,通过break返回到外层的while循环,进行输入字符串第二个字符“月”的新一轮试探,以此类推。
最后从“千”这个字符出发,沿着内存中的树经过路径"秋-万",最后来到end属性为true的叶节点“载”,记下“千”在输入字符串中的偏移量,存到一个数组arrMatch中去。
待输入字符串全部试探完毕后,根据arrMatch中存放的偏移量,高亮显示对应的字符串,完成检索。
树这个数据结构在这个需求的实现里有着完美的表现。
金庸虽然离开了我们,但他笔下那些人物和发生的故事,将永远流传于这个世上。
更多阅读
- 金庸的武侠世界和SAP的江湖
- 金庸和古龙,Netweaver和微服务,以及SAP Hybris Revenue Cloud
- 作为一名SAP从业人员,需要专门学习数学么
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
使用代码列出金庸小说中使用过的所有成语相关推荐
- 金庸小说中的农业漏洞[ZT]
历史悖谬问题在小说中是极常见的,<金瓶梅>和<堂吉诃德>等都有很多疏漏,其中有些是有违历史常识的.某网站上有一个小专栏名为"骨头大家挑",专找金庸小说中的漏 ...
- 我们分析了金庸小说中出现的1367个人物名字,发现了一些相当惊人的事情
如果你也想赚钱,实现财务自由,但接触不到优质的人脉和资源,可以到公June浩:成长home,发"资源" ,就会看到我吐血整理的168条保姆级零基础吸金秘籍,跟着我一起亲历毕业5年. ...
- 金庸小说中的美女与佳人
金庸小说中的美女? 这可能是一个比较老的话题了.如果"到Google上百度一下",能找到不下百万条的记录结果.之所以会有这么多结果,可能和每个读者心目中的理想美女标准不一吧. 尽管 ...
- 金庸小说中的扫地僧来源
<天龙八部>人物关于年龄 扫地僧扫地僧出场时,"一个身穿青袍的枯瘦僧人拿着一把扫帚,正在弓身扫地.这僧人年纪不少,稀稀疏疏的几根长须已然全白",又说他来了"不 ...
- 奇文:金庸小说中的第一高手是谁?
http://kuangfei.blogbus.com/logs/34404373.html 这个作者太有才了:)
- 把金庸小说数据化——关于语言的思一点考
先看几道有关金庸小说的问题: 第一题: 1.一男性角色叫她姑姑,但二者没有血缘关系: 2.她的师父是女性,师父的师父也是女性: 3.她于人情世故所知甚少,更习惯生活在原来的的环境中. 4.曾经有一位武 ...
- 【转载】浅析金庸武侠小说中的哲理意蕴
作者:刘幸 青年文学家2016年30期 武侠小说在中国文学中一直占据着一个非常重要的位置.无论是梁羽生,还是金庸,都是当代武侠小说创作的大师.他们的武侠小说,以现代小说的写作技巧为纲,在传统的写作手法 ...
- 从金庸小说看古代武侠世界计划生育
当我们还在狠批马寅初的人口论,号召群众大生特生的时代,金庸已经在自己的小说中实行了严格的计划生育政策.鉴于金庸小说在宣传计划生育方面的突出贡献,有必要授予金庸计划生育先进工作者称号. 金庸小说的主要人 ...
- 孔庆东看金庸小说的奇情怪恋
孔庆东看金庸小说的奇情怪恋 主讲人简介: 孔庆东,北京大学中文系副教授.祖籍山东,系孔子第73代直系传人.1983年自哈尔滨考入北京大学中文系,钱理群先生的开山硕士.严家炎先生的博士, 主攻现代小说与 ...
最新文章
- mysql 函数rep_Mysql之各种各样的函数啦
- 使用python完成的一个烟花小程序-人人都可以写的可视化Python小程序第二篇:旋转的烟花...
- Mathematica该注意的两种特殊的输入方式(blanksequence and ruledelayed)
- js变量后面加问号是什么_js没那么简单(1)-- 执行上下文
- Java多线程之间访问实例变量
- C/C++ linux 分享库源码网站收藏
- maven的离线模式
- 逻辑人渴望控制那些让他们感兴趣的东西
- sql2005-数据库备份方案
- 搜狗浏览器收藏夹在哪_安卓Edge浏览器最新版42.0.2轻体验,整体优良但无特别惊喜...
- STM32-通用定时器-PWM输出
- 因担心5G电磁辐射 这个地方的居民试图阻止5G基站扩张
- 毕设日志——Fast RCNN
- 【经验心得】固定布局做到各手机屏幕适配简单粗暴的方法
- Flutter代码锦囊---魔改进度条
- 小猿圈python之python期末考试测试题(二)_小猿圈python之练习题
- python中把输出结果写到一个文件中_python 文件中字符串过滤,并将结果输出到另一个文件中(源码)...
- 【重磅】这家技术贼牛的开源公司开始狂招人啦!
- 【沐风老师】3DMAX随机挤出插件2DExtruder使用教程
- 晶振原理详解及测试方法