一個關於牌九與概率的統計

最後還是動用了perl才解決的問題,牌九共32張牌,其中11對文子,10個武子,文子是重複的,武子不重複,排列組合是32×31/2=496,在按實際牌統計中,要注意11對文子牌的出概率是1/32×1/31,而不是2/32×1/31,或者說(2/32×1/31)/2 按牌面排 按概率排 Sheet 1: 按牌面排 至尊寶 1*1 1 0.002016129032258 天拖寶 2*1/2 1 0.002016129032258 地拖寶 2*1/2 1 0.002016129032258 人拖寶 2*1/2 1 0.002016129032258 鵝拖寶 2*1/2 1 0.002016129032258 梅拖寶 2*1/2 1 0.002016129032258…

超粗糙人工智能語義分析--兼賞perl語言的優美

人工智能?當然,我是「人」,我花了「工」,怎麼就不是「人工」智能了?我覺得人類真的很奇怪,很多時候,明明是「人工」的卻一定要說不是,好似人工很丟臉似的;有時又反過來,人工又值錢起來。就拿「試管嬰兒」來說吧,人們往往把他們叫做「人工授精」,拜託,全人類百分之九十九點九九都是人工授精的好不好!衹有試管嬰兒才是通過器械完成的,這不是本末倒置是什麼? 好了,說正題,我的人工智能。 我最近迷上了一本書——《清明上河圖密碼》。其實,我以前看過這本書的第一冊和第二冊,那是很久以前的事了吧,看過也就忘了。最近董在他的朋友圈貼出了第五冊的照片,才知道原來已經出到第五冊了。於是就從中國的亞馬遜買了Kindle電子書來看,從看到朋友圈到買好書,不超過五分鐘,真是很方便,衹是中國的亞馬遜賬號和美國的不通用,你得準備二個Kindle。 從第三冊開始看的,一口氣看了三本,又回過去再看了一遍第一冊和第二冊,實在是相當好看,也相當燒腦,現在就等第六冊的大結局了。 這本書從第一冊起,就號稱「全圖824個人物逐一復活」,你想想,824個人物,還包括不在圖裡出現的人物,那加在一起得有多少名姓啊? 好奇的我,打算把那些名姓整理出來。大家知道,我是玩perl的,Practical Extraction and Reporting Language,「實用的提取和報告語言」?那不是正好?我要把人名從書裡提取出來,並且生成一個報告,perl是幹這活最好的工具。 首先我要有一個全文文本,我還沒打算在kindle前放個攝像頭讓電腦自己去讀了再識別,同時還得做個機械手來翻頁,我說過了,這是「超粗糙」「人工」智能。 當然是把Kindle的文件整出來,變成文本格式啦。不要問我怎麼把版權保護的azw3文件變成文本文件,我不會告訴你的;同時也不要向我索取這個文本,我也不會給你的。 我最早的思路是這樣的,找出全文所有的二字三字四字五字重複的部分來,從第一個字讀起,在全文搜索,但轉念一想,這種窮舉法太恐怖了,從第一個字起,先把第一第二個字在全文搜一遍,再把第一第二第三乃至第四第五一分五次全文搜索,然後從第二個字起,五冊書1816631個字,就得搜上千萬次,上千萬次乘以181萬,媽呀,不行,工作量太大了。 第二步想到的,是照中國姓氏來查,是人總得有姓吧,有姓總得是個中國姓吧?於是我去維基選用了增補的《百家姓》,共計單姓444個,雙姓60個。 這樣就簡單多了,五百乘以一百八十萬再乘以四(從二個字的名字到五個字的),沒多少了。 怎麼找呢?出現一個姓,就查後面一個二個三個四個字?好像可以更簡單的。 於是我又想到一個辦法,大家數情況下,人名都會是個主語,而且出現在句子的最前頭,比如「王小二推開門……」這樣的句子,那我衹要查每句話的第一個字是不是一個姓氏不就行了?是的話,再看接下的字,不是就直接忽略過去。 那麼,要是出現「門沒有鎖,王小二推開門……」這樣的句子怎麼辦呢?很簡單,把所有的斷句都當作單句不就成了,也就是說不管是在逗號後面、分號後面、問號感嘆號還是別的符號後面,一律當作句首好了。 這時,perl語言的優美就體現出來了,看圖。 你不用去管第三第四句,而第一句,就是把所有的其它符號都當作句號來對待,第二句是移除所有的引號。你試想一下,用word做替換要多少操作多少時候?而在perl裡,就是這麼奇奇怪怪的二句就夠了。 具體的編程,我就不說了,簡單的思路是這樣的:如果句首是姓氏,把姓氏加上後面一二三四字的組合記個數,當重複的次數超過一定值的時候,就認為這是個姓名,再看圖。 圖中的10就是我設定的一個值,當它超過10的時候,就顯示出來。這段程序也很優美,而且超經典,它叫「hash的列表」,是衹有perl才能簡單完成的操作。 結果的顯示很簡單,就是每個被「認作」姓名的組合在句首出現了多少次,這時發現了象下圖那樣的東西。 「都」是一個姓,全書中沒有姓「都」的人,然而作者的行文中有大量的「都是」、「都要」之類的詞語,那很簡單,既然沒有姓「都」的,那把「都」從我的《百家姓》去掉好了。為了防止第六本中出現姓「都」的來,我不是直接去掉,而是設了個被「去掉」的姓的列表,原來的不去動它,就像下圖。 但是有的姓,不能去掉,就像下面這張圖,「冷著臉」明顯不是個姓名,但「冷緗」的確是書中的人物,那就衹能保留下來,再手工剔除。 還有一個問題,看圖。 「梁興」是書中的一個人物,然而「梁興看」、「梁興想」分想出現了十幾次,都被噹噹作人名了,於是我就把這些不常會在姓名中出現的動詞去掉了。再見識一次perl的優美吧,就是下面這麼簡簡單單的一句話,就完成了。 程序就這麼編完了,在總耗時六秒的運算中,程序找出了819位符合「假設」的人名。 還有一個小小的毛病,看圖。 這裡的六個人其實衹有三個人,所有的雙名都有這個問題存在,其實衹要再比對一次就可以了,這個不難,但還是沒法判斷出「周大」與「周大哥」是不是同一個人,所以我乾脆就手工挑揀了。…

Perl XML FAQ

Perl XML FAQ Version 1.1中文版 by Jonathan Eisenzopf由邵宛澍翻譯 Credits 感謝Clark Cooper, Matthew Sergeant, Enno Derksen, Ken MacLeod, Rob Cameron, Asakura Hiroshi以及Wanshu Shao(邵宛澍)對此FAQ作出的奉獻. Overview 這份FAQ包含了通過Perl使用及操作XML的信息. 如果有任何的糾錯或添加信息要求,請直接發電子郵件給 eisen@pobox.com. 這份FAQ可以在http://www.perlxml.com/faq/perl-xml-faq.html找到. Asakura Hiroshi為這份FAQ建立了一個日語譯文,可以在http://db-www.aist-nara.ac.jp/xml/perl-xml-faq-j.html找到, Wanshu…

Perl and Unicode

Perl and Unicode I continued reviewing Perl this morning; more and more things came back. I read the Chapter 15 Unicode of O’Reeilly Programming Perl and found some useful links.…