DevDays Austin: Eric Jones on Python

This is content taken from the 2009 StackOverflow DevDays conference in Austin, Tx.

This presentation could actually be split into two different talks. Unfortunately, Eric only had fifty minutes to cover both Python and NumPy.

The Python part of Eric's talk dealt with a very elegantly written spell check example written by Peter Norvig (copied below).

This Python code not only finds spelling errors in a given input file, it also guesses what you intended to type and suggests correctly spelled words to replace the erroneous word.

Here is the code that was discussed in Eric's talk so you can follow along with the audio.

import re, collections

def words(text): return re.findall('[a-z]+', text.lower()) 

def train(features):
    model = collections.defaultdict(lambda: 1)
    for f in features:
        model[f] += 1
    return model

NWORDS = train(words(file('big.txt').read()))

alphabet = 'abcdefghijklmnopqrstuvwxyz'

def edits1(word):
   s = [(word[:i], word[i:]) for i in range(len(word) + 1)]
   deletes    = [a + b[1:] for a, b in s if b]
   transposes = [a + b[1] + b[0] + b[2:] for a, b in s if len(b)>1]
   replaces   = [a + c + b[1:] for a, b in s for c in alphabet if b]
   inserts    = [a + c + b     for a, b in s for c in alphabet]
   return set(deletes + transposes + replaces + inserts)

def known_edits2(word):
   return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)

def known(words): return set(w for w in words if w in NWORDS)

def correct(word):
    c = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
    return max(c, key=NWORDS.get)

The second part of the talk was over NumPy, and to be honest, it completely blew my mind. Eric started by opening a Python program (with a GUI and everything) that dynamically displayed information about his voice as he spoke through the microphone.

If you're interested in adding some scientific computing power to your Python applications be sure to check out NumPy and see what it can do for you.

Here is the audio from Eric's talk.

Creative Commons License

What do you think?