`

告诉你什么是优雅的代码(3)------山寨拼音分词

    博客分类:
  • Java
 
阅读更多
早上看见一帖《拼音语法检查》,感觉比较啰嗦,也比较低效。于是自己也写了一个,在此拿出来让大家笑一下。鉴于此帖可能很快被隐藏,要研究代码的就尽快了。不要跟我说没有处理不存在的词会报异常,这些细节就留给懒惰的你了。

//你来迟了。
	
	public static void main(String[] args) {
		PinyingTree tree = new PinyingTree();
		tree.init();
		tree.study("zhong");
		tree.study("guo");
		tree.study("ren");
		tree.study("dou");
		tree.study("shi");
		tree.study("huo");
		tree.study("lei");
		tree.study("feng");
		tree.study("chen");
		tree.study("gong");
		tree.study("hen");
		tree.study("niu");
		tree.study("bi");
		tree.study("mei");
		tree.study("you");
		tree.study("shen");
		tree.study("me");
		tree.study("bu");
		tree.study("ke");
		tree.study("neng");
		tree.study("zhi");
		tree.study("yao");
		tree.study("ni");
		tree.study("qu");
		tree.study("zuo");
		tree.study("de");
		
		List<String> result = tree.parse("zhongguorenhenniubizhiyaoniquzuomeiyoushenmeshibukenengde");
		for (String match : result) {
			System.out.print(match + " ");
		}
	}
	
}







运行结果:
zhong guo ren hen niu bi zhi yao ni qu zuo mei you shen me shi bu ke neng de 
分享到:
评论
28 楼 qq355667166 2012-02-28  
怎么看不到?
27 楼 yangguo 2010-09-07  
langyu 写道
yangguo 写道
langyu 写道
拜托,这种逻辑也好意思。大致浏览代码的时候就能看到一堆NullPointer

把你那一长串要parse的东西换个简短些的字符串,就“name”吧,看看效果。

哎,想做程序员界的凤姐么?


这个患的就是javaeye典型病例1--没看懂就喷。请认真看帖。你先学习了na跟me再来运行吧。就你头猪才报这样的异常。

哎,服了,口下积德。
你的那些小逻辑还有意思说别人看不懂么,我测试的就是你在树中找不到这个串的时候的场景。
至于NullPointer?
if(node.isEnd())  
            	child.get(node.getKey()).setEnd(true);


还有你那类名PinyingTree?中文基础就这样,呵呵



接着患下javaeye典型病例2---知错不改,顾左右而言它。都说你先study那些词再来运行,猪都听懂了,你还没听懂?
26 楼 langyu 2010-09-07  
yangguo 写道
langyu 写道
拜托,这种逻辑也好意思。大致浏览代码的时候就能看到一堆NullPointer

把你那一长串要parse的东西换个简短些的字符串,就“name”吧,看看效果。

哎,想做程序员界的凤姐么?


这个患的就是javaeye典型病例1--没看懂就喷。请认真看帖。你先学习了na跟me再来运行吧。就你头猪才报这样的异常。

哎,服了,口下积德。
你的那些小逻辑还有意思说别人看不懂么,我测试的就是你在树中找不到这个串的时候的场景。
至于NullPointer?
if(node.isEnd())  
            	child.get(node.getKey()).setEnd(true);


还有你那类名PinyingTree?中文基础就这样,呵呵

25 楼 yangguo 2010-09-07  
langyu 写道
拜托,这种逻辑也好意思。大致浏览代码的时候就能看到一堆NullPointer

把你那一长串要parse的东西换个简短些的字符串,就“name”吧,看看效果。

哎,想做程序员界的凤姐么?


这个患的就是javaeye典型病例1--没看懂就喷。请认真看帖。你先学习了na跟me再来运行吧。就你头猪才报这样的异常。
24 楼 yeswoyaofei 2010-09-07  
没看明白??
23 楼 langyu 2010-09-07  
拜托,这种逻辑也好意思。大致浏览代码的时候就能看到一堆NullPointer

把你那一长串要parse的东西换个简短些的字符串,就“name”吧,看看效果。

哎,想做程序员界的凤姐么?
22 楼 gundumw100 2010-09-07  
不做评论,看看尚可,用用就差强人意。
21 楼 chenxizhiyi 2010-09-07  
分词,好高深啊对我来说
20 楼 yangguo 2010-09-07  
yangke250 写道
笑死我了,难怪中国有那么多架构师。这题目加这个内容能不被喷吗


小靓妹你懂什么。有这样的环境,才有这样的怪帖。
19 楼 webeasymail 2010-09-07  
一大早就笑死我了~~
18 楼 sundoctor 2010-09-07  
真是非常优雅!!!!!!!!!!!强人!!!!!!!!!!!中国有希望了!!!!!!
17 楼 yangke250 2010-09-07  
笑死我了,难怪中国有那么多架构师。这题目加这个内容能不被喷吗
16 楼 yangguo 2010-09-07  
leon_a 写道
yangguo 写道
leon_a 写道
假设你的字典里
tree.study("ti")
tree.study("an")
tree.study("xi")
tree.study("a")
tree.study("tian")
tree.study("xia")
人家那个贴至少做了最大匹配,就像示例tianxia,按照一般的字典应有的拼音来说,你这个分法,很有可能分成ti,an,xi,a(踢,安,西,啊)。对比一般的情况,精确度会非常非常差


你怎么不运行一下再来乱下结论。我的正是跑出最大匹配。 而它的反而是ti,an,xi,a,用的贪婪,分的越多越好。。。

代码大略扫了扫,没怎么仔细看


i服了u!!
15 楼 leon_a 2010-09-07  
yangguo 写道
leon_a 写道
假设你的字典里
tree.study("ti")
tree.study("an")
tree.study("xi")
tree.study("a")
tree.study("tian")
tree.study("xia")
人家那个贴至少做了最大匹配,就像示例tianxia,按照一般的字典应有的拼音来说,你这个分法,很有可能分成ti,an,xi,a(踢,安,西,啊)。对比一般的情况,精确度会非常非常差


你怎么不运行一下再来乱下结论。我的正是跑出最大匹配。 而它的反而是ti,an,xi,a,用的贪婪,分的越多越好。。。

代码大略扫了扫,没怎么仔细看
14 楼 yangguo 2010-09-07  
wangzaixiang 写道
好的,我就用刚学习的groovy写一段脚本。

def pinyin = ["zhong", "guo", "ren", "du", "shi", "huo", "lei", "feng"]
def input = "zhongguorenshileifeng"

def m = input =~ /(${pinyin.join('|'})/
m.each { println it[0] }



输出:
zhong
guo
ren
lei
feng

如果不明白的话,可能要看看groovy的基本语法了。


你怎么连“shi”都不见了。为什么是join '|'?
13 楼 janrn 2010-09-07  
果然10分优雅,LZ定然是年薪100万
12 楼 yangguo 2010-09-07  
leon_a 写道
假设你的字典里
tree.study("ti")
tree.study("an")
tree.study("xi")
tree.study("a")
tree.study("tian")
tree.study("xia")
人家那个贴至少做了最大匹配,就像示例tianxia,按照一般的字典应有的拼音来说,你这个分法,很有可能分成ti,an,xi,a(踢,安,西,啊)。对比一般的情况,精确度会非常非常差


你怎么不运行一下再来乱下结论。我的正是跑出最大匹配。 而它的反而是ti,an,xi,a,用的贪婪,分的越多越好。。。
11 楼 wangzaixiang 2010-09-07  
好的,我就用刚学习的groovy写一段脚本。

def pinyin = ["zhong", "guo", "ren", "du", "shi", "huo", "lei", "feng"]
def input = "zhongguorenshileifeng"

def m = input =~ /(${pinyin.join('|'})/
m.each { println it[0] }



输出:
zhong
guo
ren
lei
feng

如果不明白的话,可能要看看groovy的基本语法了。

如果想做最大匹配,也简单
def pinyin = ["zhong", "guo", "ren", "du", "shi", "huo", "lei", "feng"]
pin = pin.sort { 0 - it.length() }
def input = "zhongguorenshileifeng"

def m = input =~ /(${pinyin.join('|'})/
m.each { println it[0] }

10 楼 leon_a 2010-09-07  
假设你的字典里
tree.study("ti")
tree.study("an")
tree.study("xi")
tree.study("a")
tree.study("tian")
tree.study("xia")
人家那个贴至少做了最大匹配,就像示例tianxia,按照一般的字典应有的拼音来说,你这个分法,很有可能分成ti,an,xi,a(踢,安,西,啊)。对比一般的情况,精确度会非常非常差
9 楼 yangguo 2010-09-07  
leon_a 写道
假设字典中加入xian,xi,an
xian,你是分成xi'an 还是xian呢。根本没考虑这种情况吧


目前的算法是分成 xian.  节点还有个end属性未用,可用来扩展 。

相关推荐

    告诉你什么是优雅的代码(9)----山寨版猜珍珠

    NULL 博文链接:https://yangguo.iteye.com/blog/778866

    编译原理-山寨版-简化C语言编译器-简单易学

    3. **语义分析**:在构建AST后,编译器进行语义分析,检查代码的逻辑正确性,如类型匹配、变量声明等。同时,它还可能进行类型推断和优化。 4. **中间代码生成**:编译器通常会生成一种中间代码,如三地址码或四元...

    JAVA山寨版聊天源代码

    **JAVA山寨版聊天源代码详解** 在JAVA编程领域,网络编程是不可或缺的一部分,尤其是在开发实时交互的应用程序,如聊天软件时。"JAVA山寨版聊天源代码"是一个学习和理解JAVA网络编程的好资源,它提供了从基础到进阶...

    J-LINK(山寨也可以)固件修复

    本文将深入探讨"J-LINK(山寨也可以)固件修复"这一主题,教你如何对J-LINK进行最简单的修复和升级,即使面对的是非官方的“山寨”版本。 首先,我们要理解J-LINK固件的重要性。固件是存储在设备硬件中的软件,它...

    43M-172个-山寨iphone4游戏soft

    3. **操作系统兼容性**:由于是“山寨”设备,这些游戏可能并非运行在iOS上,而是基于Android或其他第三方操作系统。这意味着游戏可能需要进行额外的优化以适应非标准平台,可能涉及到图形渲染、内存管理、输入处理...

    走出山寨-MTK芯片开发指南PDF5

    走出山寨-MTK芯片开发指南.part05.rar 走出山寨-MTK芯片开发指南.part05.rar

    山寨版--当当网源程序

    【Hibernate】是一个对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库,消除了SQL与Java代码之间的耦合。Hibernate通过XML或注解方式定义对象和数据库表之间的映射关系,使得数据库操作变得更加...

    山寨索尼M3 3.2固件 sony-M3

    3. **准备工具**:通常,你需要一个能够连接设备的电脑和相应的刷机工具。对于山寨设备,可能还需要特殊的驱动程序才能被电脑识别。 4. **进入刷机模式**:根据设备的说明书,将设备置于刷机模式,这通常通过特定的...

    走出山寨-MTK芯片开发指南 第2部分 总共2部份

    走出山寨-MTK芯片开发指南 第2部分 总共2部份

    山寨酷狗3.0(含C语言源代码)

    "山寨酷狗3.0(含C语言源代码)"是一个基于C语言开发的音乐播放器项目,它旨在模仿酷狗音乐的功能和用户体验。这个项目对于学习C语言编程、软件开发流程以及多媒体应用开发的学生来说,是一个很好的实践案例。C语言是...

    走出山寨-MTK芯片开发指南 压缩版.pdf

    走出山寨-MTK芯片开发指南 压缩版.pdf

    java版山寨QQ项目源码

    java版山寨QQ项目 里面有四个压缩包 QQ服务器端.rar QQ客户端.rar 改进QQ客户机服务器视频实现.rar Q第三方库.rar 这个java版山寨QQ项目实现的功能有: 1.实现的java视频聊天; 2.集成了Mina框架; 3.服务器管理...

    走出山寨-MTK芯片开发指南

    《走出山寨——MTK芯片开发指南》是一本深入解析MTK芯片开发的专业书籍,它针对MTK(MediaTek)芯片的特性和应用提供了详尽的指导。MediaTek是一家知名的半导体公司,其产品广泛应用于移动通信、数字电视、物联网等...

    “路过的”源代码,山寨omegle

    "路过的"是一款模仿Omegle的即时随机聊天应用的源代码。Omegle是一款知名的在线聊天平台,它允许用户与全世界的陌生人进行匿名的一对一聊天,深受互联网用户的喜爱。"路过的"则是在这一理念基础上,针对中文用户市场...

    1037u-tm-i37ce1522v120155山寨一体机主板bios

    标题中的“1037u-tm-i37ce1522v120155山寨一体机主板bios”指的是一个特定型号的一体机主板的BIOS固件,这是一台采用Intel 1037U处理器的山寨版一体机。一体机是将计算机的各个部件集成在一个紧凑的外壳内,包括...

    韩顺平山寨QQ源代码

    【韩顺平山寨QQ源代码】是一份编程学习资源,主要由两部分组成:QQServer(服务器端)和QQClient(客户端)。这份源代码是由韩顺平老师指导编写的,目的是为了帮助学习者理解即时通讯软件(IM)的基本原理与实现方式...

    山寨版QQ 源代码 QQ2010界面

    标题中的“山寨版QQ 源代码 QQ2010界面”指的是一个非官方的、模仿QQ2010版本用户界面的软件项目,它的源代码是使用Java编程语言编写的。这个项目可能是为了教学目的,如描述中提到的“韩顺平JAVA教程视频配套源代码...

    山寨版QQ代码

    【标题】:“山寨版QQ代码”揭示了Java编程在软件开发中的应用 在编程领域,尤其是Java编程中,"山寨版QQ代码"通常指的是开发者为了学习和理解即时通讯软件(如QQ)的工作原理,尝试用Java语言实现的一个简化版本。...

    广东工业大学JAVA第三次作业-山寨记事本(代码+报告)

    【标题】"广东工业大学JAVA第三次作业-山寨记事本(代码+报告)"涉及的知识点主要集中在Java编程语言的应用上,特别是针对简单的桌面应用程序开发。这个作业要求学生模仿常见的记事本程序,实现一个功能类似的基本...

Global site tag (gtag.js) - Google Analytics