Shell Script

定理:如果需要经常重复做某一项工作,那么就一定有让电脑自动完成的方法。

国际标准时间2月1日,又到了每月初提供最新下载包的时候了。今天一犯懒,写了个 Shell Script,扫描指定目录下当月新增的剧本,打包,然后移动到相应的目录,再把该目录打包。整个脚本运行起来不到1分钟,就把每月需要10分钟左右的手工工作做完了,而且在仔细审查了代码之后,可以肯定不会出错。 表情

当前目录分布情况:pdf 和 txt 目录包含每月产生的剧本,同级 script 目录下的 PDF Format 和 TXT Format 包含所有的剧本,按照编号(1□□□、2□□□等等)分出子目录。脚本的原理就是先把当月的文件打包,然后按字母顺序排列组合出可能的文件名集,若该类文件名存在,则移至相应的目录,并把该目录打包。仅此而已。注意:文件名第二位有字母的需要先处理。比如7h*若留在后面,就会与更广泛的7*所吻合而被提前处理掉。

帖出来用于处理 pdf 格式的脚本 zippdf,处理 txt 的大同小异。有在 Unix 下面玩儿的朋友欢迎交流经验。

#!/bin/sh
# Go to monthly directory.
cd pdf/
# Remove old zips, if there is any.
rm -f *.zip
# Pack this month's files.
zip newp *
# Go through from 7a* to 7z*
for findex in a b c d e f g h i j k l m n o p q r s t u v w x y z;
do
filename="7$findex*.pdf"
dirname="7""$findex""00p"
# If the pattern matches:
if ls $filename
then
# Move files to the corresponding directory
mv -f ./$filename "$HOME/script/PDF Format/$dirname/"
cd "$HOME/script/PDF Format/$dirname/"
# Pack this directory
zip -r "$HOME/pdf/""$dirname"".zip" *
cd "$HOME/pdf/"
fi
done
# Go through from 9a* to 9z*
for findex in a b c d e f g h i j k l m n o p q r s t u v w x y z;
do
filename="9$findex*.pdf"
dirname="9""$findex""00p"
# If the pattern matches:
if ls $filename
then
# Move files to the corresponding directory
mv -f ./$filename "$HOME/script/PDF Format/$dirname/"
cd "$HOME/script/PDF Format/$dirname/"
# Pack this directory
zip -r "$HOME/pdf/""$dirname"".zip" *
cd "$HOME/pdf/"
fi
done
findex=1
# Go through from 1* to 9*
while [ $findex -le 9 ]
do
filename="$findex*.pdf"
dirname="$findex""000p"
# If the pattern matches:
if ls $filename
then
# Move files to the corresponding directory
mv -f ./$filename "$HOME/script/PDF Format/$dirname/"
cd "$HOME/script/PDF Format/$dirname/"
# Pack this directory
zip -r "$HOME/pdf/""$dirname"".zip" *
cd "$HOME/pdf/"
fi
findex=`expr $findex + 1`
done

“人言可畏”

不要误会,实在是想不出更好的词来形容这个话题了,与“人言可畏”的真正含义毫无关系。

这些天和网友金缘通电子邮件,谈到一个问题,就是剧本的录入。金缘问:“是怎么录入啊?不会是一个一个字的往里敲吧!我没有接触过这方面工作,但是别人建网站时,大量的资料是用扫描仪扫进去,再用汉字识别软件把它转换成文字文件,再使用语音软件边念边校对。您们也是这样做的吗?”

这里涉及同一类的两个问题:文字识别和文字阅读。在文字阅读方面,现在的技术已经算是比较成熟了,至少在小豆子接触的中、英两种文字的文字到语音的程序,都是很流畅的(除了个别特殊发音的地方有时会念错)。而在文字识别方面,英文的识别已经较以前有了很大进步了。但由于中文比英文在字形上复杂得多,中文的光学字符识别(OCR)技术,小豆子认为离成熟尚早——尤其是对付像剧本这样有着特殊情况的输入源。

首先,为了提高识别的正确率,需要让程序“学”很多词句的组合,在一个地方看不清的时候,就要程序根据上下文来判断当前所缺字符字形与哪些字相似、此处该出现的词的词性以及其概率,然后做出选择。而由于剧本文学与普通的文字有着很多不同,如果按照普通文档来识别,错误率还是很高的。

其次,由于老书是繁体字,加上年头久远,纸质发黄,哪里是字哪里是纸分得不是那么明显,若强行采用黑白扫描,字中间就可能会是一团漆黑,使得电脑更难辨认。尤其是中文字库之大,形似而差几笔的字很多。所以这也是老剧本识别率低的一个原因。

但这也不是说敲字就保证没有错别字,只是这样产生的错别字更容易找出来(特指拼音,五笔字型或其他按字形输入的输入法,所产生的错别字有些类似于 OCR 的结果)。比如“已然”,如果用扫描,可能被扫描成“己然”,而若校对时候没有仔细看,就会被忽略掉;拼音如果拼错了,拼错的字在字形上与正确的字有很大差别,所以比较容易看出来。虽然直接敲字在录入的时候可能会费一些时间,但是在整理、校对和格式化的时候却能够省时。因此,两种方法只能说各有利弊而已。

参加录入剧本的朋友很多,在校对的时候,能够看出哪些是用拼音敲的,哪些是用扫描仪或五笔录入的。条条大路通罗马,这都是数字化的手段,不存在一定要使用什么录入方法的问题。当然不可否认,对于一些页面干净的新书,有些 OCR 程序还是有很高识别率的。

皇兄的二次校对对那些形似而实非的字是很敏感的,最近抓住一个“隹”,应为“佳”,实在厉害!

人的思想、语言比电脑要复杂得多得多了,在文字、语音识别、文字之间的翻译等等与人言有关的工作上,电脑永远也不能代替人(所以您若是位翻译,大可不必因为某个号称更强的翻译软件的出现而担心会丢掉饭碗)。电脑以及为人工智能而奋斗的人们,应该是最能体会“人言可畏”的吧。 表情

垃圾邮件

今天收到一封垃圾邮件——其实每天都会收到非常多的垃圾,既然拿到这里来说自然和戏考有关了。信件内容如下:

There appears to be a problem on this page of your site.
On page http://www.xikao.com/content/header.htm
when you click on “编号”,
the link to http://www.xikao.com/net/number.htm
gives the error: Not found.

As recommended by the Robot Guidelines, this email is to explain our robot’s visit to your site, and to let you know about one of the problems we found. We don’t store or publish the content of your pages, but rather use the link information to update our map of the World Wide Web.

Are these reports helpful? I’d love some feedback. If you prefer not to receive these occasional error notices please let me know.

Roy Bryant

呵呵,下面自然是他们的网站啦,贩卖网站检查工具的。很“友好”是吧。他们当然希望有反馈信息啦,这样他们就能继续发垃圾。真是胡说八道,戏考网站上压根儿就没有那个 /net/number.htm 的链接,编号的目录是在 /content/number.htm 下面。混淆视听。骗子越来越鬼了,但只要坚持原则,就不会上当了。 表情