去年的今天,金庸与世长辞,当时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中存放的偏移量,高亮显示对应的字符串,完成检索。
树这个数据结构在这个需求的实现里有着完美的表现。
金庸虽然离开了我们,但他笔下那些人物和发生的故事,将永远流传于这个世上。
更多阅读
logo.jpg
要获取更多Jerry的原创文章,请关注公众号"汪子熙"
相关推荐
此外,源代码中的逻辑控制部分展示了如何将金庸小说中的故事情节和角色转化为游戏规则。 除了技术层面的学习,这个项目还体现了开源社区的精神。开源意味着开发者可以自由地查看、使用、修改和分享代码,这种开放的...
这个资料集涵盖了金庸所有武侠小说的重要元素,为研究金庸武侠风格、人物塑造、故事结构提供了宝贵资源。例如,人名列表可以帮助分析金庸命名的规律,武功和门派数据则展示了武侠世界的武学体系和组织架构。 4. **...
nlp期末作业- 使用LDA主题模型进行金庸小说的文本分类+源代码+文档说明(高分),含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为...
### 金庸武侠小说词频统计及情感分析使用词典大全 #### 一、引言 金庸先生作为中国现代武侠小说的代表人物之一,其作品不仅深受读者喜爱,也成为了学术研究的重要对象。通过对金庸小说进行词频统计与情感分析,...
1、资源内容:nlp期末作业- 使用LDA主题模型进行金庸小说的文本分类+源代码+文档说明 2、代码特点:内含运行结果,不会运行可私信,参数化编程、参数可方便更改、代码编程思路清晰、注释明细,都经过测试运行成功,...
基于python实现金庸小说的word2vec词向量分析源码+数据.zip基于python实现金庸小说的word2vec词向量分析源码+数据.zip基于python实现金庸小说的word2vec词向量分析源码+数据.zip基于python实现金庸小说的word2vec词...
其次,在分词阶段,金庸小说中的丰富词汇和成语可以挑战现有的分词工具,如jieba,进一步完善中文分词算法。通过分析这些文本,模型可以学习到更为复杂和具体的语言规则。 接着,可以进行词频统计和关键词提取,找...
基于LDA主题模型进行金庸小说的文本分类python源码(NLP大作业).zip基于LDA主题模型进行金庸小说的文本分类python源码(NLP大作业).zip基于LDA主题模型进行金庸小说的文本分类python源码(NLP大作业).zip基于LDA主题...
本源码可能包含了一系列与游戏设计、图形渲染、用户交互、数据存储等多个方面相关的知识,以下是根据提供的信息解析出的相关知识点: 1. **VC++编程**:该源码是用Microsoft的Visual C++编写的,这是一款强大的...
金庸武侠小说研究PPT课件.pptx
本模拟器理论支持 所有金庸群侠传OL1.0版客户端 简繁体。 本模拟器为【半成品】 本模拟器目前底层基础开发完毕,可以登陆游戏,其他还未开发,有兴趣的朋友可以继续完善,本模拟器只是给出了一个开发思路和开发的...
在这些应用中,金庸全集的训练集可以帮助提升模型对中文语言的理解能力,特别是在生成具有文学风格的文本时,模型可能会呈现出独特的武侠韵味。 5. **文本清洗**:在使用这些文本前,通常需要进行预处理,包括去除...
在《笑傲江湖》中,杨过的剑法被形容为“翰逸神飞”,具有围棋般的灵动和飘逸,这体现了金庸将棋道融入剑道的艺术手法,展现出武侠与艺术的交融之美。而《萍踪侠影》中张丹枫与少女的剑舞,如同棋局般变化莫测,生动...