### Python 2.7
from __future__ import division
import nltk
from nltk.corpus import wordnet as wn
from pattern.en import tag
# choose text source & open it
source = open("frankenstein_fragment.txt", 'r')
# tokenize source and get Part-of-Speech tags for each word
definitions = []
for line in source:
# create tuple of tuples with pairs of word + POS-tag
collection = tag(line, tokenize=True, encoding='utf-8')
# transform tuple into list to be able to manipulate it
collection = list(collection)
# for each pair:
for element in collection:
# look for nouns & replace them with their definition
if element[1] == "NN":
synset = wn.synsets(element[0])
definitions.append("<")
definitions.append(synset[0].definition())
definitions.append(">")
else:
# non-nouns are left as words
definitions.append(element[0])
# write the transformed sentence
print(" ".join(definitions))
# close the text file
source.close()
# ----------------------------------------------------------------
## alternative using nltk
## tokenize in words
#tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
##to tokenize input text into sentences
#print '\n-----\n'.join(tokenizer.tokenize(data))# splits text into sentences
##to tokenize the tokenized sentences into words
# tokens = nltk.wordpunct_tokenize(data)
# text = nltk.Text(tokens)
# words = [w.lower() for w in text]