c3ac78
diff -ru mythes-en-3.0/wn2ooo/wn2ooo.py mythes-en-3.0.fixed/wn2ooo/wn2ooo.py
c3ac78
--- mythes-en-3.0/wn2ooo/wn2ooo.py	2005-07-23 23:21:20.000000000 +0100
c3ac78
+++ mythes-en-3.0.fixed/wn2ooo/wn2ooo.py	2018-07-30 14:46:52.695201526 +0100
c3ac78
@@ -65,7 +65,7 @@
c3ac78
 				entry = getRelatedTerms(u, HYPERNYM, '')
c3ac78
 			try:
c3ac78
 				listpos = l.index(entry)
c3ac78
-			except ValueError, e:
c3ac78
+			except ValueError as e:
c3ac78
 				l.append(entry)
c3ac78
 	return str.join("|", l)
c3ac78
 	
c3ac78
@@ -74,12 +74,12 @@
c3ac78
 	for word in words:
c3ac78
 		l = []
c3ac78
 		if c % 100 == 0:
c3ac78
-			print >> sys.stderr, "Working on word %d" % c
c3ac78
+			print("Working on word %d" % c, file=sys.stderr)
c3ac78
 		for pos in [ADJ, N, V, ADV]:
c3ac78
 			try:
c3ac78
 				for s in pos[word].getSenses():
c3ac78
 					l.append(s)
c3ac78
-			except KeyError, e:
c3ac78
+			except KeyError as e:
c3ac78
 				#print >> sys.stderr, e
c3ac78
 				continue
c3ac78
 		syn_count = 0
c3ac78
@@ -118,7 +118,7 @@
c3ac78
 					syn_lines = "%s%s" % (syn_lines, more_generic_terms)
c3ac78
 				syn_count = syn_count + 1
c3ac78
 		if syn_count > 0:
c3ac78
-			print "%s|%d\n%s" % (word, syn_count, syn_lines)
c3ac78
+			print("%s|%d\n%s" % (word, syn_count, syn_lines))
c3ac78
 		c = c + 1
c3ac78
 	return
c3ac78
 
c3ac78
@@ -132,40 +132,38 @@
c3ac78
 	return s
c3ac78
 
c3ac78
 def main():
c3ac78
-	print "ISO8859-1"
c3ac78
+	print("ISO8859-1")
c3ac78
 
c3ac78
 	words = {}
c3ac78
 	dic = Dictionary(ADJECTIVE, "adj")
c3ac78
-	for w in dic.keys():
c3ac78
+	for w in list(dic.keys()):
c3ac78
 		words[w] = None
c3ac78
 
c3ac78
 	dic = Dictionary(NOUN, "noun")
c3ac78
-	for w in dic.keys():
c3ac78
+	for w in list(dic.keys()):
c3ac78
 		words[w] = None
c3ac78
 	
c3ac78
 	dic = Dictionary(VERB, "verb")
c3ac78
-	for w in dic.keys():
c3ac78
+	for w in list(dic.keys()):
c3ac78
 		words[w] = None
c3ac78
 
c3ac78
 	dic = Dictionary(ADVERB, "adv")
c3ac78
-	for w in dic.keys():
c3ac78
+	for w in list(dic.keys()):
c3ac78
 		words[w] = None
c3ac78
 
c3ac78
-	words = words.keys()
c3ac78
+	words = list(words.keys())
c3ac78
 	# tests:
c3ac78
 	#words = ['dog', 'house', 'nullipara']
c3ac78
 	#words = ['absent', 'whistle stop']
c3ac78
 	#words = ['war']
c3ac78
-	print >>sys.stderr, "Dictionaries contain %d words" % len(words)
c3ac78
-	print >>sys.stderr, "Sorting..."
c3ac78
-	words.sort(mycompare)
c3ac78
+	print("Dictionaries contain %d words" % len(words), file=sys.stderr)
c3ac78
+	print("Sorting...", file=sys.stderr)
c3ac78
+	words = sorted(words, key=mycompare)
c3ac78
 	printSynsForWords(words)
c3ac78
 	return
c3ac78
 
c3ac78
-def mycompare(a, b):
c3ac78
+def mycompare(elem):
c3ac78
 	# stupid hack to make sure the list is sorted like Kevin's original list:
c3ac78
-	a = a.replace(" ", "Z")
c3ac78
-	b = b.replace(" ", "Z")
c3ac78
-	return cmp(a, b)
c3ac78
+	return elem.replace(" ", "Z")
c3ac78
 
c3ac78
 main()
c3ac78
diff -ru mythes-en-3.0/wn2ooo/wordnet.py mythes-en-3.0.fixed/wn2ooo/wordnet.py
c3ac78
--- mythes-en-3.0/wn2ooo/wordnet.py	2005-07-23 23:21:16.000000000 +0100
c3ac78
+++ mythes-en-3.0.fixed/wn2ooo/wordnet.py	2018-07-30 14:46:52.695201526 +0100
c3ac78
@@ -44,7 +44,6 @@
c3ac78
 import string
c3ac78
 import os
c3ac78
 from os import environ
c3ac78
-from types import IntType, ListType, StringType, TupleType
c3ac78
 
c3ac78
 
c3ac78
 #
c3ac78
@@ -212,15 +211,15 @@
c3ac78
     
c3ac78
     def __init__(self, line):
c3ac78
         """Initialize the word from a line of a WN POS file."""
c3ac78
-	tokens = string.split(line)
c3ac78
-	ints = map(int, tokens[int(tokens[3]) + 4:])
c3ac78
-	self.form = string.replace(tokens[0], '_', ' ')
c3ac78
+        tokens = line.split()
c3ac78
+        ints = list(map(int, tokens[int(tokens[3]) + 4:]))
c3ac78
+        self.form = tokens[0].replace('_', ' ')
c3ac78
         "Orthographic representation of the word."
c3ac78
-	self.pos = _normalizePOS(tokens[1])
c3ac78
+        self.pos = _normalizePOS(tokens[1])
c3ac78
         "Part of speech.  One of NOUN, VERB, ADJECTIVE, ADVERB."
c3ac78
-	self.taggedSenseCount = ints[1]
c3ac78
+        self.taggedSenseCount = ints[1]
c3ac78
         "Number of senses that are tagged."
c3ac78
-	self._synsetOffsets = ints[2:ints[0]+2]
c3ac78
+        self._synsetOffsets = ints[2:ints[0]+2]
c3ac78
     
c3ac78
     def getPointers(self, pointerType=None):
c3ac78
         """Pointers connect senses and synsets, not words.
c3ac78
@@ -233,17 +232,17 @@
c3ac78
         raise self.getPointers.__doc__
c3ac78
 
c3ac78
     def getSenses(self):
c3ac78
-	"""Return a sequence of senses.
c3ac78
-	
c3ac78
-	>>> N['dog'].getSenses()
c3ac78
-	('dog' in {noun: dog, domestic dog, Canis familiaris}, 'dog' in {noun: frump, dog}, 'dog' in {noun: dog}, 'dog' in {noun: cad, bounder, blackguard, dog, hound, heel}, 'dog' in {noun: frank, frankfurter, hotdog, hot dog, dog, wiener, wienerwurst, weenie}, 'dog' in {noun: pawl, detent, click, dog}, 'dog' in {noun: andiron, firedog, dog, dog-iron})
c3ac78
-	"""
c3ac78
-	if not hasattr(self, '_senses'):
c3ac78
-	    def getSense(offset, pos=self.pos, form=self.form):
c3ac78
-		return getSynset(pos, offset)[form]
c3ac78
-	    self._senses = tuple(map(getSense, self._synsetOffsets))
c3ac78
-	    del self._synsetOffsets
c3ac78
-	return self._senses
c3ac78
+        """Return a sequence of senses.
c3ac78
+        
c3ac78
+        >>> N['dog'].getSenses()
c3ac78
+        ('dog' in {noun: dog, domestic dog, Canis familiaris}, 'dog' in {noun: frump, dog}, 'dog' in {noun: dog}, 'dog' in {noun: cad, bounder, blackguard, dog, hound, heel}, 'dog' in {noun: frank, frankfurter, hotdog, hot dog, dog, wiener, wienerwurst, weenie}, 'dog' in {noun: pawl, detent, click, dog}, 'dog' in {noun: andiron, firedog, dog, dog-iron})
c3ac78
+        """
c3ac78
+        if not hasattr(self, '_senses'):
c3ac78
+            def getSense(offset, pos=self.pos, form=self.form):
c3ac78
+                return getSynset(pos, offset)[form]
c3ac78
+            self._senses = tuple(map(getSense, self._synsetOffsets))
c3ac78
+            del self._synsetOffsets
c3ac78
+        return self._senses
c3ac78
 
c3ac78
     # Deprecated.  Present for backwards compatability.
c3ac78
     def senses(self):
c3ac78
@@ -255,70 +254,70 @@
c3ac78
         return self.getSense()
c3ac78
     
c3ac78
     def isTagged(self):
c3ac78
-	"""Return 1 if any sense is tagged.
c3ac78
-	
c3ac78
-	>>> N['dog'].isTagged()
c3ac78
-	1
c3ac78
-	"""
c3ac78
-	return self.taggedSenseCount > 0
c3ac78
+        """Return 1 if any sense is tagged.
c3ac78
+        
c3ac78
+        >>> N['dog'].isTagged()
c3ac78
+        1
c3ac78
+        """
c3ac78
+        return self.taggedSenseCount > 0
c3ac78
     
c3ac78
     def getAdjectivePositions(self):
c3ac78
-	"""Return a sequence of adjective positions that this word can
c3ac78
-	appear in.  These are elements of ADJECTIVE_POSITIONS.
c3ac78
-	
c3ac78
-	>>> ADJ['clear'].getAdjectivePositions()
c3ac78
-	[None, 'predicative']
c3ac78
-	"""
c3ac78
-	positions = {}
c3ac78
-	for sense in self.getSenses():
c3ac78
-	    positions[sense.position] = 1
c3ac78
-	return positions.keys()
c3ac78
+        """Return a sequence of adjective positions that this word can
c3ac78
+        appear in.  These are elements of ADJECTIVE_POSITIONS.
c3ac78
+        
c3ac78
+        >>> ADJ['clear'].getAdjectivePositions()
c3ac78
+        [None, 'predicative']
c3ac78
+        """
c3ac78
+        positions = {}
c3ac78
+        for sense in self.getSenses():
c3ac78
+            positions[sense.position] = 1
c3ac78
+        return list(positions.keys())
c3ac78
 
c3ac78
     adjectivePositions = getAdjectivePositions # backwards compatability
c3ac78
     
c3ac78
     def __cmp__(self, other):
c3ac78
-	"""
c3ac78
-	>>> N['cat'] < N['dog']
c3ac78
-	1
c3ac78
-	>>> N['dog'] < V['dog']
c3ac78
-	1
c3ac78
-	"""
c3ac78
-	return _compareInstances(self, other, ('pos', 'form'))
c3ac78
+        """
c3ac78
+        >>> N['cat'] < N['dog']
c3ac78
+        1
c3ac78
+        >>> N['dog'] < V['dog']
c3ac78
+        1
c3ac78
+        """
c3ac78
+        return _compareInstances(self, other, ('pos', 'form'))
c3ac78
     
c3ac78
     def __str__(self):
c3ac78
-	"""Return a human-readable representation.
c3ac78
-	
c3ac78
-	>>> str(N['dog'])
c3ac78
-	'dog(n.)'
c3ac78
-	"""
c3ac78
-	abbrs = {NOUN: 'n.', VERB: 'v.', ADJECTIVE: 'adj.', ADVERB: 'adv.'}
c3ac78
-	return self.form + "(" + abbrs[self.pos] + ")"
c3ac78
+        """Return a human-readable representation.
c3ac78
+        
c3ac78
+        >>> str(N['dog'])
c3ac78
+        'dog(n.)'
c3ac78
+        """
c3ac78
+        abbrs = {NOUN: 'n.', VERB: 'v.', ADJECTIVE: 'adj.', ADVERB: 'adv.'}
c3ac78
+        return self.form + "(" + abbrs[self.pos] + ")"
c3ac78
     
c3ac78
     def __repr__(self):
c3ac78
-	"""If ReadableRepresentations is true, return a human-readable
c3ac78
-	representation, e.g. 'dog(n.)'.
c3ac78
-	
c3ac78
-	If ReadableRepresentations is false, return a machine-readable
c3ac78
-	representation, e.g. "getWord('dog', 'noun')".
c3ac78
-	"""
c3ac78
-	if ReadableRepresentations:
c3ac78
-	    return str(self)
c3ac78
-	return "getWord" + `(self.form, self.pos)`
c3ac78
-	
c3ac78
+        """If ReadableRepresentations is true, return a human-readable
c3ac78
+        representation, e.g. 'dog(n.)'.
c3ac78
+        
c3ac78
+        If ReadableRepresentations is false, return a machine-readable
c3ac78
+        representation, e.g. "getWord('dog', 'noun')".
c3ac78
+        """
c3ac78
+        if ReadableRepresentations:
c3ac78
+            return str(self)
c3ac78
+        return "getWord" + repr((self.form, self.pos))
c3ac78
+        
c3ac78
     #
c3ac78
     # Sequence protocol (a Word's elements are its Senses)
c3ac78
     #
c3ac78
-    def __nonzero__(self):
c3ac78
-	return 1
c3ac78
+    def __bool__(self):
c3ac78
+        return 1
c3ac78
     
c3ac78
     def __len__(self):
c3ac78
-	return len(self.getSenses())
c3ac78
+        return len(self.getSenses())
c3ac78
     
c3ac78
     def __getitem__(self, index):
c3ac78
-	return self.getSenses()[index]
c3ac78
+        return self.getSenses()[index]
c3ac78
     
c3ac78
     def __getslice__(self, i, j):
c3ac78
-	return self.getSenses()[i:j]
c3ac78
+        return self.getSenses()[i:j]
c3ac78
 
c3ac78
 
c3ac78
 class Synset:
c3ac78
@@ -356,157 +355,157 @@
c3ac78
     
c3ac78
     def __init__(self, pos, offset, line):
c3ac78
         "Initialize the synset from a line off a WN synset file."
c3ac78
-	self.pos = pos
c3ac78
+        self.pos = pos
c3ac78
         "part of speech -- one of NOUN, VERB, ADJECTIVE, ADVERB."
c3ac78
-	self.offset = offset
c3ac78
+        self.offset = offset
c3ac78
         """integer offset into the part-of-speech file.  Together
c3ac78
         with pos, this can be used as a unique id."""
c3ac78
-	tokens = string.split(line[:string.index(line, '|')])
c3ac78
-	self.ssType = tokens[2]
c3ac78
-	self.gloss = string.strip(line[string.index(line, '|') + 1:])
c3ac78
+        tokens = line[:line.index('|')].split()
c3ac78
+        self.ssType = tokens[2]
c3ac78
+        self.gloss = line[line.index('|') + 1:].strip()
c3ac78
         self.lexname = Lexname.lexnames[int(tokens[1])]
c3ac78
-	(self._senseTuples, remainder) = _partition(tokens[4:], 2, string.atoi(tokens[3], 16))
c3ac78
-	(self._pointerTuples, remainder) = _partition(remainder[1:], 4, int(remainder[0]))
c3ac78
-	if pos == VERB:
c3ac78
-	    (vfTuples, remainder) = _partition(remainder[1:], 3, int(remainder[0]))
c3ac78
-	    def extractVerbFrames(index, vfTuples):
c3ac78
-		return tuple(map(lambda t:string.atoi(t[1]), filter(lambda t,i=index:string.atoi(t[2],16) in (0, i), vfTuples)))
c3ac78
-	    senseVerbFrames = []
c3ac78
-	    for index in range(1, len(self._senseTuples) + 1):
c3ac78
-		senseVerbFrames.append(extractVerbFrames(index, vfTuples))
c3ac78
-	    self._senseVerbFrames = senseVerbFrames
c3ac78
-	    self.verbFrames = tuple(extractVerbFrames(None, vfTuples))
c3ac78
+        (self._senseTuples, remainder) = _partition(tokens[4:], 2, int(tokens[3], 16))
c3ac78
+        (self._pointerTuples, remainder) = _partition(remainder[1:], 4, int(remainder[0]))
c3ac78
+        if pos == VERB:
c3ac78
+            (vfTuples, remainder) = _partition(remainder[1:], 3, int(remainder[0]))
c3ac78
+            def extractVerbFrames(index, vfTuples):
c3ac78
+                return tuple([int(t[1]) for t in list(filter(lambda t,i=index:int(t[2],16) in (0, i), vfTuples))])
c3ac78
+            senseVerbFrames = []
c3ac78
+            for index in range(1, len(self._senseTuples) + 1):
c3ac78
+                senseVerbFrames.append(extractVerbFrames(index, vfTuples))
c3ac78
+            self._senseVerbFrames = senseVerbFrames
c3ac78
+            self.verbFrames = tuple(extractVerbFrames(None, vfTuples))
c3ac78
             """A sequence of integers that index into
c3ac78
             VERB_FRAME_STRINGS. These list the verb frames that any
c3ac78
             Sense in this synset participates in.  (See also
c3ac78
             Sense.verbFrames.) Defined only for verbs."""
c3ac78
     
c3ac78
     def getSenses(self):
c3ac78
-	"""Return a sequence of Senses.
c3ac78
-	
c3ac78
-	>>> N['dog'][0].getSenses()
c3ac78
-	('dog' in {noun: dog, domestic dog, Canis familiaris},)
c3ac78
-	"""
c3ac78
-	if not hasattr(self, '_senses'):
c3ac78
-	    def loadSense(senseTuple, verbFrames=None, synset=self):
c3ac78
-		return Sense(synset, senseTuple, verbFrames)
c3ac78
-	    if self.pos == VERB:
c3ac78
-		self._senses = tuple(map(loadSense, self._senseTuples, self._senseVerbFrames))
c3ac78
-		del self._senseVerbFrames
c3ac78
-	    else:
c3ac78
-		self._senses = tuple(map(loadSense, self._senseTuples))
c3ac78
-	    del self._senseTuples
c3ac78
-	return self._senses
c3ac78
+        """Return a sequence of Senses.
c3ac78
+        
c3ac78
+        >>> N['dog'][0].getSenses()
c3ac78
+        ('dog' in {noun: dog, domestic dog, Canis familiaris},)
c3ac78
+        """
c3ac78
+        if not hasattr(self, '_senses'):
c3ac78
+            def loadSense(senseTuple, verbFrames=None, synset=self):
c3ac78
+                return Sense(synset, senseTuple, verbFrames)
c3ac78
+            if self.pos == VERB:
c3ac78
+                self._senses = tuple(map(loadSense, self._senseTuples, self._senseVerbFrames))
c3ac78
+                del self._senseVerbFrames
c3ac78
+            else:
c3ac78
+                self._senses = tuple(map(loadSense, self._senseTuples))
c3ac78
+            del self._senseTuples
c3ac78
+        return self._senses
c3ac78
 
c3ac78
     senses = getSenses
c3ac78
 
c3ac78
     def getPointers(self, pointerType=None):
c3ac78
-	"""Return a sequence of Pointers.
c3ac78
+        """Return a sequence of Pointers.
c3ac78
 
c3ac78
         If pointerType is specified, only pointers of that type are
c3ac78
         returned.  In this case, pointerType should be an element of
c3ac78
         POINTER_TYPES.
c3ac78
-	
c3ac78
-	>>> N['dog'][0].getPointers()[:5]
c3ac78
-	(hypernym -> {noun: canine, canid}, member meronym -> {noun: Canis, genus Canis}, member meronym -> {noun: pack}, hyponym -> {noun: pooch, doggie, doggy, barker, bow-wow}, hyponym -> {noun: cur, mongrel, mutt})
c3ac78
-	>>> N['dog'][0].getPointers(HYPERNYM)
c3ac78
-	(hypernym -> {noun: canine, canid},)
c3ac78
-	"""
c3ac78
-	if not hasattr(self, '_pointers'):
c3ac78
-	    def loadPointer(tuple, synset=self):
c3ac78
-		return Pointer(synset.offset, tuple)
c3ac78
-	    self._pointers = tuple(map(loadPointer, self._pointerTuples))
c3ac78
-	    del self._pointerTuples
c3ac78
-	if pointerType == None:
c3ac78
-	    return self._pointers
c3ac78
-	else:
c3ac78
-	    _requirePointerType(pointerType)
c3ac78
-	    return filter(lambda pointer, type=pointerType: pointer.type == type, self._pointers)
c3ac78
+        
c3ac78
+        >>> N['dog'][0].getPointers()[:5]
c3ac78
+        (hypernym -> {noun: canine, canid}, member meronym -> {noun: Canis, genus Canis}, member meronym -> {noun: pack}, hyponym -> {noun: pooch, doggie, doggy, barker, bow-wow}, hyponym -> {noun: cur, mongrel, mutt})
c3ac78
+        >>> N['dog'][0].getPointers(HYPERNYM)
c3ac78
+        (hypernym -> {noun: canine, canid},)
c3ac78
+        """
c3ac78
+        if not hasattr(self, '_pointers'):
c3ac78
+            def loadPointer(tuple, synset=self):
c3ac78
+                return Pointer(synset.offset, tuple)
c3ac78
+            self._pointers = tuple(map(loadPointer, self._pointerTuples))
c3ac78
+            del self._pointerTuples
c3ac78
+        if pointerType == None:
c3ac78
+            return self._pointers
c3ac78
+        else:
c3ac78
+            _requirePointerType(pointerType)
c3ac78
+            return list(filter(lambda pointer, type=pointerType: pointer.type == type, self._pointers))
c3ac78
 
c3ac78
     pointers = getPointers # backwards compatability
c3ac78
     
c3ac78
     def getPointerTargets(self, pointerType=None):
c3ac78
-	"""Return a sequence of Senses or Synsets.
c3ac78
-	
c3ac78
+        """Return a sequence of Senses or Synsets.
c3ac78
+        
c3ac78
         If pointerType is specified, only targets of pointers of that
c3ac78
         type are returned.  In this case, pointerType should be an
c3ac78
         element of POINTER_TYPES.
c3ac78
-	
c3ac78
-	>>> N['dog'][0].getPointerTargets()[:5]
c3ac78
-	[{noun: canine, canid}, {noun: Canis, genus Canis}, {noun: pack}, {noun: pooch, doggie, doggy, barker, bow-wow}, {noun: cur, mongrel, mutt}]
c3ac78
-	>>> N['dog'][0].getPointerTargets(HYPERNYM)
c3ac78
-	[{noun: canine, canid}]
c3ac78
-	"""
c3ac78
-	return map(Pointer.target, self.getPointers(pointerType))
c3ac78
+        
c3ac78
+        >>> N['dog'][0].getPointerTargets()[:5]
c3ac78
+        [{noun: canine, canid}, {noun: Canis, genus Canis}, {noun: pack}, {noun: pooch, doggie, doggy, barker, bow-wow}, {noun: cur, mongrel, mutt}]
c3ac78
+        >>> N['dog'][0].getPointerTargets(HYPERNYM)
c3ac78
+        [{noun: canine, canid}]
c3ac78
+        """
c3ac78
+        return list(map(Pointer.target, self.getPointers(pointerType)))
c3ac78
 
c3ac78
     pointerTargets = getPointerTargets # backwards compatability
c3ac78
     
c3ac78
     def isTagged(self):
c3ac78
-	"""Return 1 if any sense is tagged.
c3ac78
-	
c3ac78
-	>>> N['dog'][0].isTagged()
c3ac78
-	1
c3ac78
-	>>> N['dog'][1].isTagged()
c3ac78
-	0
c3ac78
-	"""
c3ac78
-	return len(filter(Sense.isTagged, self.getSenses())) > 0
c3ac78
+        """Return 1 if any sense is tagged.
c3ac78
+        
c3ac78
+        >>> N['dog'][0].isTagged()
c3ac78
+        1
c3ac78
+        >>> N['dog'][1].isTagged()
c3ac78
+        0
c3ac78
+        """
c3ac78
+        return len(list(filter(Sense.isTagged, self.getSenses()))) > 0
c3ac78
     
c3ac78
     def __str__(self):
c3ac78
-	"""Return a human-readable representation.
c3ac78
-	
c3ac78
-	>>> str(N['dog'][0].synset)
c3ac78
-	'{noun: dog, domestic dog, Canis familiaris}'
c3ac78
-	"""
c3ac78
-	return "{" + self.pos + ": " + string.joinfields(map(lambda sense:sense.form, self.getSenses()), ", ") + "}"
c3ac78
+        """Return a human-readable representation.
c3ac78
+        
c3ac78
+        >>> str(N['dog'][0].synset)
c3ac78
+        '{noun: dog, domestic dog, Canis familiaris}'
c3ac78
+        """
c3ac78
+        return "{" + self.pos + ": " + string.joinfields([sense.form for sense in self.getSenses()], ", ") + "}"
c3ac78
     
c3ac78
     def __repr__(self):
c3ac78
-	"""If ReadableRepresentations is true, return a human-readable
c3ac78
-	representation, e.g. 'dog(n.)'.
c3ac78
-	
c3ac78
-	If ReadableRepresentations is false, return a machine-readable
c3ac78
-	representation, e.g. "getSynset(pos, 1234)".
c3ac78
-	"""
c3ac78
-	if ReadableRepresentations:
c3ac78
-	    return str(self)
c3ac78
-	return "getSynset" + `(self.pos, self.offset)`
c3ac78
+        """If ReadableRepresentations is true, return a human-readable
c3ac78
+        representation, e.g. 'dog(n.)'.
c3ac78
+        
c3ac78
+        If ReadableRepresentations is false, return a machine-readable
c3ac78
+        representation, e.g. "getSynset(pos, 1234)".
c3ac78
+        """
c3ac78
+        if ReadableRepresentations:
c3ac78
+            return str(self)
c3ac78
+        return "getSynset" + repr((self.pos, self.offset))
c3ac78
     
c3ac78
     def __cmp__(self, other):
c3ac78
-	return _compareInstances(self, other, ('pos', 'offset'))
c3ac78
+        return _compareInstances(self, other, ('pos', 'offset'))
c3ac78
     
c3ac78
     #
c3ac78
     # Sequence protocol (a Synset's elements are its senses).
c3ac78
     #
c3ac78
-    def __nonzero__(self):
c3ac78
-	return 1
c3ac78
+    def __bool__(self):
c3ac78
+        return 1
c3ac78
     
c3ac78
     def __len__(self):
c3ac78
-	"""
c3ac78
-	>>> len(N['dog'][0].synset)
c3ac78
-	3
c3ac78
-	"""
c3ac78
-	return len(self.getSenses())
c3ac78
+        """
c3ac78
+        >>> len(N['dog'][0].synset)
c3ac78
+        3
c3ac78
+        """
c3ac78
+        return len(self.getSenses())
c3ac78
     
c3ac78
     def __getitem__(self, idx):
c3ac78
-	"""
c3ac78
-	>>> N['dog'][0].synset[0] == N['dog'][0]
c3ac78
-	1
c3ac78
-	>>> N['dog'][0].synset['dog'] == N['dog'][0]
c3ac78
-	1
c3ac78
-	>>> N['dog'][0].synset[N['dog']] == N['dog'][0]
c3ac78
-	1
c3ac78
-	>>> N['cat'][6]
c3ac78
-	'cat' in {noun: big cat, cat}
c3ac78
-	"""
c3ac78
-	senses = self.getSenses()
c3ac78
-	if isinstance(idx, Word):
c3ac78
-	    idx = idx.form
c3ac78
-	if isinstance(idx, StringType):
c3ac78
-	    idx = _index(idx, map(lambda sense:sense.form, senses)) or \
c3ac78
-		  _index(idx, map(lambda sense:sense.form, senses), _equalsIgnoreCase)
c3ac78
-	return senses[idx]
c3ac78
+        """
c3ac78
+        >>> N['dog'][0].synset[0] == N['dog'][0]
c3ac78
+        1
c3ac78
+        >>> N['dog'][0].synset['dog'] == N['dog'][0]
c3ac78
+        1
c3ac78
+        >>> N['dog'][0].synset[N['dog']] == N['dog'][0]
c3ac78
+        1
c3ac78
+        >>> N['cat'][6]
c3ac78
+        'cat' in {noun: big cat, cat}
c3ac78
+        """
c3ac78
+        senses = self.getSenses()
c3ac78
+        if isinstance(idx, Word):
c3ac78
+            idx = idx.form
c3ac78
+        if isinstance(idx, str):
c3ac78
+            idx = _index(idx, [sense.form for sense in senses]) or \
c3ac78
+                  _index(idx, [sense.form for sense in senses], _equalsIgnoreCase)
c3ac78
+        return senses[idx]
c3ac78
     
c3ac78
     def __getslice__(self, i, j):
c3ac78
-	return self.getSenses()[i:j]
c3ac78
+        return self.getSenses()[i:j]
c3ac78
 
c3ac78
 
c3ac78
 class Sense:
c3ac78
@@ -527,7 +526,7 @@
c3ac78
           VERB_FRAME_STRINGS. These list the verb frames that this
c3ac78
           Sense partipates in.  Defined only for verbs.
c3ac78
 
c3ac78
-          >>> decide = V['decide'][0].synset	# first synset for 'decide'
c3ac78
+          >>> decide = V['decide'][0].synset        # first synset for 'decide'
c3ac78
           >>> decide[0].verbFrames
c3ac78
           (8, 2, 26, 29)
c3ac78
           >>> decide[1].verbFrames
c3ac78
@@ -538,124 +537,124 @@
c3ac78
     
c3ac78
     def __init__(sense, synset, senseTuple, verbFrames=None):
c3ac78
         "Initialize a sense from a synset's senseTuple."
c3ac78
-	# synset is stored by key (pos, synset) rather than object
c3ac78
-	# reference, to avoid creating a circular reference between
c3ac78
-	# Senses and Synsets that will prevent the vm from
c3ac78
-	# garbage-collecting them.
c3ac78
-	sense.pos = synset.pos
c3ac78
+        # synset is stored by key (pos, synset) rather than object
c3ac78
+        # reference, to avoid creating a circular reference between
c3ac78
+        # Senses and Synsets that will prevent the vm from
c3ac78
+        # garbage-collecting them.
c3ac78
+        sense.pos = synset.pos
c3ac78
         "part of speech -- one of NOUN, VERB, ADJECTIVE, ADVERB"
c3ac78
-	sense.synsetOffset = synset.offset
c3ac78
+        sense.synsetOffset = synset.offset
c3ac78
         "synset key.  This is used to retrieve the sense."
c3ac78
-	sense.verbFrames = verbFrames
c3ac78
+        sense.verbFrames = verbFrames
c3ac78
         """A sequence of integers that index into
c3ac78
         VERB_FRAME_STRINGS. These list the verb frames that this
c3ac78
         Sense partipates in.  Defined only for verbs."""
c3ac78
-	(form, idString) = senseTuple
c3ac78
-	sense.position = None
c3ac78
-	if '(' in form:
c3ac78
-	    index = string.index(form, '(')
c3ac78
-	    key = form[index + 1:-1]
c3ac78
-	    form = form[:index]
c3ac78
-	    if key == 'a':
c3ac78
-		sense.position = ATTRIBUTIVE
c3ac78
-	    elif key == 'p':
c3ac78
-		sense.position = PREDICATIVE
c3ac78
-	    elif key == 'ip':
c3ac78
-		sense.position = IMMEDIATE_POSTNOMINAL
c3ac78
-	    else:
c3ac78
-		raise "unknown attribute " + key
c3ac78
-	sense.form = string.replace(form, '_', ' ')
c3ac78
+        (form, idString) = senseTuple
c3ac78
+        sense.position = None
c3ac78
+        if '(' in form:
c3ac78
+            index = form.index('(')
c3ac78
+            key = form[index + 1:-1]
c3ac78
+            form = form[:index]
c3ac78
+            if key == 'a':
c3ac78
+                sense.position = ATTRIBUTIVE
c3ac78
+            elif key == 'p':
c3ac78
+                sense.position = PREDICATIVE
c3ac78
+            elif key == 'ip':
c3ac78
+                sense.position = IMMEDIATE_POSTNOMINAL
c3ac78
+            else:
c3ac78
+                raise "unknown attribute " + key
c3ac78
+        sense.form = form.replace('_', ' ')
c3ac78
         "orthographic representation of the Word this is a Sense of."
c3ac78
     
c3ac78
     def __getattr__(self, name):
c3ac78
-	# see the note at __init__ about why 'synset' is provided as a
c3ac78
-	# 'virtual' slot
c3ac78
-	if name == 'synset':
c3ac78
-	    return getSynset(self.pos, self.synsetOffset)
c3ac78
+        # see the note at __init__ about why 'synset' is provided as a
c3ac78
+        # 'virtual' slot
c3ac78
+        if name == 'synset':
c3ac78
+            return getSynset(self.pos, self.synsetOffset)
c3ac78
         elif name == 'lexname':
c3ac78
             return self.synset.lexname
c3ac78
-	else:
c3ac78
-	    raise AttributeError, name
c3ac78
+        else:
c3ac78
+            raise AttributeError(name)
c3ac78
     
c3ac78
     def __str__(self):
c3ac78
-	"""Return a human-readable representation.
c3ac78
-	
c3ac78
-	>>> str(N['dog'])
c3ac78
-	'dog(n.)'
c3ac78
-	"""
c3ac78
-	return `self.form` + " in " + str(self.synset)
c3ac78
+        """Return a human-readable representation.
c3ac78
+        
c3ac78
+        >>> str(N['dog'])
c3ac78
+        'dog(n.)'
c3ac78
+        """
c3ac78
+        return repr(self.form) + " in " + str(self.synset)
c3ac78
     
c3ac78
     def __repr__(self):
c3ac78
-	"""If ReadableRepresentations is true, return a human-readable
c3ac78
-	representation, e.g. 'dog(n.)'.
c3ac78
-	
c3ac78
-	If ReadableRepresentations is false, return a machine-readable
c3ac78
-	representation, e.g. "getWord('dog', 'noun')".
c3ac78
-	"""
c3ac78
-	if ReadableRepresentations:
c3ac78
-	    return str(self)
c3ac78
-	return "%s[%s]" % (`self.synset`, `self.form`)
c3ac78
+        """If ReadableRepresentations is true, return a human-readable
c3ac78
+        representation, e.g. 'dog(n.)'.
c3ac78
+        
c3ac78
+        If ReadableRepresentations is false, return a machine-readable
c3ac78
+        representation, e.g. "getWord('dog', 'noun')".
c3ac78
+        """
c3ac78
+        if ReadableRepresentations:
c3ac78
+            return str(self)
c3ac78
+        return "%s[%s]" % (repr(self.synset), repr(self.form))
c3ac78
     
c3ac78
     def getPointers(self, pointerType=None):
c3ac78
-	"""Return a sequence of Pointers.
c3ac78
-	
c3ac78
+        """Return a sequence of Pointers.
c3ac78
+        
c3ac78
         If pointerType is specified, only pointers of that type are
c3ac78
         returned.  In this case, pointerType should be an element of
c3ac78
         POINTER_TYPES.
c3ac78
-	
c3ac78
-	>>> N['dog'][0].getPointers()[:5]
c3ac78
-	(hypernym -> {noun: canine, canid}, member meronym -> {noun: Canis, genus Canis}, member meronym -> {noun: pack}, hyponym -> {noun: pooch, doggie, doggy, barker, bow-wow}, hyponym -> {noun: cur, mongrel, mutt})
c3ac78
-	>>> N['dog'][0].getPointers(HYPERNYM)
c3ac78
-	(hypernym -> {noun: canine, canid},)
c3ac78
-	"""
c3ac78
-	senseIndex = _index(self, self.synset.getSenses())
c3ac78
-	def pointsFromThisSense(pointer, selfIndex=senseIndex):
c3ac78
-	    return pointer.sourceIndex == 0 or pointer.sourceIndex - 1 == selfIndex
c3ac78
-	return filter(pointsFromThisSense, self.synset.getPointers(pointerType))
c3ac78
+        
c3ac78
+        >>> N['dog'][0].getPointers()[:5]
c3ac78
+        (hypernym -> {noun: canine, canid}, member meronym -> {noun: Canis, genus Canis}, member meronym -> {noun: pack}, hyponym -> {noun: pooch, doggie, doggy, barker, bow-wow}, hyponym -> {noun: cur, mongrel, mutt})
c3ac78
+        >>> N['dog'][0].getPointers(HYPERNYM)
c3ac78
+        (hypernym -> {noun: canine, canid},)
c3ac78
+        """
c3ac78
+        senseIndex = _index(self, self.synset.getSenses())
c3ac78
+        def pointsFromThisSense(pointer, selfIndex=senseIndex):
c3ac78
+            return pointer.sourceIndex == 0 or pointer.sourceIndex - 1 == selfIndex
c3ac78
+        return list(filter(pointsFromThisSense, self.synset.getPointers(pointerType)))
c3ac78
 
c3ac78
     pointers = getPointers # backwards compatability
c3ac78
 
c3ac78
     def getPointerTargets(self, pointerType=None):
c3ac78
-	"""Return a sequence of Senses or Synsets.
c3ac78
-	
c3ac78
+        """Return a sequence of Senses or Synsets.
c3ac78
+        
c3ac78
         If pointerType is specified, only targets of pointers of that
c3ac78
         type are returned.  In this case, pointerType should be an
c3ac78
         element of POINTER_TYPES.
c3ac78
-	
c3ac78
-	>>> N['dog'][0].getPointerTargets()[:5]
c3ac78
-	[{noun: canine, canid}, {noun: Canis, genus Canis}, {noun: pack}, {noun: pooch, doggie, doggy, barker, bow-wow}, {noun: cur, mongrel, mutt}]
c3ac78
-	>>> N['dog'][0].getPointerTargets(HYPERNYM)
c3ac78
-	[{noun: canine, canid}]
c3ac78
-	"""
c3ac78
-	return map(Pointer.target, self.getPointers(pointerType))
c3ac78
+        
c3ac78
+        >>> N['dog'][0].getPointerTargets()[:5]
c3ac78
+        [{noun: canine, canid}, {noun: Canis, genus Canis}, {noun: pack}, {noun: pooch, doggie, doggy, barker, bow-wow}, {noun: cur, mongrel, mutt}]
c3ac78
+        >>> N['dog'][0].getPointerTargets(HYPERNYM)
c3ac78
+        [{noun: canine, canid}]
c3ac78
+        """
c3ac78
+        return list(map(Pointer.target, self.getPointers(pointerType)))
c3ac78
 
c3ac78
     pointerTargets = getPointerTargets # backwards compatability
c3ac78
     
c3ac78
     def getSenses(self):
c3ac78
-	return self,
c3ac78
+        return self,
c3ac78
 
c3ac78
     senses = getSenses # backwards compatability
c3ac78
 
c3ac78
     def isTagged(self):
c3ac78
-	"""Return 1 if any sense is tagged.
c3ac78
-	
c3ac78
-	>>> N['dog'][0].isTagged()
c3ac78
-	1
c3ac78
-	>>> N['dog'][1].isTagged()
c3ac78
-	0
c3ac78
-	"""
c3ac78
-	word = self.word()
c3ac78
-	return _index(self, word.getSenses()) < word.taggedSenseCount
c3ac78
+        """Return 1 if any sense is tagged.
c3ac78
+        
c3ac78
+        >>> N['dog'][0].isTagged()
c3ac78
+        1
c3ac78
+        >>> N['dog'][1].isTagged()
c3ac78
+        0
c3ac78
+        """
c3ac78
+        word = self.word()
c3ac78
+        return _index(self, word.getSenses()) < word.taggedSenseCount
c3ac78
     
c3ac78
     def getWord(self):
c3ac78
-	return getWord(self.form, self.pos)
c3ac78
+        return getWord(self.form, self.pos)
c3ac78
 
c3ac78
     word = getWord # backwards compatability
c3ac78
 
c3ac78
     def __cmp__(self, other):
c3ac78
-	def senseIndex(sense, synset=self.synset):
c3ac78
-	    return _index(sense, synset.getSenses(), testfn=lambda a,b: a.form == b.form)
c3ac78
-	return _compareInstances(self, other, ('synset',)) or cmp(senseIndex(self), senseIndex(other))
c3ac78
+        def senseIndex(sense, synset=self.synset):
c3ac78
+            return _index(sense, synset.getSenses(), testfn=lambda a,b: a.form == b.form)
c3ac78
+        return _compareInstances(self, other, ('synset',)) or cmp(senseIndex(self), senseIndex(other))
c3ac78
 
c3ac78
 
c3ac78
 class Pointer:
c3ac78
@@ -670,21 +669,21 @@
c3ac78
     """
c3ac78
     
c3ac78
     _POINTER_TYPE_TABLE = {
c3ac78
-	'!': ANTONYM,
c3ac78
+        '!': ANTONYM,
c3ac78
         '@': HYPERNYM,
c3ac78
         '~': HYPONYM,
c3ac78
-	'=': ATTRIBUTE,
c3ac78
+        '=': ATTRIBUTE,
c3ac78
         '^': ALSO_SEE,
c3ac78
         '*': ENTAILMENT,
c3ac78
         '>': CAUSE,
c3ac78
-	'$': VERB_GROUP,
c3ac78
-	'#m': MEMBER_MERONYM,
c3ac78
+        '$': VERB_GROUP,
c3ac78
+        '#m': MEMBER_MERONYM,
c3ac78
         '#s': SUBSTANCE_MERONYM,
c3ac78
         '#p': PART_MERONYM,
c3ac78
-	'%m': MEMBER_HOLONYM,
c3ac78
+        '%m': MEMBER_HOLONYM,
c3ac78
         '%s': SUBSTANCE_HOLONYM,
c3ac78
         '%p': PART_HOLONYM,
c3ac78
-	'&': SIMILAR,
c3ac78
+        '&': SIMILAR,
c3ac78
         '<': PARTICIPLE_OF,
c3ac78
         '\\': PERTAINYM,
c3ac78
         # New in wn 2.0:
c3ac78
@@ -698,57 +697,57 @@
c3ac78
         }
c3ac78
     
c3ac78
     def __init__(self, sourceOffset, pointerTuple):
c3ac78
-	(type, offset, pos, indices) = pointerTuple
c3ac78
-	# dnaber: try to adapt to WordNet 2.1:
c3ac78
-	if type == "@i":
c3ac78
-		type = "@"
c3ac78
-	if type == "~i":
c3ac78
-		type = "~"
c3ac78
-	# /dnaber
c3ac78
-	self.type = Pointer._POINTER_TYPE_TABLE[type]
c3ac78
+        (type, offset, pos, indices) = pointerTuple
c3ac78
+        # dnaber: try to adapt to WordNet 2.1:
c3ac78
+        if type == "@i":
c3ac78
+                type = "@"
c3ac78
+        if type == "~i":
c3ac78
+                type = "~"
c3ac78
+        # /dnaber
c3ac78
+        self.type = Pointer._POINTER_TYPE_TABLE[type]
c3ac78
         """One of POINTER_TYPES."""
c3ac78
-	self.sourceOffset = sourceOffset
c3ac78
-	self.targetOffset = int(offset)
c3ac78
-	self.pos = _normalizePOS(pos)
c3ac78
+        self.sourceOffset = sourceOffset
c3ac78
+        self.targetOffset = int(offset)
c3ac78
+        self.pos = _normalizePOS(pos)
c3ac78
         """part of speech -- one of NOUN, VERB, ADJECTIVE, ADVERB"""
c3ac78
-	indices = string.atoi(indices, 16)
c3ac78
-	self.sourceIndex = indices >> 8
c3ac78
-	self.targetIndex = indices & 255
c3ac78
+        indices = int(indices, 16)
c3ac78
+        self.sourceIndex = indices >> 8
c3ac78
+        self.targetIndex = indices & 255
c3ac78
     
c3ac78
     def getSource(self):
c3ac78
-	synset = getSynset(self.pos, self.sourceOffset)
c3ac78
-	if self.sourceIndex:
c3ac78
-	    return synset[self.sourceIndex - 1]
c3ac78
-	else:
c3ac78
-	    return synset
c3ac78
+        synset = getSynset(self.pos, self.sourceOffset)
c3ac78
+        if self.sourceIndex:
c3ac78
+            return synset[self.sourceIndex - 1]
c3ac78
+        else:
c3ac78
+            return synset
c3ac78
 
c3ac78
     source = getSource # backwards compatability
c3ac78
 
c3ac78
     def getTarget(self):
c3ac78
-	synset = getSynset(self.pos, self.targetOffset)
c3ac78
-	if self.targetIndex:
c3ac78
-	    return synset[self.targetIndex - 1]
c3ac78
-	else:
c3ac78
-	    return synset
c3ac78
+        synset = getSynset(self.pos, self.targetOffset)
c3ac78
+        if self.targetIndex:
c3ac78
+            return synset[self.targetIndex - 1]
c3ac78
+        else:
c3ac78
+            return synset
c3ac78
 
c3ac78
     target = getTarget # backwards compatability
c3ac78
     
c3ac78
     def __str__(self):
c3ac78
-	return self.type + " -> " + str(self.target())
c3ac78
+        return self.type + " -> " + str(self.target())
c3ac78
     
c3ac78
     def __repr__(self):
c3ac78
-	if ReadableRepresentations:
c3ac78
-	    return str(self)
c3ac78
-	return "<" + str(self) + ">"
c3ac78
+        if ReadableRepresentations:
c3ac78
+            return str(self)
c3ac78
+        return "<" + str(self) + ">"
c3ac78
     
c3ac78
     def __cmp__(self, other):
c3ac78
-	diff = _compareInstances(self, other, ('pos', 'sourceOffset'))
c3ac78
-	if diff:
c3ac78
-	    return diff
c3ac78
-	synset = self.source()
c3ac78
-	def pointerIndex(sense, synset=synset):
c3ac78
-	    return _index(sense, synset.getPointers(), testfn=lambda a,b: not _compareInstances(a, b, ('type', 'sourceIndex', 'targetIndex')))
c3ac78
-	return cmp(pointerIndex(self), pointerIndex(other))
c3ac78
+        diff = _compareInstances(self, other, ('pos', 'sourceOffset'))
c3ac78
+        if diff:
c3ac78
+            return diff
c3ac78
+        synset = self.source()
c3ac78
+        def pointerIndex(sense, synset=synset):
c3ac78
+            return _index(sense, synset.getPointers(), testfn=lambda a,b: not _compareInstances(a, b, ('type', 'sourceIndex', 'targetIndex')))
c3ac78
+        return cmp(pointerIndex(self), pointerIndex(other))
c3ac78
 
c3ac78
 
c3ac78
 # Loading the lexnames
c3ac78
@@ -769,7 +768,7 @@
c3ac78
 
c3ac78
 def setupLexnames():
c3ac78
     for l in open(WNSEARCHDIR+'/lexnames').readlines():
c3ac78
-        i,name,category = string.split(l)
c3ac78
+        i,name,category = l.split()
c3ac78
         Lexname(name,PartsOfSpeech[int(category)-1])
c3ac78
 
c3ac78
 setupLexnames()
c3ac78
@@ -802,59 +801,59 @@
c3ac78
     """
c3ac78
     
c3ac78
     def __init__(self, pos, filenameroot):
c3ac78
-	self.pos = pos
c3ac78
+        self.pos = pos
c3ac78
         """part of speech -- one of NOUN, VERB, ADJECTIVE, ADVERB"""
c3ac78
-	self.indexFile = _IndexFile(pos, filenameroot)
c3ac78
-	self.dataFile = open(_dataFilePathname(filenameroot), _FILE_OPEN_MODE)
c3ac78
+        self.indexFile = _IndexFile(pos, filenameroot)
c3ac78
+        self.dataFile = open(_dataFilePathname(filenameroot), _FILE_OPEN_MODE)
c3ac78
     
c3ac78
     def __repr__(self):
c3ac78
-	dictionaryVariables = {N: 'N', V: 'V', ADJ: 'ADJ', ADV: 'ADV'}
c3ac78
-	if dictionaryVariables.get(self):
c3ac78
-	    return self.__module__ + "." + dictionaryVariables[self]
c3ac78
-	return "<%s.%s instance for %s>" % (self.__module__, "Dictionary", self.pos)
c3ac78
+        dictionaryVariables = {N: 'N', V: 'V', ADJ: 'ADJ', ADV: 'ADV'}
c3ac78
+        if dictionaryVariables.get(self):
c3ac78
+            return self.__module__ + "." + dictionaryVariables[self]
c3ac78
+        return "<%s.%s instance for %s>" % (self.__module__, "Dictionary", self.pos)
c3ac78
     
c3ac78
     def getWord(self, form, line=None):
c3ac78
-	key = string.replace(string.lower(form), ' ', '_')
c3ac78
-	pos = self.pos
c3ac78
-	def loader(key=key, line=line, indexFile=self.indexFile):
c3ac78
-	    line = line or indexFile.get(key)
c3ac78
-	    return line and Word(line)
c3ac78
-	word = _entityCache.get((pos, key), loader)
c3ac78
-	if word:
c3ac78
-	    return word
c3ac78
-	else:
c3ac78
-	    raise KeyError, "%s is not in the %s database" % (`form`, `pos`)
c3ac78
+        key = form.lower().replace(' ', '_')
c3ac78
+        pos = self.pos
c3ac78
+        def loader(key=key, line=line, indexFile=self.indexFile):
c3ac78
+            line = line or indexFile.get(key)
c3ac78
+            return line and Word(line)
c3ac78
+        word = _entityCache.get((pos, key), loader)
c3ac78
+        if word != None:
c3ac78
+            return word
c3ac78
+        else:
c3ac78
+            raise KeyError("%s is not in the %s database" % (repr(form), repr(pos)))
c3ac78
     
c3ac78
     def getSynset(self, offset):
c3ac78
-	pos = self.pos
c3ac78
-	def loader(pos=pos, offset=offset, dataFile=self.dataFile):
c3ac78
-	    return Synset(pos, offset, _lineAt(dataFile, offset))
c3ac78
-	return _entityCache.get((pos, offset), loader)
c3ac78
+        pos = self.pos
c3ac78
+        def loader(pos=pos, offset=offset, dataFile=self.dataFile):
c3ac78
+            return Synset(pos, offset, _lineAt(dataFile, offset))
c3ac78
+        return _entityCache.get((pos, offset), loader)
c3ac78
     
c3ac78
     def _buildIndexCacheFile(self):
c3ac78
-	self.indexFile._buildIndexCacheFile()
c3ac78
+        self.indexFile._buildIndexCacheFile()
c3ac78
     
c3ac78
     #
c3ac78
     # Sequence protocol (a Dictionary's items are its Words)
c3ac78
     #
c3ac78
-    def __nonzero__(self):
c3ac78
-	"""Return false.  (This is to avoid scanning the whole index file
c3ac78
-	to compute len when a Dictionary is used in test position.)
c3ac78
-	
c3ac78
-	>>> N and 'true'
c3ac78
-	'true'
c3ac78
-	"""
c3ac78
-	return 1
c3ac78
+    def __bool__(self):
c3ac78
+        """Return false.  (This is to avoid scanning the whole index file
c3ac78
+        to compute len when a Dictionary is used in test position.)
c3ac78
+        
c3ac78
+        >>> N and 'true'
c3ac78
+        'true'
c3ac78
+        """
c3ac78
+        return 1
c3ac78
     
c3ac78
     def __len__(self):
c3ac78
-	"""Return the number of index entries.
c3ac78
-	
c3ac78
-	>>> len(ADJ)
c3ac78
-	21435
c3ac78
-	"""
c3ac78
-	if not hasattr(self, 'length'):
c3ac78
-	    self.length = len(self.indexFile)
c3ac78
-	return self.length
c3ac78
+        """Return the number of index entries.
c3ac78
+        
c3ac78
+        >>> len(ADJ)
c3ac78
+        21435
c3ac78
+        """
c3ac78
+        if not hasattr(self, 'length'):
c3ac78
+            self.length = len(self.indexFile)
c3ac78
+        return self.length
c3ac78
     
c3ac78
     def __getslice__(self, a, b):
c3ac78
         results = []
c3ac78
@@ -868,22 +867,22 @@
c3ac78
         return results
c3ac78
 
c3ac78
     def __getitem__(self, index):
c3ac78
-	"""If index is a String, return the Word whose form is
c3ac78
-	index.  If index is an integer n, return the Word
c3ac78
-	indexed by the n'th Word in the Index file.
c3ac78
-	
c3ac78
-	>>> N['dog']
c3ac78
-	dog(n.)
c3ac78
-	>>> N[0]
c3ac78
-	'hood(n.)
c3ac78
-	"""
c3ac78
-	if isinstance(index, StringType):
c3ac78
-	    return self.getWord(index)
c3ac78
-	elif isinstance(index, IntType):
c3ac78
-	    line = self.indexFile[index]
c3ac78
-	    return self.getWord(string.replace(line[:string.find(line, ' ')], '_', ' '), line)
c3ac78
-	else:
c3ac78
-	    raise TypeError, "%s is not a String or Int" % `index`
c3ac78
+        """If index is a String, return the Word whose form is
c3ac78
+        index.  If index is an integer n, return the Word
c3ac78
+        indexed by the n'th Word in the Index file.
c3ac78
+        
c3ac78
+        >>> N['dog']
c3ac78
+        dog(n.)
c3ac78
+        >>> N[0]
c3ac78
+        'hood(n.)
c3ac78
+        """
c3ac78
+        if isinstance(index, str):
c3ac78
+            return self.getWord(index)
c3ac78
+        elif isinstance(index, int):
c3ac78
+            line = self.indexFile[index]
c3ac78
+            return self.getWord(string.replace(line[:string.find(line, ' ')], '_', ' '), line)
c3ac78
+        else:
c3ac78
+            raise TypeError("%s is not a String or Int" % repr(index))
c3ac78
     
c3ac78
     #
c3ac78
     # Dictionary protocol
c3ac78
@@ -892,54 +891,54 @@
c3ac78
     #
c3ac78
 
c3ac78
     def get(self, key, default=None):
c3ac78
-	"""Return the Word whose form is _key_, or _default_.
c3ac78
-	
c3ac78
-	>>> N.get('dog')
c3ac78
-	dog(n.)
c3ac78
-	>>> N.get('inu')
c3ac78
-	"""
c3ac78
-	try:
c3ac78
-	    return self[key]
c3ac78
-	except LookupError:
c3ac78
-	    return default
c3ac78
+        """Return the Word whose form is _key_, or _default_.
c3ac78
+        
c3ac78
+        >>> N.get('dog')
c3ac78
+        dog(n.)
c3ac78
+        >>> N.get('inu')
c3ac78
+        """
c3ac78
+        try:
c3ac78
+            return self[key]
c3ac78
+        except LookupError:
c3ac78
+            return default
c3ac78
     
c3ac78
     def keys(self):
c3ac78
-	"""Return a sorted list of strings that index words in this
c3ac78
-	dictionary."""
c3ac78
-	return self.indexFile.keys()
c3ac78
+        """Return a sorted list of strings that index words in this
c3ac78
+        dictionary."""
c3ac78
+        return list(self.indexFile.keys())
c3ac78
     
c3ac78
     def has_key(self, form):
c3ac78
-	"""Return true iff the argument indexes a word in this dictionary.
c3ac78
-	
c3ac78
-	>>> N.has_key('dog')
c3ac78
-	1
c3ac78
-	>>> N.has_key('inu')
c3ac78
-	0
c3ac78
-	"""
c3ac78
-	return self.indexFile.has_key(form)
c3ac78
+        """Return true iff the argument indexes a word in this dictionary.
c3ac78
+        
c3ac78
+        >>> N.has_key('dog')
c3ac78
+        1
c3ac78
+        >>> N.has_key('inu')
c3ac78
+        0
c3ac78
+        """
c3ac78
+        return form in self.indexFile
c3ac78
     
c3ac78
     #
c3ac78
     # Testing
c3ac78
     #
c3ac78
     
c3ac78
     def _testKeys(self):
c3ac78
-	"""Verify that index lookup can find each word in the index file."""
c3ac78
-	print "Testing: ", self
c3ac78
-	file = open(self.indexFile.file.name, _FILE_OPEN_MODE)
c3ac78
-	counter = 0
c3ac78
-	while 1:
c3ac78
-	    line = file.readline()
c3ac78
-	    if line == '': break
c3ac78
-	    if line[0] != ' ':
c3ac78
-		key = string.replace(line[:string.find(line, ' ')], '_', ' ')
c3ac78
-		if (counter % 1000) == 0:
c3ac78
-		    print "%s..." % (key,),
c3ac78
-		    import sys
c3ac78
-		    sys.stdout.flush()
c3ac78
-		counter = counter + 1
c3ac78
-		self[key]
c3ac78
-	file.close()
c3ac78
-	print "done."
c3ac78
+        """Verify that index lookup can find each word in the index file."""
c3ac78
+        print("Testing: ", self)
c3ac78
+        file = open(self.indexFile.file.name, _FILE_OPEN_MODE)
c3ac78
+        counter = 0
c3ac78
+        while 1:
c3ac78
+            line = file.readline()
c3ac78
+            if line == '': break
c3ac78
+            if line[0] != ' ':
c3ac78
+                key = string.replace(line[:string.find(line, ' ')], '_', ' ')
c3ac78
+                if (counter % 1000) == 0:
c3ac78
+                    print("%s..." % (key,), end=' ')
c3ac78
+                    import sys
c3ac78
+                    sys.stdout.flush()
c3ac78
+                counter = counter + 1
c3ac78
+                self[key]
c3ac78
+        file.close()
c3ac78
+        print("done.")
c3ac78
 
c3ac78
 
c3ac78
 class _IndexFile:
c3ac78
@@ -947,69 +946,69 @@
c3ac78
     Sequence and Dictionary interface to a sorted index file."""
c3ac78
     
c3ac78
     def __init__(self, pos, filenameroot):
c3ac78
-	self.pos = pos
c3ac78
-	self.file = open(_indexFilePathname(filenameroot), _FILE_OPEN_MODE)
c3ac78
-	self.offsetLineCache = {}   # Table of (pathname, offset) -> (line, nextOffset)
c3ac78
-	self.rewind()
c3ac78
-	self.shelfname = os.path.join(WNSEARCHDIR, pos + ".pyidx")
c3ac78
-	try:
c3ac78
-	    import shelve
c3ac78
-	    self.indexCache = shelve.open(self.shelfname, 'r')
c3ac78
-	except:
c3ac78
-	    pass
c3ac78
+        self.pos = pos
c3ac78
+        self.file = open(_indexFilePathname(filenameroot), _FILE_OPEN_MODE)
c3ac78
+        self.offsetLineCache = {}   # Table of (pathname, offset) -> (line, nextOffset)
c3ac78
+        self.rewind()
c3ac78
+        self.shelfname = os.path.join(WNSEARCHDIR, pos + ".pyidx")
c3ac78
+        try:
c3ac78
+            import shelve
c3ac78
+            self.indexCache = shelve.open(self.shelfname, 'r')
c3ac78
+        except:
c3ac78
+            pass
c3ac78
     
c3ac78
     def rewind(self):
c3ac78
-	self.file.seek(0)
c3ac78
-	while 1:
c3ac78
-	    offset = self.file.tell()
c3ac78
-	    line = self.file.readline()
c3ac78
-	    if (line[0] != ' '):
c3ac78
-		break
c3ac78
-	self.nextIndex = 0
c3ac78
-	self.nextOffset = offset
c3ac78
+        self.file.seek(0)
c3ac78
+        while 1:
c3ac78
+            offset = self.file.tell()
c3ac78
+            line = self.file.readline()
c3ac78
+            if (line[0] != ' '):
c3ac78
+                break
c3ac78
+        self.nextIndex = 0
c3ac78
+        self.nextOffset = offset
c3ac78
     
c3ac78
     #
c3ac78
     # Sequence protocol (an _IndexFile's items are its lines)
c3ac78
     #
c3ac78
-    def __nonzero__(self):
c3ac78
-	return 1
c3ac78
+    def __bool__(self):
c3ac78
+        return 1
c3ac78
     
c3ac78
     def __len__(self):
c3ac78
-	if hasattr(self, 'indexCache'):
c3ac78
-	    return len(self.indexCache)
c3ac78
-	self.rewind()
c3ac78
-	lines = 0
c3ac78
-	while 1:
c3ac78
-	    line = self.file.readline()
c3ac78
-	    if line == "":
c3ac78
-		break
c3ac78
-	    lines = lines + 1
c3ac78
-	return lines
c3ac78
+        if hasattr(self, 'indexCache'):
c3ac78
+            return len(self.indexCache)
c3ac78
+        self.rewind()
c3ac78
+        lines = 0
c3ac78
+        while 1:
c3ac78
+            line = self.file.readline()
c3ac78
+            if line == "":
c3ac78
+                break
c3ac78
+            lines = lines + 1
c3ac78
+        return lines
c3ac78
     
c3ac78
-    def __nonzero__(self):
c3ac78
-	return 1
c3ac78
+    def __bool__(self):
c3ac78
+        return 1
c3ac78
     
c3ac78
     def __getitem__(self, index):
c3ac78
-	if isinstance(index, StringType):
c3ac78
-	    if hasattr(self, 'indexCache'):
c3ac78
-		return self.indexCache[index]
c3ac78
-	    return binarySearchFile(self.file, index, self.offsetLineCache, 8)
c3ac78
-	elif isinstance(index, IntType):
c3ac78
-	    if hasattr(self, 'indexCache'):
c3ac78
-		return self.get(self.keys[index])
c3ac78
-	    if index < self.nextIndex:
c3ac78
-		self.rewind()
c3ac78
-	    while self.nextIndex <= index:
c3ac78
-		self.file.seek(self.nextOffset)
c3ac78
-		line = self.file.readline()
c3ac78
-		if line == "":
c3ac78
-		    raise IndexError, "index out of range"
c3ac78
-		self.nextIndex = self.nextIndex + 1
c3ac78
-		self.nextOffset = self.file.tell()
c3ac78
-	    return line
c3ac78
-	else:
c3ac78
-	    raise TypeError, "%s is not a String or Int" % `index`
c3ac78
-	
c3ac78
+        if isinstance(index, str):
c3ac78
+            if hasattr(self, 'indexCache'):
c3ac78
+                return self.indexCache[index]
c3ac78
+            return binarySearchFile(self.file, index, self.offsetLineCache, 8)
c3ac78
+        elif isinstance(index, int):
c3ac78
+            if hasattr(self, 'indexCache'):
c3ac78
+                return self.get(self.keys[index])
c3ac78
+            if index < self.nextIndex:
c3ac78
+                self.rewind()
c3ac78
+            while self.nextIndex <= index:
c3ac78
+                self.file.seek(self.nextOffset)
c3ac78
+                line = self.file.readline()
c3ac78
+                if line == "":
c3ac78
+                    raise IndexError("index out of range")
c3ac78
+                self.nextIndex = self.nextIndex + 1
c3ac78
+                self.nextOffset = self.file.tell()
c3ac78
+            return line
c3ac78
+        else:
c3ac78
+            raise TypeError("%s is not a String or Int" % repr(index))
c3ac78
+        
c3ac78
     #
c3ac78
     # Dictionary protocol
c3ac78
     #
c3ac78
@@ -1017,62 +1016,62 @@
c3ac78
     #
c3ac78
     
c3ac78
     def get(self, key, default=None):
c3ac78
-	try:
c3ac78
-	    return self[key]
c3ac78
-	except LookupError:
c3ac78
-	    return default
c3ac78
+        try:
c3ac78
+            return self[key]
c3ac78
+        except LookupError:
c3ac78
+            return default
c3ac78
     
c3ac78
     def keys(self):
c3ac78
-	if hasattr(self, 'indexCache'):
c3ac78
-	    keys = self.indexCache.keys()
c3ac78
-	    keys.sort()
c3ac78
-	    return keys
c3ac78
-	else:
c3ac78
-	    keys = []
c3ac78
-	    self.rewind()
c3ac78
-	    while 1:
c3ac78
-		line = self.file.readline()
c3ac78
-		if not line: break
c3ac78
+        if hasattr(self, 'indexCache'):
c3ac78
+            keys = list(self.indexCache.keys())
c3ac78
+            keys.sort()
c3ac78
+            return keys
c3ac78
+        else:
c3ac78
+            keys = []
c3ac78
+            self.rewind()
c3ac78
+            while 1:
c3ac78
+                line = self.file.readline()
c3ac78
+                if not line: break
c3ac78
                 key = line.split(' ', 1)[0]
c3ac78
-		keys.append(key.replace('_', ' '))
c3ac78
-	    return keys
c3ac78
+                keys.append(key.replace('_', ' '))
c3ac78
+            return keys
c3ac78
     
c3ac78
     def has_key(self, key):
c3ac78
-	key = key.replace(' ', '_') # test case: V['haze over']
c3ac78
-	if hasattr(self, 'indexCache'):
c3ac78
-	    return self.indexCache.has_key(key)
c3ac78
-	return self.get(key) != None
c3ac78
+        key = key.replace(' ', '_') # test case: V['haze over']
c3ac78
+        if hasattr(self, 'indexCache'):
c3ac78
+            return key in self.indexCache
c3ac78
+        return self.get(key) != None
c3ac78
     
c3ac78
     #
c3ac78
     # Index file
c3ac78
     #
c3ac78
     
c3ac78
     def _buildIndexCacheFile(self):
c3ac78
-	import shelve
c3ac78
-	import os
c3ac78
-	print "Building %s:" % (self.shelfname,),
c3ac78
-	tempname = self.shelfname + ".temp"
c3ac78
-	try:
c3ac78
-	    indexCache = shelve.open(tempname)
c3ac78
-	    self.rewind()
c3ac78
-	    count = 0
c3ac78
-	    while 1:
c3ac78
-		offset, line = self.file.tell(), self.file.readline()
c3ac78
-		if not line: break
c3ac78
-		key = line[:string.find(line, ' ')]
c3ac78
-		if (count % 1000) == 0:
c3ac78
-		    print "%s..." % (key,),
c3ac78
-		    import sys
c3ac78
-		    sys.stdout.flush()
c3ac78
-		indexCache[key] = line
c3ac78
-		count = count + 1
c3ac78
-	    indexCache.close()
c3ac78
-	    os.rename(tempname, self.shelfname)
c3ac78
-	finally:
c3ac78
-	    try: os.remove(tempname)
c3ac78
-	    except: pass
c3ac78
-	print "done."
c3ac78
-	self.indexCache = shelve.open(self.shelfname, 'r')
c3ac78
+        import shelve
c3ac78
+        import os
c3ac78
+        print("Building %s:" % (self.shelfname,), end=' ')
c3ac78
+        tempname = self.shelfname + ".temp"
c3ac78
+        try:
c3ac78
+            indexCache = shelve.open(tempname)
c3ac78
+            self.rewind()
c3ac78
+            count = 0
c3ac78
+            while 1:
c3ac78
+                offset, line = self.file.tell(), self.file.readline()
c3ac78
+                if not line: break
c3ac78
+                key = line[:string.find(line, ' ')]
c3ac78
+                if (count % 1000) == 0:
c3ac78
+                    print("%s..." % (key,), end=' ')
c3ac78
+                    import sys
c3ac78
+                    sys.stdout.flush()
c3ac78
+                indexCache[key] = line
c3ac78
+                count = count + 1
c3ac78
+            indexCache.close()
c3ac78
+            os.rename(tempname, self.shelfname)
c3ac78
+        finally:
c3ac78
+            try: os.remove(tempname)
c3ac78
+            except: pass
c3ac78
+        print("done.")
c3ac78
+        self.indexCache = shelve.open(self.shelfname, 'r')
c3ac78
 
c3ac78
 
c3ac78
 #
c3ac78
@@ -1099,20 +1098,20 @@
c3ac78
 
c3ac78
 def _requirePointerType(pointerType):
c3ac78
     if pointerType not in POINTER_TYPES:
c3ac78
-	raise TypeError, `pointerType` + " is not a pointer type"
c3ac78
+        raise TypeError(repr(pointerType) + " is not a pointer type")
c3ac78
     return pointerType
c3ac78
 
c3ac78
 def _compareInstances(a, b, fields):
c3ac78
     """"Return -1, 0, or 1 according to a comparison first by type,
c3ac78
     then by class, and finally by each of fields.""" # " <- for emacs
c3ac78
     if not hasattr(b, '__class__'):
c3ac78
-	return cmp(type(a), type(b))
c3ac78
+        return cmp(type(a), type(b))
c3ac78
     elif a.__class__ != b.__class__:
c3ac78
-	return cmp(a.__class__, b.__class__)
c3ac78
+        return cmp(a.__class__, b.__class__)
c3ac78
     for field in fields:
c3ac78
-	diff = cmp(getattr(a, field), getattr(b, field))
c3ac78
-	if diff:
c3ac78
-	    return diff
c3ac78
+        diff = cmp(getattr(a, field), getattr(b, field))
c3ac78
+        if diff:
c3ac78
+            return diff
c3ac78
     return 0
c3ac78
 
c3ac78
 def _equalsIgnoreCase(a, b):
c3ac78
@@ -1123,21 +1122,21 @@
c3ac78
     >>> _equalsIgnoreCase('dOg', 'DOG')
c3ac78
     1
c3ac78
     """
c3ac78
-    return a == b or string.lower(a) == string.lower(b)
c3ac78
+    return a == b or a.lower() == b.lower()
c3ac78
 
c3ac78
 #
c3ac78
 # File utilities
c3ac78
 #
c3ac78
 def _dataFilePathname(filenameroot):
c3ac78
     if os.name in ('dos', 'nt'):
c3ac78
-	path = os.path.join(WNSEARCHDIR, filenameroot + ".dat")
c3ac78
+        path = os.path.join(WNSEARCHDIR, filenameroot + ".dat")
c3ac78
         if os.path.exists(path):
c3ac78
             return path
c3ac78
     return os.path.join(WNSEARCHDIR, "data." + filenameroot)
c3ac78
 
c3ac78
 def _indexFilePathname(filenameroot):
c3ac78
     if os.name in ('dos', 'nt'):
c3ac78
-	path = os.path.join(WNSEARCHDIR, filenameroot + ".idx")
c3ac78
+        path = os.path.join(WNSEARCHDIR, filenameroot + ".idx")
c3ac78
         if os.path.exists(path):
c3ac78
             return path
c3ac78
     return os.path.join(WNSEARCHDIR, "index." + filenameroot)
c3ac78
@@ -1154,30 +1153,30 @@
c3ac78
         #if count > 20:
c3ac78
         #    raise "infinite loop"
c3ac78
         lastState = start, end
c3ac78
-	middle = (start + end) / 2
c3ac78
-	if cache.get(middle):
c3ac78
-	    offset, line = cache[middle]
c3ac78
-	else:
c3ac78
-	    file.seek(max(0, middle - 1))
c3ac78
-	    if middle > 0:
c3ac78
-		file.readline()
c3ac78
-	    offset, line = file.tell(), file.readline()
c3ac78
-	    if currentDepth < cacheDepth:
c3ac78
-		cache[middle] = (offset, line)
c3ac78
+        middle = (start + end) / 2
c3ac78
+        if cache.get(middle):
c3ac78
+            offset, line = cache[middle]
c3ac78
+        else:
c3ac78
+            file.seek(max(0, middle - 1))
c3ac78
+            if middle > 0:
c3ac78
+                file.readline()
c3ac78
+            offset, line = file.tell(), file.readline()
c3ac78
+            if currentDepth < cacheDepth:
c3ac78
+                cache[middle] = (offset, line)
c3ac78
         #print start, middle, end, offset, line,
c3ac78
-	if offset > end:
c3ac78
-	    assert end != middle - 1, "infinite loop"
c3ac78
-	    end = middle - 1
c3ac78
-	elif line[:keylen] == key:# and line[keylen + 1] == ' ':
c3ac78
-	    return line
c3ac78
+        if offset > end:
c3ac78
+            assert end != middle - 1, "infinite loop"
c3ac78
+            end = middle - 1
c3ac78
+        elif line[:keylen] == key:# and line[keylen + 1] == ' ':
c3ac78
+            return line
c3ac78
         #elif offset == end:
c3ac78
         #    return None
c3ac78
-	elif line > key:
c3ac78
-	    assert end != middle - 1, "infinite loop"
c3ac78
-	    end = middle - 1
c3ac78
-	elif line < key:
c3ac78
-	    start = offset + len(line) - 1
c3ac78
-	currentDepth = currentDepth + 1
c3ac78
+        elif line > key:
c3ac78
+            assert end != middle - 1, "infinite loop"
c3ac78
+            end = middle - 1
c3ac78
+        elif line < key:
c3ac78
+            start = offset + len(line) - 1
c3ac78
+        currentDepth = currentDepth + 1
c3ac78
         thisState = start, end
c3ac78
         if lastState == thisState:
c3ac78
             # detects the condition where we're searching past the end
c3ac78
@@ -1206,12 +1205,12 @@
c3ac78
     """
c3ac78
     index = 0
c3ac78
     for element in sequence:
c3ac78
-	value = element
c3ac78
-	if keyfn:
c3ac78
-	    value = keyfn(value)
c3ac78
-	if (not testfn and value == key) or (testfn and testfn(value, key)):
c3ac78
-	    return index
c3ac78
-	index = index + 1
c3ac78
+        value = element
c3ac78
+        if keyfn:
c3ac78
+            value = keyfn(value)
c3ac78
+        if (not testfn and value == key) or (testfn and testfn(value, key)):
c3ac78
+            return index
c3ac78
+        index = index + 1
c3ac78
     return None
c3ac78
 
c3ac78
 def _partition(sequence, size, count):
c3ac78
@@ -1224,7 +1223,7 @@
c3ac78
     
c3ac78
     partitions = []
c3ac78
     for index in range(0, size * count, size):
c3ac78
-	partitions.append(sequence[index:index + size])
c3ac78
+        partitions.append(sequence[index:index + size])
c3ac78
     return (partitions, sequence[size * count:])
c3ac78
 
c3ac78
 
c3ac78
@@ -1269,49 +1268,49 @@
c3ac78
       but the two implementations aren't directly comparable."""
c3ac78
    
c3ac78
     def __init__(this, capacity):
c3ac78
-	this.capacity = capacity
c3ac78
-	this.clear()
c3ac78
+        this.capacity = capacity
c3ac78
+        this.clear()
c3ac78
     
c3ac78
     def clear(this):
c3ac78
-	this.values = {}
c3ac78
-	this.history = {}
c3ac78
-	this.oldestTimestamp = 0
c3ac78
-	this.nextTimestamp = 1
c3ac78
+        this.values = {}
c3ac78
+        this.history = {}
c3ac78
+        this.oldestTimestamp = 0
c3ac78
+        this.nextTimestamp = 1
c3ac78
     
c3ac78
     def removeOldestEntry(this):
c3ac78
-	while this.oldestTimestamp < this.nextTimestamp:
c3ac78
-	    if this.history.get(this.oldestTimestamp):
c3ac78
-		key = this.history[this.oldestTimestamp]
c3ac78
-		del this.history[this.oldestTimestamp]
c3ac78
-		del this.values[key]
c3ac78
-		return
c3ac78
-	    this.oldestTimestamp = this.oldestTimestamp + 1
c3ac78
+        while this.oldestTimestamp < this.nextTimestamp:
c3ac78
+            if this.history.get(this.oldestTimestamp):
c3ac78
+                key = this.history[this.oldestTimestamp]
c3ac78
+                del this.history[this.oldestTimestamp]
c3ac78
+                del this.values[key]
c3ac78
+                return
c3ac78
+            this.oldestTimestamp = this.oldestTimestamp + 1
c3ac78
     
c3ac78
     def setCapacity(this, capacity):
c3ac78
-	if capacity == 0:
c3ac78
-	    this.clear()
c3ac78
-	else:
c3ac78
-	    this.capacity = capacity
c3ac78
-	    while len(this.values) > this.capacity:
c3ac78
-		this.removeOldestEntry()    
c3ac78
+        if capacity == 0:
c3ac78
+            this.clear()
c3ac78
+        else:
c3ac78
+            this.capacity = capacity
c3ac78
+            while len(this.values) > this.capacity:
c3ac78
+                this.removeOldestEntry()    
c3ac78
     
c3ac78
     def get(this, key, loadfn=None):
c3ac78
-	value = None
c3ac78
-	if this.values:
c3ac78
-	    pair = this.values.get(key)
c3ac78
-	    if pair:
c3ac78
-		(value, timestamp) = pair
c3ac78
-		del this.history[timestamp]
c3ac78
-	if value == None:
c3ac78
-	    value = loadfn and loadfn()
c3ac78
-	if this.values != None:
c3ac78
-	    timestamp = this.nextTimestamp
c3ac78
-	    this.nextTimestamp = this.nextTimestamp + 1
c3ac78
-	    this.values[key] = (value, timestamp)
c3ac78
-	    this.history[timestamp] = key
c3ac78
-	    if len(this.values) > this.capacity:
c3ac78
-		this.removeOldestEntry()
c3ac78
-	return value
c3ac78
+        value = None
c3ac78
+        if this.values:
c3ac78
+            pair = this.values.get(key)
c3ac78
+            if pair:
c3ac78
+                (value, timestamp) = pair
c3ac78
+                del this.history[timestamp]
c3ac78
+        if value == None:
c3ac78
+            value = loadfn and loadfn()
c3ac78
+        if this.values != None:
c3ac78
+            timestamp = this.nextTimestamp
c3ac78
+            this.nextTimestamp = this.nextTimestamp + 1
c3ac78
+            this.values[key] = (value, timestamp)
c3ac78
+            this.history[timestamp] = key
c3ac78
+            if len(this.values) > this.capacity:
c3ac78
+                this.removeOldestEntry()
c3ac78
+        return value
c3ac78
 
c3ac78
 
c3ac78
 class _NullCache:
c3ac78
@@ -1319,10 +1318,10 @@
c3ac78
     LRUCache implements), but doesn't store any values."""
c3ac78
     
c3ac78
     def clear():
c3ac78
-	pass
c3ac78
+        pass
c3ac78
     
c3ac78
     def get(this, key, loadfn=None):
c3ac78
-	return loadfn and loadfn()
c3ac78
+        return loadfn and loadfn()
c3ac78
 
c3ac78
 
c3ac78
 DEFAULT_CACHE_CAPACITY = 1000
c3ac78
@@ -1335,7 +1334,7 @@
c3ac78
 def enableCache():
c3ac78
     """Enable the entity cache."""
c3ac78
     if not isinstance(_entityCache, LRUCache):
c3ac78
-	_entityCache = _LRUCache(size)
c3ac78
+        _entityCache = _LRUCache(size)
c3ac78
 
c3ac78
 def clearCache():
c3ac78
     """Clear the entity cache."""
c3ac78
@@ -1373,36 +1372,36 @@
c3ac78
     _POSNormalizationTable = {}
c3ac78
     _POStoDictionaryTable = {}
c3ac78
     for pos, abbreviations in (
c3ac78
-	    (NOUN, "noun n n."),
c3ac78
-	    (VERB, "verb v v."),
c3ac78
-	    (ADJECTIVE, "adjective adj adj. a s"),
c3ac78
-	    (ADVERB, "adverb adv adv. r")):
c3ac78
-	tokens = string.split(abbreviations)
c3ac78
-	for token in tokens:
c3ac78
-	    _POSNormalizationTable[token] = pos
c3ac78
-	    _POSNormalizationTable[string.upper(token)] = pos
c3ac78
+            (NOUN, "noun n n."),
c3ac78
+            (VERB, "verb v v."),
c3ac78
+            (ADJECTIVE, "adjective adj adj. a s"),
c3ac78
+            (ADVERB, "adverb adv adv. r")):
c3ac78
+        tokens = abbreviations.split()
c3ac78
+        for token in tokens:
c3ac78
+            _POSNormalizationTable[token] = pos
c3ac78
+            _POSNormalizationTable[token.upper()] = pos
c3ac78
     for dict in Dictionaries:
c3ac78
-	_POSNormalizationTable[dict] = dict.pos
c3ac78
-	_POStoDictionaryTable[dict.pos] = dict
c3ac78
+        _POSNormalizationTable[dict] = dict.pos
c3ac78
+        _POStoDictionaryTable[dict.pos] = dict
c3ac78
 
c3ac78
 _initializePOSTables()
c3ac78
 
c3ac78
 def _normalizePOS(pos):
c3ac78
     norm = _POSNormalizationTable.get(pos)
c3ac78
     if norm:
c3ac78
-	return norm
c3ac78
-    raise TypeError, `pos` + " is not a part of speech type"
c3ac78
+        return norm
c3ac78
+    raise TypeError(repr(pos) + " is not a part of speech type")
c3ac78
 
c3ac78
 def _dictionaryFor(pos):
c3ac78
     pos = _normalizePOS(pos)
c3ac78
     dict = _POStoDictionaryTable.get(pos)
c3ac78
     if dict == None:
c3ac78
-	raise RuntimeError, "The " + `pos` + " dictionary has not been created"
c3ac78
+        raise RuntimeError("The " + repr(pos) + " dictionary has not been created")
c3ac78
     return dict
c3ac78
 
c3ac78
 def buildIndexFiles():
c3ac78
     for dict in Dictionaries:
c3ac78
-	dict._buildIndexCacheFile()
c3ac78
+        dict._buildIndexCacheFile()
c3ac78
 
c3ac78
 
c3ac78
 #
c3ac78
@@ -1412,7 +1411,7 @@
c3ac78
 def _testKeys():
c3ac78
     #This is slow, so don't do it as part of the normal test procedure.
c3ac78
     for dictionary in Dictionaries:
c3ac78
-	dictionary._testKeys()
c3ac78
+        dictionary._testKeys()
c3ac78
 
c3ac78
 def _test(reset=0):
c3ac78
     import doctest, wordnet