If you look at the code, it's more like "write an ARFF file parser in 40 lines" and "do a NB classifier with add-one smoothing in 10 lines".
If you use a better-adapted input format and code things more concisely, you'd probably end up with two functions of 3-4 lines each; conversely, if you wanted to do things properly, you'd separate out ARFF file parsing and the Naive Bayes functionality.
All in all, the blog post wouldn't make me want to recommend their group for prospective (undergrad or graduate) students.
Seriously. I think you could golf NB into 2 lines pretty sensibly once you've got the data in. It's really just compute two histograms, multiply, and maximize.
And no fear of namespace collisions, or of introducing additional symbols.
Want to match Math in size when implementing algorithms? Use APL. Want to avoid adding additional symbols all the time? Use J/K/etc (APL descendants). Want to avoid namespace collisions? Welcome to Java.Sun.Com.Math.Oh.For.Effing.Sake.FactoryInterfaceBuilder
This is an interesting point - I suppose it shows how sophisticated the language of mathematics is.
I think its not perhaps the 50 lines that matter though (most of this is just effectively defining what the mathematical symbols and grammar mean), but the one line, which can tell you how everything relates together very effectively..... this is what the python version misses to me...