Project to spellcheck my writing. Lately I have gotten back into writing. I guess I always have but I've notived it more. I want to develop a new blog for my writing. I have started using Nikola for blogging. It is powered by Python. I have been writing text in a nano. I'd like to develop a spell checker to fix the mistakes I write. IPython Notebook doesn't have a spell checker built in. Open up this notebook and edit this Markdown for errors.
In [3]:
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('/home/wcmckee/us.txt').read()))
alphabet = 'abcdefghijklmnopqrstuvwxyz'
def edits1(word):
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in splits if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]
replaces = [a + c + b[1:] for a, b in splits for c in alphabet if b]
inserts = [a + c + b for a, b in splits 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):
candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
return max(candidates, key=NWORDS.get)
In [4]:
known_edits2('chek')
Out[4]:
set()
In [5]:
openpost = open('spellcheckin.ipynb', 'r')
In [6]:
postdet = openpost.read()
In [8]:
#postdet['metadata']
In [9]:
postdet.count
Out[9]:
<function count>
In [10]:
import json
In [11]:
json.dumps(postdet)
Out[11]:
'"{\\n \\"cells\\": [\\n {\\n \\"cell_type\\": \\"markdown\\",\\n \\"metadata\\": {},\\n \\"source\\": [\\n \\"SpellCheckin\\\\n\\",\\n \\"==========\\\\n\\",\\n \\"\\\\n\\",\\n \\"Project to spellcheck my writing. Lately I have gotten back into writing. I guess I always have but I\'ve notived it more. I want to develop a new blog for my writing. I have started using Nikola for blogging. It is powered by Python.\\\\n\\",\\n \\"I have been writing text in a nano. I\'d like to develop a spell checker to fix the mistakes I write. \\\\n\\",\\n \\"IPython Notebook doesn\'t have a spell checker built in.\\\\n\\",\\n \\"Open up this notebook and edit this Markdown for errors.\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": 1,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [\\n {\\n \\"ename\\": \\"IOError\\",\\n \\"evalue\\": \\"[Errno 2] No such file or directory: \'testz\'\\",\\n \\"output_type\\": \\"error\\",\\n \\"traceback\\": [\\n \\"\\\\u001b[1;31m---------------------------------------------------------------------------\\\\u001b[0m\\",\\n \\"\\\\u001b[1;31mIOError\\\\u001b[0m Traceback (most recent call last)\\",\\n \\"\\\\u001b[1;32m<ipython-input-1-1fcf37d95cc5>\\\\u001b[0m in \\\\u001b[0;36m<module>\\\\u001b[1;34m()\\\\u001b[0m\\\\n\\\\u001b[0;32m 10\\\\u001b[0m \\\\u001b[1;32mreturn\\\\u001b[0m \\\\u001b[0mmodel\\\\u001b[0m\\\\u001b[1;33m\\\\u001b[0m\\\\u001b[0m\\\\n\\\\u001b[0;32m 11\\\\u001b[0m \\\\u001b[1;33m\\\\u001b[0m\\\\u001b[0m\\\\n\\\\u001b[1;32m---> 12\\\\u001b[1;33m \\\\u001b[0mNWORDS\\\\u001b[0m \\\\u001b[1;33m=\\\\u001b[0m \\\\u001b[0mtrain\\\\u001b[0m\\\\u001b[1;33m(\\\\u001b[0m\\\\u001b[0mwords\\\\u001b[0m\\\\u001b[1;33m(\\\\u001b[0m\\\\u001b[0mfile\\\\u001b[0m\\\\u001b[1;33m(\\\\u001b[0m\\\\u001b[1;34m\'testz\'\\\\u001b[0m\\\\u001b[1;33m)\\\\u001b[0m\\\\u001b[1;33m.\\\\u001b[0m\\\\u001b[0mread\\\\u001b[0m\\\\u001b[1;33m(\\\\u001b[0m\\\\u001b[1;33m)\\\\u001b[0m\\\\u001b[1;33m)\\\\u001b[0m\\\\u001b[1;33m)\\\\u001b[0m\\\\u001b[1;33m\\\\u001b[0m\\\\u001b[0m\\\\n\\\\u001b[0m\\\\u001b[0;32m 13\\\\u001b[0m \\\\u001b[1;33m\\\\u001b[0m\\\\u001b[0m\\\\n\\\\u001b[0;32m 14\\\\u001b[0m \\\\u001b[0malphabet\\\\u001b[0m \\\\u001b[1;33m=\\\\u001b[0m \\\\u001b[1;34m\'abcdefghijklmnopqrstuvwxyz\'\\\\u001b[0m\\\\u001b[1;33m\\\\u001b[0m\\\\u001b[0m\\\\n\\",\\n \\"\\\\u001b[1;31mIOError\\\\u001b[0m: [Errno 2] No such file or directory: \'testz\'\\"\\n ]\\n }\\n ],\\n \\"source\\": [\\n \\"import re, collections\\\\n\\",\\n \\"\\\\n\\",\\n \\"def words(text): \\\\n\\",\\n \\" return re.findall(\'[a-z]+\', text.lower()) \\\\n\\",\\n \\"\\\\n\\",\\n \\"def train(features):\\\\n\\",\\n \\" model = collections.defaultdict(lambda: 1)\\\\n\\",\\n \\" for f in features:\\\\n\\",\\n \\" model[f] += 1\\\\n\\",\\n \\" return model\\\\n\\",\\n \\"\\\\n\\",\\n \\"NWORDS = train(words(file(\'testz\').read()))\\\\n\\",\\n \\"\\\\n\\",\\n \\"alphabet = \'abcdefghijklmnopqrstuvwxyz\'\\\\n\\",\\n \\"\\\\n\\",\\n \\"def edits1(word):\\\\n\\",\\n \\" splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]\\\\n\\",\\n \\" deletes = [a + b[1:] for a, b in splits if b]\\\\n\\",\\n \\" transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]\\\\n\\",\\n \\" replaces = [a + c + b[1:] for a, b in splits for c in alphabet if b]\\\\n\\",\\n \\" inserts = [a + c + b for a, b in splits for c in alphabet]\\\\n\\",\\n \\" return set(deletes + transposes + replaces + inserts)\\\\n\\",\\n \\"\\\\n\\",\\n \\"def known_edits2(word):\\\\n\\",\\n \\" return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)\\\\n\\",\\n \\"\\\\n\\",\\n \\"def known(words): return set(w for w in words if w in NWORDS)\\\\n\\",\\n \\"\\\\n\\",\\n \\"def correct(word):\\\\n\\",\\n \\" candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]\\\\n\\",\\n \\" return max(candidates, key=NWORDS.get)\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": 3,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [\\n {\\n \\"data\\": {\\n \\"text/plain\\": [\\n \\"set()\\"\\n ]\\n },\\n \\"execution_count\\": 3,\\n \\"metadata\\": {},\\n \\"output_type\\": \\"execute_result\\"\\n }\\n ],\\n \\"source\\": [\\n \\"known_edits2(\'chek\')\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": 21,\\n \\"metadata\\": {\\n \\"collapsed\\": true\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"openpost = open(\'spellcheckin.ipynb\', \'r\')\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": 22,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"postdet = openpost.read()\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"postdet[\'metadata\']\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": 32,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [\\n {\\n \\"data\\": {\\n \\"text/plain\\": [\\n \\"<function count>\\"\\n ]\\n },\\n \\"execution_count\\": 32,\\n \\"metadata\\": {},\\n \\"output_type\\": \\"execute_result\\"\\n }\\n ],\\n \\"source\\": [\\n \\"postdet.count\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"import json\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"json.dumps(postdet)\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"words(\'heLLLlo!\')\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"correct(\'test\')\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"edits1(\'helo\')\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": []\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": [\\n \\"print \'hello world!\'\\"\\n ]\\n },\\n {\\n \\"cell_type\\": \\"raw\\",\\n \\"metadata\\": {},\\n \\"source\\": []\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": 12,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": []\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": 12,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": []\\n },\\n {\\n \\"cell_type\\": \\"code\\",\\n \\"execution_count\\": null,\\n \\"metadata\\": {\\n \\"collapsed\\": false\\n },\\n \\"outputs\\": [],\\n \\"source\\": []\\n }\\n ],\\n \\"metadata\\": {\\n \\"kernelspec\\": {\\n \\"display_name\\": \\"Python 2\\",\\n \\"name\\": \\"python2\\"\\n },\\n \\"language_info\\": {\\n \\"codemirror_mode\\": {\\n \\"name\\": \\"ipython\\",\\n \\"version\\": 2\\n },\\n \\"file_extension\\": \\".py\\",\\n \\"mimetype\\": \\"text/x-python\\",\\n \\"name\\": \\"python\\",\\n \\"nbconvert_exporter\\": \\"python\\",\\n \\"pygments_lexer\\": \\"ipython2\\",\\n \\"version\\": \\"2.7.8\\"\\n }\\n },\\n \\"nbformat\\": 4,\\n \\"nbformat_minor\\": 0\\n}\\n"'
In [12]:
words('heLLLlo!')
Out[12]:
['hellllo']
In [13]:
correct('test')
Out[13]:
'test'
In [17]:
for edz in edits1('artcontrol'):
print edz
artcoptrol
arwtcontrol
arecontrol
artceontrol
vartcontrol
artcontrsl
kartcontrol
artconytrol
artqontrol
artdontrol
artcowtrol
sartcontrol
artcontnrol
rrtcontrol
artcontaol
artccntrol
artfcontrol
artconrtrol
prtcontrol
arvtcontrol
awtcontrol
artconwrol
artcontcol
akrtcontrol
actcontrol
artcobtrol
artcontrl
artcontrhl
artcontro
wartcontrol
artbcontrol
artcohtrol
artcentrol
artcontrohl
artcontral
ahrtcontrol
artcontroel
artcontqol
aprtcontrol
artcqontrol
arwcontrol
artconprol
artconthrol
artocontrol
artcuntrol
artcopntrol
artconteol
artcwntrol
artcorntrol
artcontkol
artcwontrol
artcontprol
qrtcontrol
aqtcontrol
artconjtrol
cartcontrol
artcontmol
iartcontrol
artgontrol
artcontgol
artcontiol
aptcontrol
artcontrzl
arcontrol
aricontrol
artcontool
partcontrol
artcontrox
artcontroy
artcontroz
artcontrot
artcontrou
artcontrov
artcontrow
artcontrop
artcontroq
artcontror
artcontros
artcontrol
artcontrom
artcontron
artcontroo
artcontroh
artcontroi
artcontroj
artcontrok
artcontrod
artcontroe
artcontrof
artcontrog
artcontroa
agrtcontrol
artcontroc
acrtcontrol
artconttol
artcontrdl
artcontronl
aertcontrol
artconvrol
atrtcontrol
artcontzol
artconmrol
artcontarol
artconcrol
artconptrol
arhtcontrol
artcontrolv
argcontrol
artcontirol
artcontroil
artcontyol
arntcontrol
artcoctrol
yrtcontrol
artconbrol
arycontrol
aartcontrol
artconarol
artcyntrol
artcontryl
artcontfol
ortcontrol
artncontrol
arutcontrol
artcrontrol
artbontrol
lrtcontrol
artcoutrol
artcontbol
astcontrol
artciontrol
artcontrvl
alrtcontrol
artcontrqol
artcyontrol
artcontrob
yartcontrol
artconrrol
crtcontrol
urtcontrol
artcontpol
trtcontrol
artcontcrol
artcpontrol
artcowntrol
artcontvol
artconorol
artcontbrol
arptcontrol
artcontroul
artcottrol
arztcontrol
artcontrocl
artcontzrol
artiontrol
artecontrol
artcontrobl
anrtcontrol
bartcontrol
arotcontrol
artconvtrol
aracontrol
artcgntrol
artcobntrol
artchontrol
artmcontrol
artcontxol
oartcontrol
artcontrolr
amtcontrol
krtcontrol
artcontrxl
artcontrolz
artconwtrol
artcjontrol
artconttrol
arscontrol
artconetrol
arhcontrol
arteontrol
artcoontrol
artconstrol
artycontrol
artconhrol
arctontrol
artcrntrol
artnontrol
artcontrul
aqrtcontrol
artcontroml
aztcontrol
artcontrrl
artcontroxl
ardtcontrol
artcuontrol
arxcontrol
artcoztrol
artcontriol
artcoitrol
artcontrkl
arytcontrol
artcaontrol
brtcontrol
artcotnrol
artclontrol
arqcontrol
agtcontrol
arrcontrol
artcootrol
artcontyrol
rartcontrol
avrtcontrol
artcoftrol
altcontrol
artconltrol
qartcontrol
arftcontrol
aretcontrol
arttcontrol
artcontrsol
artoontrol
aftcontrol
artconztrol
artcomtrol
arthontrol
artcongrol
artczntrol
artconnrol
aortcontrol
artcontrovl
artqcontrol
artvcontrol
artcoytrol
arfcontrol
artcontrql
artjcontrol
arvcontrol
artcogntrol
armcontrol
artxcontrol
artcondrol
azrtcontrol
artcontrwol
fartcontrol
artlcontrol
artconerol
artconfrol
artcohntrol
artvontrol
artcontryol
artcontrodl
arktcontrol
artcsntrol
artcovntrol
artconitrol
artcontrnl
arrtcontrol
artcortrol
artcontrgl
artcintrol
xartcontrol
artcontrool
artcomntrol
artchntrol
artcontrmol
arxtcontrol
artpcontrol
mrtcontrol
artyontrol
artcontrdol
artocntrol
aatcontrol
artcontrjol
aytcontrol
airtcontrol
srtcontrol
arkcontrol
artconzrol
artcoentrol
artcontqrol
artcontvrol
articontrol
artconrol
artcontxrol
axrtcontrol
artconxtrol
aktcontrol
axtcontrol
artcontrorl
ajrtcontrol
artcnotrol
drtcontrol
artsontrol
artuontrol
artcnntrol
artcontroyl
artcontrvol
artcontrojl
artcontrml
artcontrhol
arjcontrol
artconyrol
artcontrrol
artaontrol
artcontrjl
hrtcontrol
aetcontrol
artconotrol
artcontrpol
artcontsrol
adrtcontrol
artcoantrol
artcdntrol
zartcontrol
artgcontrol
artcontrfol
artcmontrol
artcontfrol
artcontrokl
artcontrbol
ratcontrol
artcontrcl
arccontrol
artconutrol
artcontrzol
antcontrol
artcontruol
artczontrol
artcountrol
artcpntrol
nartcontrol
arpcontrol
atrcontrol
artcontrowl
artccontrol
artcofntrol
artrcontrol
artcontlrol
tartcontrol
artconhtrol
arocontrol
artcontrtol
ardcontrol
artwontrol
artcontrxol
artcogtrol
artcxontrol
arstcontrol
artconktrol
artcantrol
artcodntrol
artcostrol
irtcontrol
artacontrol
artcontrnol
arlcontrol
artcontrlol
artcontrkol
artcontrtl
artconbtrol
artcqntrol
artcotntrol
artcontrgol
artcontorol
awrtcontrol
artcontreol
artcontrozl
amrtcontrol
artconturol
artcontril
afrtcontrol
artckontrol
rtcontrol
artcdontrol
artcontrolg
artcontrolf
artcontrola
artcontrolc
artcontrolb
artcontrolm
artcontroll
artcontrolo
artcontroln
artcontroli
artcontrolh
artcontrolk
artcontrolj
artcontrolu
artcontrolt
artcontrolw
artconurol
artcontrolq
artcontrolp
artcontrols
artcontrfl
artcoqtrol
artcontroly
artcontrolx
artcontropl
artzontrol
aratcontrol
attcontrol
artconmtrol
artcfntrol
dartcontrol
artcxntrol
aitcontrol
artcontmrol
artmontrol
artxontrol
artconftrol
arthcontrol
artckntrol
artconntrol
arttontrol
arbtcontrol
wrtcontrol
artcokntrol
avtcontrol
adtcontrol
autcontrol
artcontrosl
zrtcontrol
abrtcontrol
artcfontrol
artconterol
artcoxtrol
artcoltrol
artcontrpl
atcontrol
artcongtrol
artontrol
artcocntrol
arltcontrol
artcontraol
arucontrol
artcondtrol
artfontrol
artconrtol
artconqtrol
artcojntrol
uartcontrol
arqtcontrol
arzcontrol
artconctrol
artcontrcol
artcontrogl
jrtcontrol
artconqrol
artzcontrol
artconlrol
artpontrol
eartcontrol
artcontorl
artcmntrol
grtcontrol
artcbontrol
artkontrol
artconsrol
artcontrbl
artconkrol
jartcontrol
arctcontrol
artcontol
ayrtcontrol
artwcontrol
abtcontrol
artcoetrol
artcoyntrol
nrtcontrol
ahtcontrol
artcojtrol
gartcontrol
artcotrol
artdcontrol
aritcontrol
artcjntrol
artconxrol
artconatrol
artcontjol
artcontkrol
artcnontrol
artconirol
artctontrol
artcontrole
artcsontrol
artcontrwl
aotcontrol
artcozntrol
artcontlol
artcbntrol
artcointrol
artclntrol
artcodtrol
artcontjrol
artcgontrol
artcontrold
asrtcontrol
artcontrll
artcontrlo
artcontrofl
ajtcontrol
artcontdol
artcoktrol
artcntrol
aurtcontrol
artcontroal
artconthol
hartcontrol
artcontrel
artcontnol
artscontrol
artcoxntrol
ertcontrol
artcolntrol
artcontwrol
artcontgrol
artlontrol
martcontrol
frtcontrol
artcontsol
xrtcontrol
artcontwol
artucontrol
artkcontrol
artcontuol
argtcontrol
lartcontrol
armtcontrol
vrtcontrol
artconjrol
artcvontrol
arjtcontrol
artjontrol
artcontrotl
arncontrol
artrontrol
artcoatrol
artcovtrol
arbcontrol
artcontroql
artcontdrol
artcoqntrol
artctntrol
artcosntrol
artcvntrol
In [14]:
edits1('helo')
Out[14]:
{'aelo',
'ahelo',
'belo',
'bhelo',
'celo',
'chelo',
'delo',
'dhelo',
'eelo',
'ehelo',
'ehlo',
'elo',
'felo',
'fhelo',
'gelo',
'ghelo',
'haelo',
'halo',
'hbelo',
'hblo',
'hcelo',
'hclo',
'hdelo',
'hdlo',
'healo',
'heao',
'heblo',
'hebo',
'heclo',
'heco',
'hedlo',
'hedo',
'heelo',
'heeo',
'heflo',
'hefo',
'heglo',
'hego',
'hehlo',
'heho',
'heilo',
'heio',
'hejlo',
'hejo',
'heklo',
'heko',
'hel',
'hela',
'helao',
'helb',
'helbo',
'helc',
'helco',
'held',
'heldo',
'hele',
'heleo',
'helf',
'helfo',
'helg',
'helgo',
'helh',
'helho',
'heli',
'helio',
'helj',
'heljo',
'helk',
'helko',
'hell',
'hello',
'helm',
'helmo',
'heln',
'helno',
'helo',
'heloa',
'helob',
'heloc',
'helod',
'heloe',
'helof',
'helog',
'heloh',
'heloi',
'heloj',
'helok',
'helol',
'helom',
'helon',
'heloo',
'helop',
'heloq',
'helor',
'helos',
'helot',
'helou',
'helov',
'helow',
'helox',
'heloy',
'heloz',
'help',
'helpo',
'helq',
'helqo',
'helr',
'helro',
'hels',
'helso',
'helt',
'helto',
'helu',
'heluo',
'helv',
'helvo',
'helw',
'helwo',
'helx',
'helxo',
'hely',
'helyo',
'helz',
'helzo',
'hemlo',
'hemo',
'henlo',
'heno',
'heo',
'heol',
'heolo',
'heoo',
'heplo',
'hepo',
'heqlo',
'heqo',
'herlo',
'hero',
'heslo',
'heso',
'hetlo',
'heto',
'heulo',
'heuo',
'hevlo',
'hevo',
'hewlo',
'hewo',
'hexlo',
'hexo',
'heylo',
'heyo',
'hezlo',
'hezo',
'hfelo',
'hflo',
'hgelo',
'hglo',
'hhelo',
'hhlo',
'hielo',
'hilo',
'hjelo',
'hjlo',
'hkelo',
'hklo',
'hlelo',
'hleo',
'hllo',
'hlo',
'hmelo',
'hmlo',
'hnelo',
'hnlo',
'hoelo',
'holo',
'hpelo',
'hplo',
'hqelo',
'hqlo',
'hrelo',
'hrlo',
'hselo',
'hslo',
'htelo',
'htlo',
'huelo',
'hulo',
'hvelo',
'hvlo',
'hwelo',
'hwlo',
'hxelo',
'hxlo',
'hyelo',
'hylo',
'hzelo',
'hzlo',
'ielo',
'ihelo',
'jelo',
'jhelo',
'kelo',
'khelo',
'lelo',
'lhelo',
'melo',
'mhelo',
'nelo',
'nhelo',
'oelo',
'ohelo',
'pelo',
'phelo',
'qelo',
'qhelo',
'relo',
'rhelo',
'selo',
'shelo',
'telo',
'thelo',
'uelo',
'uhelo',
'velo',
'vhelo',
'welo',
'whelo',
'xelo',
'xhelo',
'yelo',
'yhelo',
'zelo',
'zhelo'}
In [14]:
In [ ]:
print 'hello world!'
In [12]:
In [12]:
In [ ]:
Content source: wcmckee/wcmckee-notebook
Similar notebooks: