以前种的树

这几天又听马飞的《种树》(链接),摩登天空7中的一首歌,主打是宋冬野的《董小姐》的那张,2012年底时发行的。想来,那时听这张碟的大一新生们,现在应该在忙着找实习、写论文了。这首歌是这么开头的:“大哉我中华 飞扬自由魂 民主把国建 科学求进步”,伴随着私塾先生的说教,稚嫩的童音拉长着声音重复着,接着声音淡出。在这个引入的、其实来自电影白鹿原的段落里,有四个特别理想化的词,“中华”、“自由”、“民主”、“科学”,理想化、复杂又矛盾,组合在一起时高深到不想展开。

谈生活、或者说学术生活吧,一位很好的朋友、不想在这里说名字,说:「有限的知识的唯一作用就是让我们知道自己有多无知,以不至于轻轻易易就达到了认知的边界,为假想的极限而疯狂。」知识是一只庞然巨物,我们短短的人生只是重复着盲人摸象的动作。也许运气好,戴的眼镜(使用的方法)合适,我们能摸到鱼鳞、虾须、蛇身、鹰爪、狗鼻、牛嘴、鹿角。可是,谁能在一开始就(甚至是最后能)知道可能是一只龙呢。

这种对提取认知的过程几近苛刻的体验,好像和“种树”没什么关系,种树相比起来更看得见、摸得着,毕竟马飞的《种树》仅仅是一首——据360百科所说——歌词风趣幽默、听过的人无不被歌里土的掉渣的长安话逗笑、然后勾起浓浓的乡愁的歌。谈歌曲的批判性似乎是一种禁忌。

可是我觉得两者是有交集的。用大量研究、尝试、思索、讨论、监督、改进做铺垫而获得的认知,就好像树上有可能会结的果。然而树不好栽,结好果更难。假设说,其实在《种树》这首歌里,马飞讲述的并不是孩子们三月某一天种树这件事,而是长辈们和孩子们对于“中华”、“自由”、“民主”、“科学”的憧憬,以及在实现这条憧憬的路上的无知与自大,也许觉得:只要有老师带领,有校长动员,有生活委员/大红花的奖励,再按部就班地挖坑、填土、浇水、上肥,至于目的——种成树、为四化做贡献——就可以达到。

这段让我印象深刻的歌词是这样的:

「挖个坑吧,把咱的苗苗一个一个的埋下。
填上土吧,不要叫风把咱吹趴下。
浇点水吧, 让咱的苗苗好好的长呀。
上点肥吧,这就是咱的希望呀。」

马飞也许察觉到了,这种机械化地把“咱的苗苗一个一个地埋下”并认为“这就是咱的希望呀”的做法过于乐观。(其实这段话在语言学上有一个很有趣的点,第二行的「咱」在这个语用里几乎可以理解为一个“包含所有人称的人称代词”;如果是更为悲观的人,也许在这段里甚至可以读出一个集体活埋那些乐观的后辈的场景。)紧接着的歌词是这样的:

「我们就是种呀种!管它将来树上结的是啥;
我们就是种呀种!管它将来能不能发芽;
我们就是种呀种;
我们就是种呀种呀种;
咱都是怂管娃。」(注:怂管娃,不管事、混日子、不听话的孩子)

上面这段里,马飞描述了这些乐观的人们在执行时的心理状况。有这样“我们就是种呀种”想法的人,可能不止孩子、也可能是带领孩子的老师、也可能是正在动员的校长。有项目就要一定要执行,怎么做没所谓,但一定要执行到位,平时可以不管事、混日子、不听话,但是项目在,人就在,事就在,至于结果,只要有交代就可以了。

这其实非常写实。一个异常有效率的、几乎没有什么成本的「让某件事得以执行」的系统,并且将行动者的责任与参与度都降到最低,也完全缺失「让特定事情不被执行的机制」。

可能有人觉得,只要引入了「竞争」,一切都会自动变得有效率。马飞,不知道是有心还是无心,为当成果没有办法被合理考量时的情况,写下了下面这段歌词:

「就在班主任的带领下,我们光荣的种完了它。
老师说:你就等着校长把咱夸。
这次咱班种树种的【最快】,把其他娃们全撇下。
回家以后一人一朵大红花。」

 

统计文章里动词词干使用频率

想知道哪些是斯瓦希里语中出现频率最高的动词词干,做一个最常用动词词干列表。方法是:一个词一个词地阅读一篇文章,检测这个词是否是动词的变形(之前的部分是否符合特定变形规则,在脚本里面被称为 pre-set),如果是的话就放进一个字典里。最后统计一下字典里最常出现的那些动词词干。

需要动词词干的列表

[code language=”python”]
# prepare the pre-set
# affirmative
pre1=[‘a’, ‘i’, ‘ki’, ‘ku’, ‘li’, ‘m’, ‘mu’, ‘ni’, ‘pa’, ‘tu’, ‘u’, ‘vi’, ‘wa’, ‘ya’, ‘zi’]
pre2=[‘ka’, ‘ki’, ‘li’, ‘me’, ‘mesha’, ‘na’, ‘ta’]
pre3=[‘i’, ‘ki’, ‘ku’, ‘li’, ‘m’, ‘mu’, ‘mw’, ‘ni’, ‘pa’, ‘tu’, ‘u’, ‘vi’, ‘wa’, ‘ya’, ‘zi’]
preS1=set()
for p1 in pre1:
for p2 in pre2:
preS1.add(p1+p2)
for p3 in pre3:
preS1.add(p1+p2+p3)
for p3 in pre3:
preS1.add("hu")
preS1.add("ku")
preS1.add("hu"+p3)
preS1.add("ku"+p3)
# negative present
pre1=[‘ha’, ‘hai’, ‘hai’, ‘haki’, ‘haku’, ‘haku’, ‘hali’, ‘ham’, ‘hamu’, ‘hapa’, ‘hatu’, ‘hau’, ‘havi’, ‘hawa’, ‘hawa’, ‘haya’, ‘hazi’, ‘hu’, ‘si’]
pre2=[‘i’, ‘ki’, ‘ku’, ‘li’, ‘m’, ‘mu’, ‘mw’, ‘ni’, ‘pa’, ‘tu’, ‘u’, ‘vi’, ‘wa’, ‘ya’, ‘zi’]
preS2=set()
for p1 in pre1:
preS2.add(p1)
for p2 in pre2:
preS2.add(p1+p2)
# if subjuntive
pre1=[‘a’, ‘i’, ‘ki’, ‘ku’, ‘li’, ‘m’, ‘mu’, ‘ni’, ‘pa’, ‘tu’, ‘u’, ‘vi’, ‘wa’, ‘ya’, ‘zi’]
pre2=[‘si’]
pre3=[‘i’, ‘ki’, ‘ku’, ‘li’, ‘m’, ‘mu’, ‘mw’, ‘ni’, ‘pa’, ‘tu’, ‘u’, ‘vi’, ‘wa’, ‘ya’, ‘zi’]
preS3=set()
for p1 in pre1:
preS3.add(p1)
for p2 in pre2:
preS3.add(p1+p2)
for p3 in pre3:
preS3.add(p1+p3)
preS3.add(p1+p2+p3)

# other negatives
pre1=[‘ha’, ‘hai’, ‘hai’, ‘haki’, ‘haku’, ‘haku’, ‘hali’, ‘ham’, ‘hamu’, ‘hapa’, ‘hatu’, ‘hau’, ‘havi’, ‘hawa’, ‘hawa’, ‘haya’, ‘hazi’, ‘hu’, ‘si’]
pre2=[‘ja’, ‘ku’, ‘ta’]
pre3=[‘i’, ‘ki’, ‘ku’, ‘li’, ‘m’, ‘mu’, ‘mw’, ‘ni’, ‘pa’, ‘tu’, ‘u’, ‘vi’, ‘wa’, ‘ya’, ‘zi’]
preS4=set()
for p1 in pre1:
for p2 in pre2:
preS4.add(p1+p2)
for p3 in pre3:
preS4.add(p1+p2+p3)

# prepare verb dictionary and the document

verbD={}

mydict=open("verb_stems.txt")
dictF=mydict.read()
dict=dictF.split()

myfile=open("1.txt")
line=myfile.readline()
# junk words, which are most likely nouns or adverbs
junk=set([‘hakimu’, ‘kijamii’, ‘kitaalamu’, ‘mbali’, ‘mradi’, ‘mshauri’, ‘mstaafu’, ‘mujibu’, ‘taasisi’, ‘unyonge’, ‘upande’, ‘ushahidi’, ‘utalii’, ‘utamaduni’, ‘vipande’, ‘wachache’, ‘wajibu’, ‘washauri’, ‘washiriki’, ‘wataalamu’, ‘watalii’])
# processing the words

def ongeza():
if l not in verbD.keys():
verbD[l]=1
elif l in verbD.keys():
verbD[l]+=1
print l+" in "+word

while line:
words=line.split()
for word in words:
stop=1
word=word.strip(".,!?").lower()
if word not in junk:
for l in dict:
# if the verb stem located as the end of the word, in affirmative
if word.rfind(l)>0 and word.rfind(l)+len(l)==len(word) and word[:word.rfind(l)] in preS1 and stop:
ongeza()
stop=0
# if the verb stem located as the end of the word, in negative present
lN=l[:-1]+l[-1].replace("a","i")
if word.rfind(lN)>0 and word.rfind(lN)+len(lN)==len(word) and word[:word.rfind(lN)] in preS2 and stop:
ongeza()
stop=0
# if subjunctive
lS=l[:-1]+l[-1].replace("a","e")
if word.rfind(lS)>0 and word.rfind(lS)+len(lS)==len(word) and word[:word.rfind(lS)] in preS3 and stop:
ongeza()
stop=0
# if the verb stem located as the end of the word, in negative
if word.rfind(l)>0 and word.rfind(l)+len(l)==len(word) and word[:word.rfind(l)] in preS4 and stop:
ongeza()
stop=0
line=myfile.readline()
#print verbD
for key in sorted(verbD.keys()):
print key+": "+str(verbD[key])
[/code]

结果(截选):
[code]
choshwa: 3
chukua: 3
daiwa: 2
dumu: 2
eleza: 10
elezea: 6
endekeza: 1
endelea: 8
endeleza: 4
endesha: 2
epuka: 1
epusha: 1
fafanua: 1
fahamisha: 1
fahamu: 1
faidika: 1
fanya: 7
[/code]