教电脑读书列算式

数论是一门学科,也是我的人生。有人把酒论英雄,我用数字描天下。
打印 (被阅读 次)

一个人的时间和精力都是有限的,即使用上一生的时光,也读不了几万本书。在当今信息时代,谁还能掌握全部知识?人不行,计算机却行。计算机是什么?一堆0和1的组合而已。在既定指令下快速运行,却相当愚钝:什么都不认识,更不会思考;唯一的优点就是速度快。

读书的第一步是单字处理。先要存储一部字典,即一些单字的集合。一个单字代表一种意义,所有同义词组成一个意义集:反义词用余集表示。与其它集合的近义词,用括号标明使用情形:XXX{X1(%,。。。), X2(%,。。。),。。。Xn(%,。。。),Not(反义词列表)} ;其中,XXX是词头;Xn是同义词名,百分号标明同义的近似程度,后面还得指明使用情形。

读到一个单字(以空格分开)时,拼写检查可这样进行:与字典中的单字集头对照,找拼写已有的那个;字典中没有的,用最接近的那个单字替换;全大写的单字,原样保留。第二步是单字连接的合规检查;包括词性标记、关键词还是辅助词、固定搭配(成语)还是自创新语,相邻的两个单字放在一起的准许度有多大?第三步是检查标点符号、划分句子。一个句子,就是两个句点之间的单字序列。顿号、逗号、分号都是表示并列,其间的所有单字(用空格分隔)的集合设为一个基本命题p(用内存中的起始、终止地此表示);冒号表示对前段的解释或者接下来的行为列举;解释时,前后两个字集意义上要相同或近似度超过一定程度,比如90%。

怎么判定一个句子,即两个句点之内、不同逗点对之间的原子命题是不是自相矛盾呢?首先查看关键字不记介词、冠词)。如果两个原子命题的关键字无交集,自然就是无矛盾;如果关键字出现反义词,肯定就是有矛盾。如果关键字的相近度达90%以上也算通过;否则,就要列出逻辑表达式,按照布尔代数求解,以得出相容的解为准。

段落用回车符分隔;一个段落包含意义相近、不互相矛盾的一个或多个句子。怎么判定两个句子的无矛盾性呢?把各个句子当作不同的合式公式,设置其值为1,按布尔方程解之即可。

一篇文章包含一个或多个段落。把每个段落看成一个合式公式集,再按布尔方程式去检查一遍各原子命题之间的无矛盾性。这样,诡辩的五毛们(本人深恶痛绝的一群人)便无可遁形;巧如簧舌的讼棍也无地自容。

假设一切矛盾全无、大家都按常理出牌,如何归纳文章的中心思想呢?首先统计关键字出现的频率,把它们按频率由高到低排序。再查出每个关键字的谓词(不仅仅是谓语),以及它自身的性质、所关联的对象及其性质,可能还有对象所关联(用谓词)的第二层次的对象及其性质,层层深挖,逻辑关系便可显露无遗;再写出几个句子,那是几秒钟的事。

让计算机解方程,人类已经做得很好了:只要你输入函数或方程式,现有的软件Mathematica或MATLAB或 Maple都能很快解答。但还有一个问题要解决,那就是列算式:现有软件都不会自动生成方程式。1964年,Daniel G. Bobrow在他的博士论文中设计的程序STUDENT可以把一些简单的文字题化为一系列的方程,并且求解;但到现在,五十多年过去了,在这方面还是没有什么进展。(甚至很多人,读了几十年书,都不会列方程式!)

给出一堆变量,还有几个运算符,人用手写出来一个式子是容易的:只要你会写微分、积分、求和的sigma、求积的Pi就可以了。可是计算机不认识!现有的机器只会算数值,不认识变量X;你必须先给它赋值,存储在某个位置,它才能做计算。再强大的编译器,都不接受不合乎其语法规则的、在其编辑器中打出来的句子,更别说手写的了!

人类当真无能为力了?不是说Everything is figure-out-able吗?各位过客就等待我的欧氏编译器吧,还有能够解人风情的机器呢!

登录后才可评论.