2008年4月28日星期一

遇到有个性的陌生人求助

    昨天夜里,下了公交车已是晚上9点刚过,我正走着,忽然迎面走来一个中年妇女,挎了个小包,对我说,“我想跟你商量个事--”, 我本能的扭头看了下,就想继续走,她就边追着我边说,“我不是坏人,我是下岗工人--”,然后她就就到了我前面,我也就停了下来,她继续说,“我一天了,就吃了个馒头,你看我这么大人,这么多难为情呀,不得已不会这样的。” 我说,"那您意思是--?",她说,"你给我些钱,让我吃顿饭。" 我说,“那我只能给你找些零钱让你吃顿饭。” 然后,我从书包里取出钱包,找了5元零钱给她,并说,“这够应该够你吃顿饭了”(我住的那边饭馆很便宜,4元一碗面,5元一份饺子。),给完钱,我正要走,她对我说,"你再给我些钱,让我明天也可以吃顿早饭。" 我听了,先是一愣,她接着说,“你再给我5块钱。” 我一想,我身上已经没有零钱了,最小面值的是10元,况且,天这么晚,这样请求帮助还是第一次遇到,考虑到帮助要适度,我就说,“那你把那5元给我,我给你10元吧。” 她不给,愣了下说,"你先把10元给我,我一定把5元给你。" 我听了很生气,这哪里是我帮人家,简直是人家拿我的钱在和我谈判,是在帮助我啊。也是这句话,让我想到了一种可能最坏的情形:在我再次取钱时实施抢劫(我以前晚上10点在回宿舍路上遇到过紧追着我向我打听人的,为了打听人,他改变了他的行走方向紧追我,走的非常的快,最主要一点,那人在8月天右手插兜,似有钝器,属于紧追不放型那种,还好我跑到了附近超市,对方才没继续追过来。所以,我比较警觉这一点.),或者即使我再给了10元,那5元也不见得她能给我。如此的不信任让我感觉这不是一个值得帮助的人,我决定不予帮助,无论她是真是假。 我说,“你把那5元钱给我!”,她还是不给,我试图从她手里把我的钱拿回来,没成功,我就大声说,“你先把那5元给我,我一定给你10元!” 这时,她终于把钱给了我,我把钱塞到钱包,然后说,“对不起,我不能帮你!” 她对我说,“要讲诚信,要讲诚信!” 我就对她说,“我正因为信任你才帮你,没想到你还说什么‘我先给你10元,然后再给我5元’” 然后她还有点不愿离开,我就说,“要么我们到附近的派出所去?” 这时她才离开。诚信,诚信不是让人把自己当棒槌。
    回来后,我就在想,既然她说一天只吃了一个馒头,那么我应该带她到附近的饭馆去吃饭,如果她真去,那应该是真的没吃饭,反之就是假的。我应该问问她住哪,因为看她穿着干净,应该是有住的地方的,那样一定不会缺一顿饭吃的。天这么晚了,很快就没有公交车了,所以她应该就在附近某处住。如果真是出来找工作,那么为什么没有计划出几块钱吃午饭? 但我又会想,希望她不是真的没饭吃!那样我就不会觉得心里不安。但我有时又会想,我为什么要去帮助她呢? 我10块钱,我的父母需要生产1000块蜂窝煤才能赚那么多,我为什么要给一个我不认识还如此态度的人呢?
    以前我非常乐意帮助别人,也常常在物质上帮助陌生人,就像我的父母一样那样乐意帮助别人,虽然自己本身并不富裕,但看着父母的血汗钱常常出去后就经常难以回来,再想想一些自己不努力,祈求他人不断帮助来生存的人,甚至通过欺骗的方式,我就一直在想,这世界,不是所有你觉得可怜的人都应该被帮助的,可怜是有原因的,物质帮助不一定让他们摆脱"贫穷",而有的人其实物质上不见得比你想象的贫穷。
    有时在想,<西游记>里面的孙悟空才是真正厉害,而唐僧的菩萨心肠却被妖魔鬼怪不断利用。在外面,真的很需要火眼金睛,帮助那些真正需要帮助也值得帮助的人。但有一点是:先保护好自己!这是所有为社会做贡献的前提!

2008年4月25日星期五

ewe

2008年4月24日星期四

Scribd -免费图书馆

       想学习设计模式,找Head First Design Pattern (Head First 设计模式)和《java notes》(java学习笔记)的朋友可以来cellent看看,这里有设计模式 design pattern和java  笔记.
       另外,我很高兴的向各位推荐Scribd, 这是一个非常不错的网站,大家可以在上面在线查找阅读文档资料,比如找一些暂时还没有购买的电子书看,如将展示给大家的<Head First Design Pattern>,下面是它的主页截图:


                                                                                            Fig1 Scribd

      下面是一个在scribd上面找到的《Head First Design Pattern》和《Java Notes》两本书,大家可以体验一下。
《head first design pattern》
    
Read this doc on Scribd: Head First - Design Patterns


《Java Notes》
   
Read this doc on Scribd: java notes

【转帖】韩寒-精准对焦大汉奸,生动捕捉卖国贼,唯有尼康

发表时间: 2008年04月22日 03时30分        
评论/阅读(/)
本文地址: http://qzone.qq.com/blog/622000001-1208807055
“全国头一份反对抵制的活动”,网友对四个昆明网友昨天在家乐福门前的一次行动的“鉴定”。活动发起人马瑞彬对本报记者表示,只是希望让人们看到,还有另一种声音。
  
  反抵制行动原是一句玩笑
  四人都是凯迪网友,帖子昨日下午2点发出,到晚上8点多被锁帖时已有280篇回复,支持意见居多。
  马瑞彬是一名工程师,因为感到被抵制家乐福的短信和太多要求加MSN红心的信息烦得不行,他和妻子开玩笑干脆我们发起一个反抵制家乐福活动好了。玩笑在跟几个朋友电话沟通之后变成了行动。
  昨天上午10点左右,他们来到昆明南屏街家乐福店门口,打出标语:“创建和谐,反对抵制”、“创建和谐环境,迎接08奥运”。
  
  实名发布《倡议书》
  马瑞彬等人的活动显然引起了群众的注意,很多市民围观。他们也向市民派发一份《倡议书》。其中写道:“通过招商引资来促进昆明经济建设,而抵制外企无疑会给别人昆明投资环境不成熟的印象……”最后还署上了四个人的名字。
  他们在现场也遇到了反对的声音。一位老伯对他们怒吼:“打倒汉奸!”赢得不少观众的掌声。这位老伯还拿出自己带的尼康相机,声称要“照下你们发到网上,让全中国人都看看汉奸。”活动中有警察出现,但并没有阻止,只是提醒他们,前一天抵制活动中,有人表达不同观点被人打了,要他们小心。
  为什么要在倡议书上署实名呢?马表示是有朋友建议他们这样做的,主要是为了让人们相信,他们不是家乐福的人。他们也不怕被人打,真要出事就打110报警。要是出现家门被人泼粪这样的极端情况呢?马瑞彬也显得毫不在意:他们就这点伎俩了,有物管呢。马瑞彬说,其实我不少老同学还有朋友也是愤青,相信他们也有通情达理的一面。本报记者 谭人玮  
  
  ■抵制行动  
  国旗堵门 水瓶砸人  
  
  昨天,昆明部分市民抵制家乐福的现场抗议行动进入第三天。200多人在昆明南屏街家乐福店门口抗议,他们用巨幅的五星红旗堵住家乐福仅有的两个入口,并对每一个出入大门的市民表示鄙视。
  17日,200多人聚集在家乐福门口,近一人高的红旗被十几个抗议者竖立着展开,堵住了门口2/3的宽度。众人高呼:“抵制家乐福……”
  领引口号的宋先生说,自己在这里宣传,看到依然有人去家乐福购买东西,非常气愤,“心都是凉的。”所以才用五星红旗来堵住大门。
  3天的现场抗议活动中,基本都是和平的。但也发生过小冲突,16日,一位在现场发表不同意见的市民,被斥“卖国贼”,遭众人推搡,甚至被扔瓶装矿泉水。
  “你们抵制什么家乐福,家乐福里面卖的多半是中国商品……不理性。”朱先生当时大声说,他的声音马上被压制下去。“卖国贼!你说什么!”
  局面几乎失控,一些人将矿泉水瓶扔向他,一些人甚至开始动手去推朱先生。孤立无援的朱先生被愤怒的人群逼到了端仕街对面。“人群散去后还有老伯在骂他。 
  云南信息报供稿  
  
  ■LV声明称从未资助达赖  
  
  在愈演愈烈的抵制LV、抵制家乐福的运动中,一直没有说话的LV终于开口了。昨日,LV公司发表声明称,网络传言失实,他们从未资助达赖集团,声明中称:“无论是本公司还是本公司的主要股东个人,我们从不支持任何与中国政府和中国人民利益相违背的组织与行为。”
  法国首富、LVMH集团CEO伯纳德·阿诺特昨天在接受法国《费加罗报》采访时说,LVMH从未给达赖提供过资金援助。他说,该公司在华业务目前没有受到抵制活动的影响。
  国内外各大媒体,至今还没有任何关于LV公司曾资助达赖的考证报道,只是在报道抵制事件时引用网友说法。目前还不清楚这个传言从何而来。记者使用法文和英文的搜索引擎,尚未发现此前有任何关于LV与达赖有关的报道。 

有一面旗帜叫爱国

    当一个国家内部出现危机时,爱国主义就成了转嫁矛盾的最好工具。

    当一个国家受到外来侮辱、歧视、入侵时,爱国主义也成了让各种不同思想、不同阶层人们团结到一起的最好口号。
 
    爱国主义往往和民族主义混淆不清,如果有某种极具煽动性的思想作怪时,往往容易演变为极端的民族主义,进而那些爱国者也就演变成了暴徒,成为新的"纳粹主义者"或"法西斯主义者"。
   
    正因为"爱国主义"的这面大旗有如此的功效,在奉行“统一思想”的国度里,"爱国"的神经最易受到刺激,爱国也就自然成了一些人不断加以采用的得力工具,而另一方面,当"爱国主义"这面大旗开始飘扬时,怀揣各种目的的人物、组织也会举着这面旗帜谋利己之事。当这面大旗飘扬到一定时候,也极可能出现各种势力之间的冲突、甚至倒戈相向。所以,对于欲采用爱国主义的人来说,每每在让这面大旗刚刚飘起之时,也是最忐忑不安之时,一旦达到自己的某种目的,或显露某个极端倾向时,便会以秋风扫落叶之势将其掩杀。
   
    善假此者,必明其道也!
   


易中天《汉代风云人物-刘邦崛起之谜

八年,刘邦就崛起为开国皇帝!
 

易中天《汉代风云人物》-晁错

晁错之错

 

 

醉翁之意

   此次风潮,名为抵制奥运,实则为西方一些政府借此要挟中国,试图谋取更大的经济利益!
   Their's attentions are not Tibet and Olympic Game, but to mast China's Economy and national security!
   "抵制奥运"的谬论最早是日本右翼分子、东京都知事石原慎太郎于2005年抛出,其理由竟然是基于2004年日本足球队在中国参加亚洲杯赛时“遭到中国球迷攻击”。(中日融冰之时,他受邀参加北京奥运开幕)其后,法轮功开始频繁抛出此言论、一些政客开始一旦不满中国政府在一些国际问题上面的态度和举措时,便抛出"抵制奥运"的言论,有名的如苏丹达尔富问题、近期的西藏问题,而这些问题最终又会都归结到所谓"中国人权堪忧"上面,要求中国改善人权状况,以此给政府施压。 美国每年发布《国别人权报告》谈及中国人权,多也涉及所谓"西藏人权状况"。也就是说,在中国经济高速发展,全民专心发展经济的时期,一些政府、政客始终握住"中国人权"这个假睾丸不放,以为以此可以让中国给自己更多的利益,它高兴了,少用点力,不爽了就用力的捏,比如此次美国的次贷危机爆发之时,美更是将西藏问题上纲上线,通过所谓"西藏决议"。殊不知那是假睾丸,我们最怕有人把自己的假睾丸当成了真的而放松真睾丸的保护!
    在奥运即将召开之际,许多国人认为中国股市应该再度牛市,自从北京时间2005年7月21日23时20分左右央行宣布“人民币升值2%并与美元汇率脱钩”以来,2007年曾一度疯涨,全国一度形成"全民谈股"的迹象,然而随后一度大起大落,而近期股市却并未因为奥运而牛市,反倒低迷。
    在当年中国加入WTO谈判中,金融领域的开放问题为重要议题。根据谈判结果,中国加入WTO 五年后,“取消外资银行经营人民币业务的地域限制。”,但这并不意味着外资可以控股中国银行。我们再来看看银监会两个重要文件《境外金融机构投资入股中资金融机构管理办法》 (很奇怪,在中国人民银行 上面没找到正式文件。),在该文件中规定"单个境外金融机构向中资金融机构投资入股比例不得超过20%", 这也就是为什么在2006年会有花旗等6机构242亿重组广发银行,花旗收购财团包括花旗集团与IBM信贷、中国人寿、国家电网、中信信托、普华投资等,认购了当时重组后的广发行85.5888%的股份,值得注意的是,不是华旗一家认购。各家具体持股比例暂未发现明确报道,也有指其超过"25%"。再看看关于征求《银行控股股东监管办法(征求意见稿)》意见的公告, 该意见稿为2008年3月27日发,其中对控股股东的控股比例是这样规定"直接或间接拥有该银行25%以上表决权股份;",这是否是说,外资也可以呢?因为,它没有明确指明对外资的限制,而且达到"25%"比例是相对容易的,不行也可以再搞个财团,达到51%也是可能。鉴于此,网上对该稿关注颇多
    下面说说为什么对于外资控股中资银行一直以来备受关注。 银行在现代经济中扮演着金融枢纽的作用,绝大多数的经济活动都离不开银行的参与。经济活动的价值正是通过货币流通来发挥作用,所以说,谁控制货币流通,谁就可以影响经济活动。这也是政府通过银行对经济进行调节的原因(银行增减利率就属于调节范畴.)。货币流通既然是价值发挥作用的一个过程,那么参与流通的各方自然需要从中受益,进行价值再分配。银行既然是金融枢纽,自然也可以从中分享几乎每一次货币流通的价值,包括直接的各种服务费以及间接的再投资等等,另外,银行业的成本基本是稳定的,不像工业领域要面临原料等成本增加,经济越发达,货币流通速度越快,那么银行获利也就越多。对于目前的中国来说,正是经济较发达的时期,银行业的大蛋糕有很多人想吃的。
    对于当今世界,国家之间已不再为了争夺领地而指责、战斗,根本目的都是为了资源、为了从别处获取更多的资源。为了获取资源,会采取各种办法。比如支持反政府派别要挟政府,取得一方政策上面的"优惠";更有甚者,直接派兵占领,扶持傀儡政权。当然,对于一些无法占领的国家来说,"要挟"是最常见的手段!
    为什么说"抵制奥运"不是真正目的呢?
    第一,如果一些政府真不希望中国举办奥运,他们完全可以在投票当年反对,向奥委会提议取消中国的资格,但他们为什么没有做?以我愚见,当时他们还未想到"奥运政治化"这一说,当时时机也不成熟,抵制对自己也没任何帮助,更是没有找到借口。
    第二,如果说“抵制奥运”本身,至多就是我们的奥运更清静些,也许有人觉得很爽,显得自己多么的高贵,就像有人准备了一桌丰盛的中国菜,人家原答应要来赴宴,最后以我们家的院子里旺财在外面瞎叫为由,说我们对旺财没有给予厚待,然后不来了。好啊,看你,和旺财还较上劲了!但是,请记住,很多个人觉得很爽,看,那个会没人参加! 但后面的政客和政府在想什么呢?难道也为这点点的事较劲,得意? 不是的, 他们想的是国家的利益有没有通过此事件得到扩大。
    第三, 所谓那些反政府派别,他们无子民,无地盘,无资源,无经济,无市场等,为什么一些政客和政府还要冒着和一个与自己建交的正统政府翻脸的风险来与他们打交道,甚至暗地里支持呢? 难道他们看不出他们翻不起大浪? 他们看得出,他们只是对方获取更多利益的一颗棋子而已。何况,那位老大叔也已高寿,此时不用还有何时?
    第四, 这可棋子分量不轻,虽然成功率极低,但,if true, then China would be surrounded.
    综上,奥运和西藏仅仅是一些政客和政府找到的一面旗帜,而西藏问题是导火索,真真的目的在于经济、国家安全、外交筹码。

    清醒吧...


隐私泄露

    今天打开gmail,看见好多spam,打开看了下,居然发现有封mail的标题栏有我曾经的高中和我的姓名,是个广告!如果这个广告不知道我来自哪里,我的姓名,我自然可以不必在意它,然而,这个广告似乎已经不简单,它准确的知道我曾经就读的一所高中,以及我的姓名,此时,我不得不问,我的信息从何而来? 我在网上从未提及我的高中,仅chinaren里面包含我高中学校信息,另外,同时又知道我的gmail,难道我某位同学泄露,还是从Chinaren上泄露? 似乎也只有这两种可能,因为知道我gmail的人除过chinaren上个人资料里有记录外,其他只有屈指可数的几个同学。通过以上分析,不得不把Chinaren列入嫌疑人之列!但这幕后的泄露,我等如何取得证据?
    
               
                                    Fig 1. 含有我准确信息的广告 橘黄色是抹去的校名,黄色为我的姓名
   
    如果是某同学泄露,我只能沉默,然而,如果是Chinaren,我不得不谴责:
    第一,泄露它人隐私属违法行为。
    第二,如果主动泄露,可认为是利用他人隐私谋利!
    具体该受到何等的法律惩戒,似乎我国法律还未达到那个水平,所以就不谈了。 但是有一点不得不说, 如果真如分析,Chinaren为隐私泄露源,我们完全可以相信:Chinaren不可靠,不值得信赖,更不值得在所谓的"校内地盘"上面完善个人的诸如 大学、院系、宿舍、家乡、高中、行业、固定电话、qq、msn等等信息,没有人希望把自已的这些资料交给一个不可信赖的网站。
    自从FaceBook成功以来,国内很多网站开始大批模仿Facebook, 鼓励大家在网站上使用自己的真实资料,希望大家把现实生活能同步映射到网站上,对此我只能说,成熟的人是不愿意泄露自己实际生活中的隐私的,更不希望把自己真实的社会关系搬上网络暴露给第三方,他们也不会用一个网络来管理维系自己的关系网的(离开现实的网络也无法维系!)。FaceBook的人群主要为学生。 所以,那些希望通过网络来管理关系的人们,在使用之前请三思! 对于网络隐私泄露问题,其实已经有多个案例,较严重者是某记者入狱一案(该记者的email帐户被第三方组织获取)。
    保护隐私不仅仅是为了保护你,也是为了保护你的家人、朋友免受伤害!
    对于我们来说,我的希望有价值的思想尽可能广泛的被传播,隐私应该尽可能的得到保护!

   

大国崛起

大国崛起之帝国春秋--上篇-关税同盟
  
中篇-俾斯麦,德意志统一
     
下篇--世界大战,再次崛起
  



小草,小树

      近日上网,随处可见有网民(此处不能用"网友"二字)在各大视频网站、BBS留言,号召大家在"五一"抵制某超市甲、某超市乙等超市,言,为"爱国"。但比较奇怪的是,这些言论充斥着留言栏而未被"过滤",且有愈演愈烈之势,很怀疑,看了姜瑜:法方应对中国民众意见和情绪进行反思, 终于明白了!看来萨科齐还得抽点时间"进行反思",然后向布什请教下?(因为天气原因,此处省略雪花若干。) 垄断的企业可怕,垄断的思想和一整片网更可怕,它可以让一群人疯狂,让世界不安!
    对这个现象,我要说,我还能说什么呢,读读历史,了解些近代特别是近几十年的历史,你说我还能说什么呢? ...可怜那些金字塔最下面的人们。
    我麻木了,还是我清醒了,偶的心咋像西湖得水一样平静呢?
   
    五一,偶打算去购物,该去哪家超市才不会被骂又经济实惠呢? 毕竟偶还是爱国又经济落后的那种人,知道的朋友告诉啊!Smile

    有一种树,在它很小的时候看起来就是一棵小草,小的时候它还可以随风倒,长大了那就是一颗参天大树...
    
    下面请欣赏<让我们荡起双桨>
  


窦婴与外戚


 

面对这个疯狂的世界

        好日子才刚刚开始,为什么住在西边的兄弟要分家呢?  分家意味着分资源,有人要当一家之主了,要个性独立,但真的有足够的资本独立了吗? 其实,那位老被人当靶打的似乎对一些事情想的天真了些,虽然他的道行确实不浅,人也看起来很面善,很佛相。对于目前的一家之主来说,分家原本可以减轻些负担,但是,分家后,真的能独立?未必,因为所拥有的资源太少,力量还不够,迟早还会被别人说:"兄弟,你要是怕别人欺负你,你就找我,我照着你!"  "大哥,你看我那邻居那么厉害,我打不过他,万一他突然打我怎么办? 你还是住我这吧!"   “但我住着吃住行都不方便啊!”   “不用担心,我全包!”  "好好!"  这样,另一个人就会成功的主导了他的保卫工作,呵呵,你独立了吗?  这种现象在百姓中都是常识, 何况高人怎么看不明白?  也许中了佛的邪。
        对于一家之主来说,谁愿意看到导弹架到家门口? 分家,分啥呢? 和为貴嘛。

         另外,特别奉劝一些外国人士和政府,管好自己事,不要对别人家的事指手画脚,甚至搞小动作,为了主权和国家安全,一个奥运算不了什么!


又突破一个难关

       在这段学习NLP过程中,终于生成了语言识别所需的配置文件(其实要细细的看就会发现那个文件的格式很简单.), 学会了如何识别文本所采用的语言的方法,同时也发现那个软件中所采用的算法抗干扰(有人也称鲁棒性)能力较弱,如果你在中文中夹杂几个英文单词,她就会识别错,现在已经明白,西文与中文构词元素是完全不同的,西文采用字母构词,同样行数的文本,西文统计词频普遍偏高,而中文每个字互不相关,词频非常的低,这样计算数据自然不能相提并论(知道为什么吗?还记得不等式:(a+ c)/(b+c) > a/b, where  0<a<b, c>0吗?就是这个原因。)。这是个问题,要研究下。
       对于我开发的分词程序,我决定先放着, 要让它非常高效的运行估计再没有2个月是达不到的,毕竟我投入了一个月才写出语料预处理,分解,词典管理,从语料中统计信息,分词等,而且分词效果不好,计算效率低, 我采用的是统计方法。与其再投入大量精力和时间自己摸索着开发,贻误时机,不如直接拿别人做好的开源产品直接来用(虽然也有些问题),先让系统运转起来,然后投入精力到最核心的部分,那样才值。
        原来我以为google的搜索的所有技术都是自己开发的,现在才发现,有很多他是购买别的公司的,比如中文处理技术,他是购买http://www.basistech.com 的. 其实,每个巨人的成长都是在许多人的成果基础上发展起来的, 举例略。
        进步了一点点, 路还很长...

n-gram 分词程序

     经过一个月的开发,我的N-gram程序终于可以进行分词了,虽然由于语料库太小导致统计数据不足,分词效果不是很理想,但至少我终于从零开始完成了这个程序的开发,开发了分词程序的基本模块,包括语料预处理,分解,词典管理,从语料中统计信息,分词等功能。 通过开发,我终于初步明白了数据挖掘、自然语言处理、搜索技术中数据处理所面临的一些问题,也明白了自己努力的方向。在大语料方面,我自己开发了一个小方案,但效率却比较低。

     春节,也许还会有新的进展,特别是大语料的处理还需要进一步优化。

     努力...

优化-23697

    经过进一步优化,程序已经可以在23697ms(23.697s)内完成3万多字的转移概率计算,现在可以着手大文本的处理了Hot 程序的优化是不断需要进行的。
   


N-Gram转移概率计算中的若干问题

     这几天晚上,我对2-gram时计算词的转移概率的程序进行了优化,现在已经可以在100秒内完成30000多字的文本的预处理到并计算词长1到4时的转移概率了。当得到这样的测试结果时,自己竟兴奋的久久不能关机入睡眨眼:) 在优化过程中,主要是避免不必要得重复查找,对一些词的查找采用了新的算法,还有就是,log输出实际耗费了大量资源,将log级别设置到error级,可以减少大量的IO操作。

     虽然100秒处理30000多字在时间上可以接受,但那夜在仔细研究后发现,还有较大的优化空间可以提高计算速度。我已经想到一个方法,正在考虑如何较好地实现它。

     为了试验程序在处理较大的语料文本时的速度,我将文本提高到了23万多字,但问题出现了,程序出现了OutOfMemory错误,是创建对象时Heap中空间不足。对这种问题一种办法是在虚拟机中添加参数[-Xms 128m -Xmx 256m]来增大堆内存,但这种做法却不能解决根本问题,当要处理的数据再大一些,比如200万字,还是有可能再次出现OutOfMemory错误的。根本的解决办法是设计新方案,对大文本进行特殊处理,具体方案正在设计之中。

     现在还有一个问题需要解决,当语料库增加新的预料时(语料减少时需要重新计算),如何增量计算?这里面有较多的细节需要处理。

     ...

 

色戒 河蟹

    看电影《色戒》,发现,最后被枪毙的是冲在前面卖命的可怜的6名学生,他们不仅牺牲爱情、尊严、最后还有生命,而我们伟大的,满口"忠诚"的上级领导"老(无)吴"却成功的逃脱了,使实力得到保存,但这个"老吴"到底有多大价值呢?

    哦,和谐,社会一向都是"保大弃弱"?

    再看许霆案
,许霆因为银行系统自身漏洞而从ATM机上取了170多次,才得17.5万,可自己却被送了个“无期徒刑”!笑谈,好像就是说,两个击剑手在赛上比赛,一
个穿了个劣质防护服,不小心被对方刺伤了,另一方就被判为"无期徒刑"。小心啊,以后用银行系统时千万要注意,不要让自己莫名其妙的被套了。顺便,再看看英国:银行机多吐钱 取款人不被追究 ,是不是有意思!

    我在我的家乡已经看到了很多让我这个不懂法的人都认为莫名的审判结果了...

   
此时若不为该案的不公正审判呐喊,中国可能就会多出多个许霆,说不定下一个就是我们自己!不要默然的看待别人的不幸,否则,不幸很可能降临到你自己身上,
并被别人默然对待。如果你可以类比自己为<色戒>中的老吴,那么你也许可逃脱,相反,如果你自认为可类比那些可怜的大学生,那最不幸的人就是
你了...

    每个人都需要惊醒自己!

n-Gram splitter

   While we process chinese, we need to split chinese sentences into chinaese words,a  statistical algorithm is N-Gram split algorithm, which needn't dictionary. 2-gram is very easy to implemente,but the algorithm becomes complex while n > 2. Now, I have implemented the prototype of 2-gram, I will implement the algorithm n-gram while n >2 and HMM algorithm.These algorithms are very useful on finding new words.
   Oyeah!

JavaScrip页面搜索

       昨天,做了个页面搜索的功能,觉得在实际开发中应该比较有用,将代码贴出来供大家参考。将下面的代码拷到文本编辑器中,保存为html,用浏览器打开就可看到实际效果。在Opera, firefox, IE6下测试没问题。
    这个功能的处理过程是:在一个div divCont中放入要显示的选项,给要检索的Label中加入了 forSearch="true"属性(这是个自定义属性),代码根据这个属性取得我们要检索的所有的Label(待检索内容为Label中的文本,我们通过innerHTML取得.),然后用我们要查询的字符串与取得的label内的文本进行比对,当找到含有我们要查询的字符串时,将这个Label背景设为绿色,同时记录第一个找到的 label,检索完毕后,将div divCont的滚动条移到第一条检索结果出。
    如何将这个功能推广到checkbox以外其它上面去呢? 根据上面讲解,我们知道,检索依赖的主要是Label的forSearch="true"
属性和这个Label的innerHTML,所以,我们可以对我们要检索的标签加上forSearch="true"属性,将要检索的内容置于该标签内即可。也就是说,这个检索事实是与标签没有关系的。
    在实际项目中应用时,需要将下面要素添加到页面:
        1.header部分的javascript,添加到你的页面的header部分;
        2.name="words11"的文本框,onclick="searchInfor()的button;
        3.待检索内容的容器<div id="divCont" style="border:1pt #BBCCC0 solid;height:232px;width:40%; overflow: auto; position:absolute"></div>, 这个可选,(但推荐加上,可以看起来比较美观点。)主要是为了实现滚动条效果,如果不加,就会取得整个body下面的指定标签;
        4.getCheckBoxText()函数,这个函数可以传入参数,指定要进行检索的标签类型,默认为label,当传入*时,它将认为整个页面(这一块有点不合理,应该是指定的div下面的所有标签才合适,但目前还没有找到比较好的可以快速获取div下面所有子节点的方法,不止第一层的,如果找到了,可以修改getElementsByAttribute的第一行代码来实现.)的所有加forSearch="true"的标签都要检索。
       5.给你要检索的标签中添加forSearch="true"属性;
       6.将最末尾的javascript代码添加到你的页面的最末尾,千万不要放到header部分,负责divCont会取不到。
       7.美化页面:)
   这样,你的页面就可以具有一个页面搜索功能了.在使用过程中,如果有什么新发现,欢迎分享。


 

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content="HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
    <title>
      JavaScript Search
    </title>
    <script language="JavaScript" type="text/javascript">
//<![CDATA[
    /**
    * get elements by attribute
    */
    function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    var oCurrent;
    var oAttribute;
    for(var i=0; i<arrElements.length; i++){
        oCurrent = arrElements[i];
        oAttribute = oCurrent.getAttribute(strAttributeName);
        if(typeof oAttribute == "string" && oAttribute.length > 0){
            if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
                arrReturnElements.push(oCurrent);
            }
        }
    }
    return arrReturnElements;
    }
    /**
    * Global variables
    */
    var refA ; /* the referance of container div. */
    var scTop; /* the */
    var hits = new Array(); /* hits' array */
    /**
    * clean input box while there is no query words inputed.
    */
    function cleanInput(ref){
      var sflag = generalForm.sflag.value;
      if(sflag == '
-1'){
         ref.value = "";
      }
    }
    /**
    * reset Label'
backcolor to default: white.
    */
    function resetLableBackcolor(){
       if(hits){
         if(hits.length){
          var len = hits.length;
          for(var j = 0; j < len; j++){
             hits[j].style.backgroundColor = "";
          }
         }
       }
    }
    /*
    * initialize input box
    */
    function initInput(ref){
      if(ref.value != '' && ref.value != "输入选项名查询"){
        generalForm.sflag.value = "1";
      } else {
        generalForm.sflag.value = "-1";
      }
      
      if(ref.value == ''){
         ref.value = "输入选项名查询";
         resetLableBackcolor();
         refA.scrollTop = scTop;
      }
      searchInfor();
    }
    /**
    * get all tests to search by attribute forSearch.
    * @param String tag type
    */
    function getCheckBoxText(){
     var olE = refA;    
     /* get all tests to search by attribute forSearch. */
     var tag = "label";
     if(arguments.length == 1){    
     tag = arguments[0];
        
     }
     var texts = getElementsByAttribute(olE, tag, "forSearch", "true");
     return texts;
    }
    /**
    * execute query , set backgroundcolor of hits to green, move scrollbar to the first hit.
    */
    function searchInfor(){
     var words = generalForm.words11.value;
     /* get all tests to search by attribute forSearch. */
     var texts = getCheckBoxText();
     var firstChk;
     var cnt = 0;
     resetLableBackcolor();
     if(texts){
        if(texts.length){
           var len = texts.length;
           var flag = -1;
           var ref ;
           var textShow = "";
           for(var i = 0; i < len; i++){
               ref = texts[i];
               textShow = ref.innerHTML;
               flag = textShow.indexOf(words);
               if(flag > -1){
             /* set hits' backgroundColor to green. */
                  ref.style.backgroundColor = "#99FF66";
                  cnt = cnt + 1;
                  hits.push(ref);
                  if(cnt == 1){
                     firstChk = i; /* recode the first hit.*/
                  }
               }
           }
        }
     }
     refA.scrollTop = scTop + firstChk*20; /* set scrolltop to show the first hit.*/
    }
    //]]>
    </script>
  </head>
  <body leftmargin="30pt" rightmargin="0" topmargin="0" bottommargin="0">
    <form name="generalForm" id="generalForm">
      <input type="hidden" name="sflag" value="-1" />
      <div width="40%" style="vertical-align:top;overflow:hidden;" >
        <table width="40%" border="0" cellpadding="3" cellspacing="0" class="tableList" bordercolor="#CCCCCC" style="border-collapse:collapse">
          <tr>
            <td width="70%">
       & nbsp;      选项:< br>             </td>
            <td align="right" width="20%">
              <input name="words11" type="text" class="lightfont" value="输入选项名查询" onclick="cleanInput(this);" onblur="initInput(this);" />
            </td>
            <td width="10%">
              <input type="button" value="搜索" onclick="searchInfor();" />
            </td>
          </tr>
        </table>
      </div>
      <div id="divCont" style="border:1pt #BBCCC0 solid;height:232px;width:40%; overflow: auto; position:absolute">
        <table width="97%" border="0" align="left" cellpadding="0" cellspacing="0" bordercolor="white" bgcolor="white">
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk2" value="2" /> <label forsearch="true" for="chk2">选项1</label></nobr>< br>             </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk3" value="3" /> <label forsearch="true" for="chk3">选项2Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk4" value="4" /> <label forsearch="true" for="chk4">选项3Text</label></nobr>< br>             </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk5" value="5" /> <label forsearch="true" for="chk5">Lable 4Text4</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk6" value="6" /> <label forsearch="true" for="chk6">选项 5Text6</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk7" value="7" /> <label forsearch="true" for="chk7">选项 7Text中国</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk8" value="8" /> <label forsearch="true" for="chk8">选项8 Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk9" value="9" /> <label forsearch="true" for="chk9">选项9 Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk10" value="10" /> <label forsearch="true" for="chk10">选项10 Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk11" value="11" /> <label forsearch="true" for="chk11">选项11 Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk12" value="12" /> <label forsearch="true" for="chk12">选项12 Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk13" value="13" /> <label forsearch="true" for="chk13">选项13 Text7771</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk14" value="14" /> <label forsearch="true" for="chk14">选项14Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk15" value="15" /> <label forsearch="true" for="chk15">选项15Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk16" value="16" /> <label forsearch="true" for="chk16">选项16Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk17" value="17" /> <label forsearch="true" for="chk17">选项17 Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk18" value="18" /> <label forsearch="true" for="chk18">Lable18 Text1</label></nobr>
            </td>
          </tr>
          <tr width="97%" rowspan="8" bgcolor="white">
            <td>
              <nobr><input name="chk" type="checkbox" id="chk19" value="19" /> <label forsearch="true" for="chk19">Lable19 Text1</label></nobr>
            </td>
          </tr>
        </table>
      </div><script language="JavaScript" type="text/javascript">
//<![CDATA[
      /* get referance of divContainer by id divCont */
      refA = document.getElementById('
divCont');
      if(refA){
        /* store refA'
s scrollTop */    
        scTop = refA.scrollTop;
      } else {
     refA = document.body;
        scTop = refA.scrollTop;
     }
      //]]>
      </script>
    </form>
  </body>
</html>



嫦娥:是月亮偷偷变了脸,还是?

   近来,网上又有人质疑我们嫦娥犯了拼接错误,细看,确实有疑点,我怀疑是处理程序有误,但欧阳解释却不为大家接受。
   我觉得图片在拼接时出错的概率高点,因为从欧阳自远澄清嫦娥首幅月球图像抄袭美国传言上知,"11月26日我国发布的嫦娥首幅月球图像,是从嫦娥一号卫星搭载的CCD立体相机开机工作后获得的第一轨图像开始,对19条卫星轨道的一部分探测图像进行拼接而成的。" 既然是拼接,那自然就涉及到如何定位拼接线,我们知道,月球表面是球面的,拼接出来要得到一个平面图形,此时就存在一个问题:将球面展开放到一个平面上。这个我们都知道,理论上办不到完全展开(可看看拓扑学),所以,拼接线的计算自然会存在误差,只是看误差大小了。我觉得,"19条卫星轨道"有点少,月球多大?直径3467公里,嫦娥的工作轨道为近月点210公里、远月点8600公里,这样还只采样19条的一部分图象,所以这时计算拼接线就更加困难,稍不注意就会让误差增大的。当然,如果是人手工拼接的,那我们就得期望不光要认真,更要提高科技水平了。
    "你看,月亮偷偷变了脸"

Information



 

学习二叉树,研究数据结构的本质

         二叉树的定义(递归定义)[Binary Tree]:它是n(n>=0)个节点的有限集合,当n=0时,它是空集,n<>0时,它由一个根节点和两棵互不相交的子二叉树构成,分别称为左、右子树。
         二叉树有五种基本形态:(1)空集;(2)左子树为空;(3)右子树为空;(4)左右皆为空;(5)左右皆不为空。
         有上面二叉树的定义知,每一个二叉树中的节点有如下特征:(1)至多两个子节点;(2)节点有左右之分;(3)有一个左节点活又节点;(4)没有子节点。
          二叉树与树、有序树的不同点: 二叉树与度数不超过不超过2的树和有序树不同。在有序树中,虽然也有左右之分,但如果一个节点只有一个子节点,就无须区分左右节点。而在二叉树中,即使一个节点也是区分左右的,
         二叉树遍历(Traversal)  二叉树的遍历就是沿着某条搜索路径,一次对树中的每个节点访问且仅访问一次。由二叉树的递归定义知,我们可以用递归方法遍历:
         a. 访问树的根节点(N--root Node);
         b. 遍历根节点的左子树(L--Left);
         c.遍历根节点的右子树(R);
         由于二叉树是“L/N\R” 结构,所以我们可以有如下可能的遍历次序:LNR, LRN; NLR, || NRL; RLN, RNL, 对这个序列进行调整,
LNR, LRN, NLR, ||  RLN, NRL,RNL, 这时我们就会发现这个序列关于 "||"轴对称,也就是一边的是另一边的遍历的倒序。所以,我们只需要研究其中的三种就可以了。依据根节点被访问的次序,我们就可以得到前序遍历NLR(Preorder Traversal), 中序遍历LNR(Inorder Traversal), 后序遍历LRN(Postorder Traversal).
          下面我们来看看二叉树的存储问题。在这里,我们现不研究它如何在硬盘/文件中的存储方式,先研究如何把它用数据结构方式存储到内存中,方便我们的操作。
           二叉树的存储(内存中的结构)对于二叉树,它的结构由以下三个要素构成:(1)节点;(2)节点的连接关系;(3)父节点相同时子节点的左右次序。知道了这三个要素,我们也就知道了我们需要设计出一种结构来保存这三个元素,但此时,我们还要多想一点,这三个元素中哪哪一个是主导元素呢?    是节点?边?左右次序? 这时也许要迷惑了,为什么要想这么多呢?  请注意,虽然它自身在定义时是以节点为主体来定义的,但
二叉树是一种抽象的结构,它不仅仅可以存储节点(一般被用来保存数据),同时也保存了边(一般保存了节点之间的关系,如父子关系。),所以,以何为主体完全可以由自己的实机需要来决定。
        下面我们先假设我们认为主体是节点(这也是数据结构教科书中常常默认的),也就是我们要处理的数据,那我们可以设计出下面的结构,
 /*****************************
*  binary tree node definition
*****************************/
typedef struct binaryNode{
   T *data;                                /* T is the type you stored in node. data is the data in the node.*/
   struct binaryNode *left;       /* left node of parent node.                                                                    */
   struct binaryNode *right;     /* right node of parent node.                                                                 */
}BinaryNode;
       由前面遍历的
递归描述我们可以得到下面的递归遍历算法,
  /*********************
*binarytree.h
**********************/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

/*****************************
*  binary tree node definition
*****************************/
typedef struct binaryNode{
   T *data;                      /* T is the type you stored in node. data is the data in the node.*/
   struct binaryNode *left;      /* left node of root.                                             */
   struct binaryNode *right;     /* right node of root.                                            */
}BinaryNode;

/********************************
* Inorder binary tree traversal.
********************************/
void inorder(BinaryNode* root)
{
   if (root != NULL) {
      inorder(root -> left);                             /* recur left */
      printf("%c ", root -> data);
      inorder(root -> right);                           /* recur right */
   }
}

/*********************************
* Preorder binary tree traversal.
**********************************/

void preorder(BinaryNode* root)
{
   if (root != NULL) {
      printf("%c ", root -> data);
      preorder(root -> left);
      preorder(root -> right);
   }
}

/***********************************
* Postorder binary tree traversal.
***********************************/

void postorder(BinaryNode* root)
{
   if (root != NULL) {
      postorder(root -> left);
      postorder(root -> right);
      printf("%c ", root -> data);
   }
}
  
这个递归遍历算法看起来很简单,但效率不会太高。因为递归调用会倒置没递归一次都需要在栈中保存一个函数指针,而系统的栈的空间大小却是非常有限的(一般是1M到几M),所以,当数据很多时就可能出现stack over flow的错误。所以,这个递归算法通常在小数据量的情形下是可行的,太多的数据时就得考虑用非递归算法了。
        接下来,我们就考虑用非递归方式实现遍历。可参考http://blog.csdn.net/rainer7/archive/2004/08/10/70671.aspx
(未完)