2020-06
5

随机单词扎堆成文

By xrspook @ 14:47:54 归类于: 扮IT

从某本书里随机找单词拼出句子段落。重点是把握好前缀和后缀,前缀要捆绑查找,后缀要关联对应。

Exercise 8: Markov analysis: Write a program to read a text from a file and perform Markov analysis. The result should be a dictionary that maps from prefixes to a collection of possible suffixes. The collection might be a list, tuple, or dictionary; it is up to you to make an appropriate choice. You can test your program with prefix length two, but you should write the program in a way that makes it easy to try other lengths. Add a function to the previous program to generate random text based on the Markov analysis. Here is an example from Emma with prefix length 2: He was very clever, be it sweetness or be angry, ashamed or only amused, at such a stroke. She had never thought of Hannah till you were never meant for me?” “I cannot make speeches, Emma:” he soon cut it all himself. For this example, I left the punctuation attached to the words. The result is almost syntactically correct, but not quite. Semantically, it almost makes sense, but not quite. What happens if you increase the prefix length? Does the random text make more sense? Once your program is working, you might want to try a mash-up: if you combine text from two or more books, the random text you generate will blend the vocabulary and phrases from the sources in interesting ways. Credit: This case study is based on an example from Kernighan and Pike, The Practice of Programming, Addison-Wesley, 1999. You should attempt this exercise before you go on; then you can download my solution from http://thinkpython2.com/code/markov.py. You will also need http://thinkpython2.com/code/emma.txt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import string
import random
from collections import defaultdict
def set_book(fin1,num):
    d = defaultdict(list) # 默认键值为列表
    l = []
    header = ()
    for line in fin1:
        line = line.replace('-', ' ')
        for word in line.rstrip().split(): # 空格换行为分割,单词存入列表
            l.append(word)
    for i in range(len(l)-num): # 以列表序号逐一推进方式建立字典
        header = (l[i-1],) # 元组header为前缀,做键
        for j in range(i,i+num-1):
            header += (l[j],)
            j += 1
        if l[i+num-1] not in d[header]:
            d[header].append(l[i+num-1]) # 列表后缀做键值
    return d
def next(start, book):
    return random.choice(book[start])
fin1 = open('emma.txt', encoding='utf-8')
prefix_num = 3 # 前缀个数
suffix_num = 100 # 后缀个数
book = set_book(fin1,prefix_num)
start = random.choice(list(book.keys())) # 随机前缀开头
final =  start
for i in range(suffix_num): # 截取最后几个单词为前缀找后缀
    final += (next(final[len(final)-prefix_num:], book),) 
for word in final:
    print(word, end=' ')
# reigns alone. A very proper compliment! and then follows the application, 
# which I think, my dear, you said you had a great deal happier if she had no 
# intellectual superiority to make atonement to herself, or frighten those 
# who might hate her into outward respect. She had never seen her look so well, 
# so lovely, so engaging. There was consciousness, animation, and warmth; 
# there was every appearance of its being all in proof of how much he was 
# in love with, how to be able to return! I shall try what I can do. 
# Harriet's features are very delicate, which makes a likeness
2020-06
5

上路

By xrspook @ 8:29:07 归类于: 烂日记

我已经不记得对上一次,写python是什么时候的事了,感觉好遥远,起码一个多月以前。具体时间,我实在记不清了,但是我依然记得,上一次我卡在了哪里,我应该在哪里重新开始。当时我看到的是第14章,但实际上第13章的内容我还没有全部消化掉,前面的那些我花的时间还多一点,后面的那些简直就是囫囵吞枣。第13章最后一道练习题,我觉得自己是无论如何不会去想的了,因为我根本不知道题目到底要我做些什么,之所以这样,大概是因为我的数学学得不好,所以我无法理解题目的意思。但是倒数第二道题目,我觉得自己还是可以做到的。

那是一道从一本书里随机的选择某些单词组成一些可能有意思的句子。随机拼凑句子语意当然乱来,但是如果能保证单词前面和后面相对稳定,那么起码单词组合起来会有某些意思,虽然可能句子的意思还是很无厘头。随着前面后面单词的整体性加强,整个句子的意思也会越发明了。这其实就是一个靠着前缀找后缀的运行模式。开始的时候默认的前缀是两个单词。由前面的两个单词找出后面一个单词,然后再利用后面的两个单词找下一个单词,如此类推。这种方法理论上可以扩展为结合前面N个单词找后面一个单词,然后再撇掉第1个单词,继续找下一个。思路不复杂,但是该用什么实现这个呢?的确是需要点心思的是Think Python那本书没有把所有方法都告诉你,在最终写出这道题目的解答之前,我看过他们的答案,但我觉得自己没看懂,因为里面加入了很多书里之前根本没说过的东西。里面默认带入了很多他们认为你必须知道,所以无需解释的东西。如果这是一本传统的教程,这简直让人日子没法过了!做这本书的习题的时候,我也吐槽过无数次,他们会无底线地超纲。但也正是因为这些说来就来的超纲,让你除了要看这本书以外,你还必须动脑筋,还必须自己手动去搜索解决方法,找那些他们觉得你一定得懂,但实际上他们又没说的东西。最终我写出了我想要的东西,至于结果跟他们的差多远,我没有比较。很多人说python是一种类似于乐高积木的编程,是一个模块叠加一个模块的。但是里面的递归却让我很头晕,所以当参考答案用上全局函数,用上递归的时候,我选择的依然是循环,依然是在主函数里输出那些东西,同时也在一句话里面嵌套了好几个我想做的事。我当然可以把我嵌套的东西单独出来定制一个函数,但是一句话能说清的事情我不想再写几行,虽然在用的时候,多写几行可能会调取得方便一些。现在我之所以不这么干,是因为我要实现的功能暂时来说还很简单。我用一句话就实现了,只不过嵌套了好几个参数而已,Excel的函数也是这么玩的。虽然有些时候,我也会狠狠地吐槽那些几万公里那么长的Excel函数公式。

我从来没想过,自己能在半天之内解决一个之前我曾经想过但是却没想出解决办法的问题。

2020-06
4

Excel动态数组

By xrspook @ 9:55:22 归类于: 烂日记

动态数组是一个非常酷的功能。这个东西据说只有在Microsoft 365里面才能使用,但有些人说,在Office 2019已经具备了这个功能。不同人有不同的版本,而之所以有这样的结果,大概是时间点没有取得一致。动态数组这个东西从搜索的结果看来,大概是从2019年夏天开始。那估计是灰度测试,又或者那称不上是灰度测试,只能说是内部的测试。不知道当时作为新功能试用的用户是否能有那些功能,但起码那个时候我就没听说过,我也没有在其他Excel相关的教程里听说有这种事。动态数组我是近几个月才听说的,第一次看到相关教程的时候,我简直震惊了。看到教程以后,我赶紧去我的Office 365里面测试,发现是没有的。当时微软已经不支持Win7系统了,而我是在Win7上面的Office 365里找那个功能的。当我手动更新了Office 365以后那些动态数组的功能有了!这让我非常喜出望外,因为在微软不支持Win7之前,Office 365里几乎每天都会提示。微软不支持Win7,因为这样,所以Office 365只会更新安全方面的东西。但实际上,他们把功能也更新了,虽然是不声不响的。我不知道他们是怎么想的,有些功能可能是Win7和Win10之间的差异造成的,但有一些纯粹是他们为了让你连系统也花钱换掉。Office 365我是花钱买回来的服务。为什么我花了钱,却不给我服务呢?如果说这是Windows系统的问题,那么为什么连苹果系统你们都支持,却不持支持你们自家的系统呢?

动态数组这个东西挺高端,但实际上在久远的年代,实际上已经可以实现了。很久很久以前,高级搜索就能做到这个功能,但那个时候你顶多只能说那个是数组而不是动态。因为高级搜索只能用一次,下一次再用的话,你得重新复杂的步骤。如果不用高级搜索,你也可以用ctrl+shift+enter的数组结束方式来表达某些公式。长长的一段公式的确能实现动态数组的功能,但是对一般用户来说,门槛太高了,更重要的是,如果以三键数组公式结束,而某个筛选的表又很大的话。Excel的计算速度会大打折扣。如果数据非常多的话,简直会进入一个让人无法忍受的地步。我是一个很懒的人,所以我经常不选择数据的具体行数而直接选择整列,但是在某些公式里,这样的做法是不行的。比如SUMPRODUCT。某段时间我非常喜欢用这个大杀四方的公式,但后来我倾向于选择一些。可以整列选择的组合拳方公式。Microsoft 365引入动态数组公式以后,等于是简化了从前需要很长才能表达的出来的组合拳。实际上我只是稍微的体验过那个东西,这样的动态数组会不会在面对大数据的时候也瘫痪呢?昨天我明白到,原来Microsoft 365在处理方式公式的时候,实际上已经默认把它们当作是数组公式,这个大概就是为了铺开他们的组合拳做准备。

据数Win10将是最后一个Windows系统,以后的升级,再不会在名字上发生改变了,但会一直升级下去。

我觉得以后某天,我们的电脑将变得不再是一个具体的机器,那只是一个面板,真正的数据计算将会在远程的服务器里完成。要做到这个的前提是我们的云端必须非常完备,我们的网速可以支持我们无缝对接,就像虽然那个服务器在千里之外,但实际上我们的感受应该是那东西就在身边。

2020-06
3

默认理解为数组公式

By xrspook @ 10:22:24 归类于: 烂日记

昨天我才发现,我把Excel文件升级完以后,我的搭档没有用过。因为连续好长一段时间,单位的作业时间都超长,每天都在正常办公室下班时间之前,还没结束。通常会折腾到晚上11点多,运气好的话,可能晚上七八点就结束了,反正总的来说,在我升级完我自己的文件以后,一直都只是我一个人使用。我在三台电脑上用过那个文件。我用的是同一个软件打开,用的是Microsoft 365。其中两台电脑是台式机,搭配的是64位的Win7系统,而另外一个是笔记本电脑,搭配的是64位Win10。二者是有区别的,因为某些功能只有在Win10系统才有更新,但到底具体是些什么,至今我还没搞清楚。自从用了Microsoft 365以后,我也说不准那个软件会什么时候给我更新,比如说晚上回到宿舍,单位的作业很晚才结束,我赶着要把数据搞完然后睡觉,但偏偏在那个时候,打开电脑,打开Microsoft 365,却告诉我他正在升级。这种状况很让人抓狂,因为晚上10-11点的时候,单位宿舍的网速可能非常慢。如果Office在那个时候进行升级,而那个安装包又非常大,这将是毁灭性的。所以下次大概我要给软件设置提醒我升级,但不能为我自动升级,应该由我去选择升级时间,这比开电脑就被吓一跳好多了。理论上说Win7系统上的Microsoft 365对应的是2016的功能,Win上的365对应的是2019的功能,但无论是Win7还是Win10,我的365还是会比传统的Office 2016高级那么一点点,至于高级在哪里,我不知道。

Microsoft是个神奇的存在。office软件不知道从什么版本开始都有32跟64位的版本,365貌似给我的安装包都是32位的版本,但是365在不同的Windows系统下面又有其他分支。

大体上我觉得,Win7下的Microsoft 365,应该跟Office 2016差不多吧。但昨天的实际遭遇告诉我,不是那回事。昨天我才发现,在我三台电脑上都开得好好的公式,在我的搭档的电脑上几乎所有地方都显示错误。这不可能吧!一开始,我怀疑是SUMIFS不能在2016上使用,但搜索过后发现那个函数已经在Office 2016上通行了,那到底是什么呢?结果发现原来是我搭档Excel的选项设置里面勾选了引用空单元格时显示错误,为什么居然有这种脑残设定呢?我用了这么多年的office,从来没遇到过这种事,昨天之前我甚至不知道原来还有个这样的设置。把那个勾去掉以后,还有不少公式的地方显示错误,点击那些公式后发现,在我的电脑上没有表示数组公式的地方,在她的电脑上居然默认成了数组公式,那些东西根本不是数组变成了数组,当然会出状况。所以解决办法也很简单,重新把那个公式确定变回普通公式,所有数据都回来了。为什么在不同的电脑上普通公式会自动变成数组公式呢?这个问题之前我也曾经遇到过,但没有让我的公式全部失效,所以我也就没有理会了,但我发现在某些函数前会多了个@的标志,至于那个东西是干什么的,我不知道。

带着这个问题,我立马去搜索。先是去百度,接着是去必应,最后我还是在Google找到了答案12。原来在Microsoft 365里,默认把所有公式都认为是数组公式,虽然没有很明确地标注出来。不是所有函数都会被误解,但一些包含相对变量的函数就会出现这种毛病,比如说公式里大量使用的indirect。这些公式在数组与非数组里理解是不一样的。当我的搭档在她电脑上把数组公式转为普通公式以后,在我的电脑上,发现数组公式前面多了个@,而这个东西。就是为了让老office兼容,在365里面有没有@,效果完全一致,但在老office里面,多了个@,就说明这个不是数组公式。

我不知道为什么office的进化经常会在一些相对引用与绝对引用里纠缠不清,之前有数据透视表的数据源变成绝对引用,搞死所有人。现在又有偷偷地把公式默认为数组公式。让老版本的软件看到一大片数据错误。他们在这个默默改变的的时候,其实完全可以推荐用户另存为别的Excel格式,通过转换格式把公式修正为老版本可以理解。

这个默认数组公式的问题我没见过中文解释,是不是因为谁用Microsoft 365中文版的人还不够多呢?

2020-06
2

降湿

By xrspook @ 10:29:52 归类于: 烂日记

自从有了除湿机以后,我觉得我的夏天需要的不再是空调,而是这个会吹出热风的东西,因为即便从温度上看来升高了,但是实际上人的体感还是很舒服的,而不像在空调下明明只有26℃,但是你依然会冒汗。昨天我看了一个教人家如何挑选除湿机的视频,里面说到了为什么省电的的空调反而除湿效果不好。能效等级高的空调意味着风量很大,所以短时间之内就可以让环境温度降下去,而它的散热片并不需要制造很低的温度,但是风量不大的空调。同样要把温度降下去,就需要制造更低的温度。更低的温度意味着更多的冷凝,所以除湿效果就会好。宿舍的空调,如果我用除湿模式,即便我设定了温度,还会看到实际上温度不断往下降,湿度的确降下去了,但温度也降了很多,而且是个无底洞。无论是在家里还是在宿舍,又或者是在办公室,当我启动除湿模式的时候,空调就会低风量运转。正常情况下,空调会自动选择大功率或者小功率运行,除非你手动设置,否则不会一直都保持在某个风量。但是除湿模式空调会一直都保持在低风量。

我不知道变频空调和非变频空调有什么区别。在家的时候,当我把变频空调调整为除湿档的时候,我感觉很热。之所以这样,大概是因为空调牛逼的地方在于能效等级高,风量大,但是除湿硬把风量压下去,跟低端的空调比起来,空调的制冷其实不非常强,于是就会出现了一个我觉得那个空调不够凉的现象。我没有把电子温湿度计在我开出除湿的时候拿到房间里,估计那个时候我把那个东西拿进去后会发现,温度没有将下去,湿度变化也不太大,因为如果湿度真的降下去,我不会明显地感觉到热。我试过两次,两次都大概只有15-20分钟,我都无可奈何地从除湿重新调整为制冷的。因为我的房间小,而我的空调相对我的房间来说大了不少的,所以只要制冷的启动,我的房间在两分钟之内就可以凉下来。这跟之前我用窗式空调得起码开15分钟才有效果有非常明显的区别。以前用窗机的时候,除湿基本上不起作用,这大概是因为我们通常只会在回南天的时候使用除湿。那个时候温度低,除湿的时候基本上是一个制热的效果,当时的空调是单冷的制热非常不好。当温度高的时候,压缩机制冷从而让环境的空气液化成水,但是如果温度只有十几度,效果当然不好,因为空调的极限制冷大概就只有16℃左右。我不知道在低温的情况下除湿机的表现如何,但我记得在梅雨季节,检验室用的那台除湿机还是可以非常畅快运转的,可以不断地把水抽出来。如果可以再选一次的话,大概我不会选格力,大概我会选一台松下或者德业。我不知道德业的售后如何,但是如果松下的机子坏了,估计配件都不便宜。不过话说回来,单位的东西,无论多贵的售后,他们还是会去做,又或者他们觉得不划算,会直接再买一台新的,当然前提是在有必要的时候。

宿舍的德业可以wifi连接网络,然后用手机app控制,所以昨晚我设定了3个定时开关(不知道最多能搞多少个呢?),每3小时开机一次,15分钟后自动关机,这样一来我就不需要整完都开着了!

© 2004 - 2026 我的天 | Theme by xrspook | Power by WordPress