/******************************************************************************
 * Copyright (c) 2007-2008 Massachusetts Institute of Technology.
 * All rights reserved.
 * 
 * This program and the accompanying materials are made available under the 
 * terms of the MIT Java Wordnet Interface License which accompanies this 
 * distribution.  Please check the attached license for more details.
 *
 * To communicate praise, suggestions, constructive criticism, or feature
 * requests, write:
 *
 * Mark Alan Finlayson
 * email: markaf@alum.mit.edu
 * post: 32 Vassar St., Room 32-258, Cambridge, MA 02138 USA
 * web: http://www.mit.edu/~markaf/
 *******************************************************************************/

Changelog for edu.mit.jwi:

Ver     : Release Date  : Changes
=================================
2.1.5   : Dec 19, 2008  : 1. Added documentation that points from the ISenseKey interface to SenseKeyParser class
                          2. Fixed Bug 011 (WordnetStemmer.findStems(String, POS))
                          3. Make explicit that Dictionary class does no stemming, unlike Wordnet API
                          4. Iterator returned by IDictionary.getExceptionEntryIterator(POS) now returns IExceptionEntry objects
                          2. Added catch and warning for linefeed corrupted data files
---------------------------------
2.1.4   : Sep 11, 2008  : 1. Moved SenseKey.parseKey(String) to its own class, SenseKeyParser, for ease of modification
                          2. Replaced call to SenseKey.parseKey(String) in SenseLineParser with call to SenseKeyParser.parseLine(String)
                          3. Added UnknownLexFile class to allow support of Wordnet mods (such as Rion Snow's) that use non-standard lexical file numbers
                          4. Modified SenseKeyParser and DataLineParser so they use UnknownLexFile class rather than throw NullPointerException on non-standard lexical file
                          5. Fixed Bug 010 (Dictionary.getExceptionEntry(IExceptionEntryID) method)
                          6. Replaced Pattern.quote(String) in Version class with string concatenation with \Q and \E for compatibility with GCJ 4.2
                          7. Fixed javadoc SimpleStemmer.findStems(String, POS) that erroneously stated it would return null if no roots are found; it actually returns the empty list
                          8. Refactored IWordID.getNumber() to IWordID.getSenseNumber() to make this call clearer.
                          9. Tested JWI with Rion Snow's Augmented Wordnets 2.1 +10k, +20k, +30k, and +40k (downloaded 9/11/08).  Snow's files have errors in them that cause certain problems, but it works for the most part with JWI.
---------------------------------
2.1.3   : Mar 18, 2008  : 1. Fixed Bug 009
                          2. WordnetFile.LineIterator#next() now properly throws a NoSuchElement exception
---------------------------------
2.1.2   : Mar 17, 2008  : 1. Optimized size of backing lists in IndexLineParser, DataLineParser, and ExceptionLineParser
                          2. Fixed WordID so that it contains both word number and lemma for Word constructor
                          3. Moved WordID.zeroFillWordNumber(int) to Word
                          4. Added Word.checkWordNumber(int) and Word.isIllegalWordNumber(int) methods
                          5. Added synchronization to the caches ItemCache
                          6. Added code inside Dictionary.getWord(ISenseKey) to retrieve word when sense key is not in sense.index file
                          7. Fixed IndexWordID constructor to properly replace whitespace with underscores
                          8. Added IIndexWord#getTagSenseCount()
                              a) Added arguments to IndexWord constructor
                              b) Modified IndexWord#hashCode() and IndexWord#equals(Object)
                              c) Modified IndexDataLineParser#parseLine(String line)
                          9. Added IStemmer interface
                              a) Combined getRoots(String) with getRoots(String, POS)
                              b) Renamed getRoots(String, POS) methods to findStems(String, POS)
---------------------------------
2.1.1 : Jan 26, 2008    : 1. Fixed Bug 008 (SynsetID.hashCode() method)
---------------------------------
2.1.0 : Jan 24, 2008    : 1. Confirmed compatibility with Wordnet 1.6, 1.7 and 1.7.1
                          2. Added access to index.sense file via sense entry class and interfaces
                          3. Added AdjMarker enum; IWord.getAdjectiveMarker() now returns an instance of this class
                          4. Fixed parsing code for ISynset.isAdjectiveHead()
                          5. Changed IWord.getSynsetID() to IWord.getSynset()
                              a) Removed IWord.getGloss(); call IWord.getSynset().getGloss() instead
                          6. Added IVersion interface, Version class
                          7. Added IHasVersion interface, now implemented by IDictionary, IDataProvider, and IDataSource
                          8. Added ISenseKey interface, SenseKey class
                          9. Added IDictionary.getSenseKey(IWord) that returns ISenseKey
                          10. Added ISenseEntry interface, SenseEntry class
                          11. Added IDictionary.getSenseEntry(ISenseKey) which returns ISenseEntry (from index.sense file)
                          12. Added ILexFile interface, LexFile class
                          13. Changed ISynset.getLexicalFileNum() to ISynset.getLexicalFile, which returns an ILexFile object
                          14. Removed IDataProvider.iterator() method (redundant; call getSources().iterator() instead)
                          15. Dictionary now automatically detects the version of Wordnet being used
---------------------------------
2.0.0 : Jan 8, 2008     : 1. Confirmed compatibility with Wordnet 2.0
                          2. Improved use of parameterized types throughout
                          3. Elimination of arrays as return values in favor of unmodifiable lists throughout
                          4. Condensed the edu.mit.jwi.data and .content packages into one
                          5. Data (edu.mit.jwi.data)
                              a) Renamed WordnetDataType to DataType
                              b) Renamed IDictionaryDataSource to IDataSource
                              c) Renamed IDictionaryDataType to IDataType
                              d) DataType is no longer an Enum, and can be used for constructing arbitrary data types
                              e) IDataType is now parameterized
                              f) Renamed DataProviderNotOpenException to DataProviderClosedException
                              g) Added additional constructors to DataProviderClosedException class
                              h) Removed IDataProvider.registerSource() method
                              i) IDataSource is now parameterized
                              j) IDataType objects now have an associated ILineParser object
                              k) Removed caching from WordnetFile objects
                              l) Eliminated the AbstractCachingDataSource class
                              m) Renamed WordnetContentType to ContentType
                              n) ContentType is no longer an Enum, and can be used for constructing arbitrary content types
                              o) IContentType is now parameterized
                              p) IContentType.getLineComparator() now returns an object of type ILineComparator
                              q) Renamed IDataProvider.getFile() to getSource()
                              r) Renamed IDataProvider.getAllFiles() to getSources()
                              s) Removed IDataProvider.registerFile() method
                              t) Removed WordnetFile class
                              u) Added DirectAccessWordnetFile class
                              v) Added BinarySearchWordnetFile class
                              w) Changed FileProvider to use proper wordnet file class 
                          6. Line Comparators (edu.mit.jwi.data.compare)
                              a) Fomerly the edu.mit.jwi.content.compare package.
                              b) Implemented a singleton design pattern for comparators and comment detector
                              c) Eliminated StaticComparators class
                              d) Added the ILineComparator interface, now implemented by the relevant comparators
                          7. Line Parsers (edu.mit.jwi.data.parse)
                              a) Moved the edu.mit.jwi.content.parse package to edu.mit.jwi.data.parse
                              b) Implemented a singleton design pattern for line parsers
                              c) Added additional constructors to MisformattedLineException class
                              d) Added parsing for lexical file numbers and lexical ids
                          8. Items (edu.mit.jwi.item)
                              a) Renamed WordnetPointerType to Pointer
                              b) Renamed IPointerType to IPointer
                              c) Separated PERTAINYM and DERIVED_ADJ pointers
                              d) Renamed PartOfSpeech to POS
                              e) Renamed IHasPartOfSpeech to IHasPOS
                              f) Added support for retrieving lexical file numbers to ISynset
                              g) Added support for retrieving lexical ids to IWord
                              h) Renamed IHasPOS.getPartOfSpeech() method to getPOS();
                              i) Changed format of synset id's and word id's to use zero-filled numbers
                              j) ISynset.getOffset() now returns an integer, with expected changes propagated
                          9. Dictionary (edu.mit.jwi)
                              a) Moved edu.mit.jwi.dict to edu.mit.jwi
                              b) Separated IDictionary and IDataSourceDictionary interfaces
                              c) Moved IDataProvider getter/setters from IDictionary interface to IDataSourceDictionary interface
                              d) Dictionary class updated to implement IDataSourceDictionary
                              e) Removed the IParserProvider interface and associated classes
                              f) ILineParsers are now associated with IDataType objects
                              g) Renamed DictionaryNotOpenException to DictionaryClosedException
                              h) Removed IItemCache and associated classes
                              i) Implemented a simpler cache, ItemCache (an LRU Cache), for caching in the Dictionary.
--------------------------------
1.1.3 : Aug 09, 2007    : 1. Fixed bug 007
                          2. Fixed some comments in the IDictionary interface
                          3. Updated license headers to specify TLO information
---------------------------------
1.1.2 : Jul 12, 2007    : 1. Fixed bug 006
                          2. Reworked WordnetStemmer class to more closely follow the Morphy specs
---------------------------------
1.1.1 : May 21, 2007    : 1. Fixed bug 004
                          2. Fixed bug 005
                          3. Added additional comments to clarify difference between lexical & semantic pointers
                          4. Changed IWord.getAllRelatedWords() signature to IWord.getRelatedWords()
---------------------------------
1.1.0 : Apr 28, 2007    : 1. Changed license to CCPL by-nc v3.0 unported
                          2. Fixed bug 001 (resource URL problem)
                              a) Added call to URLDecoder in getDirectoryHandle() method
                          3. Fixed bug 002 (delay FileProvider instantiation)
                              a) Dictionary: Moved FileProvider instantiation to open() method
                              b) FileProvider: Moved null/file URL check to getDirectoryMethod() method
                          4. Fixed bug 003 (unbounded cache)
                              a) AbstractCachingParser: changed HashMap to WeakHashMap
                              b) DataLineParser: removed caching
                              c) IndexLineParser: removed caching
                              d) ExceptionLineParser: removed caching
                              e) IDAwareCache: added max capacity support, default = 10*initial
                              f) Dictionary: made cache a field, not a superclass
                              g) Added IClassCache, IClassCacheIDAware interfaces
                              h) Renamed IDAwareCache to ClassCacheIDAware, separated out ClassCache implementation
                              i) ClassCacheIDAware now implements IClassCacheIDAware
                          5. Added feature 003 (Wordnet 3.0 support)
                              a) Tested JWI with Wordnet 3.0 UNIX files
                          6. Added feature 007 (more informative error messages on open() failure)
                              a) IDataProvider: Added 'throws IOException' to open() method
                              b) Added DataProviderNotOpenException class
                              c) FileProvider: added checkOpen() calls
                          7. Added feature 008 (access to providers via IDictionary interface)
                              a) IDictionary: Added getters and setters for the providers
---------------------------------           
1.0.0 : Apr 23, 2007    : Initial Release under MIT license
--------------------------------- 

Features planned for future releases:
ID : ETA    : Req. : Done? : Added : Description
===================================================================
012 : ?     : 12/07 :      :       : Command-line access to Wordnet
011 : ?     : 12/07 :      :       : Access to additional verb frames in sentidx.vrb and sents.vrb
010 : ?     : 12/07 :      :       : Option to load verb frames on startup
009 : 12/07 : 6/07  : Yes  : 12/07 : Add getRelatedMap() method to IWord and ISynset interfaces
008 : 5/07  : 5/07  : Yes  : 5/07  : Access to DataProvider and ParserProvider via IDictionary interface
007 : 5/07  : 5/07  : Yes  : 5/07  : More informative error messages on failure to find dictionary files
006 : 1/08  : 5/07  : Yes  : 1/08  : JUnit test suite for development purposes
005 : Never : 5/07  : -    : -     : Simple word-sense disambiguation
004 : 1/08  : 5/07  : Yes  : 1/07  : Access to sense count files
003 : 5/07  : 5/07  : Yes  : 5/07  : Support for Wordnet 3.0
002 : ?     : 5/07  :      :       : Internationalized error messages
001 : Never : 5/07  : -    : -     : Non-English Wordnet support (I'm monolingual, so someone else has to do it)

Bug Reports
ID : Priority : Rep.  : Done? : Fixed : Description
=============================================================
011 : Medium  : 12/08 : Yes   : 12/08 : WordnetStemmer does not continue stemming when surface form is in Wordnet, e.g., "operations" does not return "operation"(reported by I. Dourado)
010 : Medium  : 6/08  : Yes   : 6/08  : NullPointerException when exception files are not in Wordnet directory (reported by C. Zamudio)
009 : High    : 3/08  : Yes   : 3/08  : Error in BinarySearchWordnetFile.BinarySearchLineIterator.findFirstLine() that caused a NullPointerException when the search key is lexiographically past the last line in the file (Reported by M. Barczynski)
008 : Medium  : 1/08  : Yes   : 1/08  : Error in SynsetID.hashCode() function that results in all hash codes for id's with same pos to be the same (reported by L. Mazuel)
007 : High    : 8/07  : Yes   : 8/07  : Minor error in binary search algorithm which defaults to last line under some conditions (reported by C. Rhee)
006 : Medium  : 7/07  : Yes   : 7/07  : WordnetStemmer doesn't handle composites properly, e.g., "taking off" or "going out" (reported by C. Hauff)
005 : High    : 6/07  : Yes   : 6/07  : WordnetFile does not return last line of verb.dat properly
004 : High    : 6/07  : Yes   : 6/07  : NullPointer exception in Word.getRelatedSynsets(IPointerType) when wordMap != null but does not contained requested pointer type (reported by D. Buscaldi)
003 : High    : 5/07  : Yes   : 5/07  : Caches grow without bound on heavy use, overflowing Java Heap
002 : High    : 5/07  : Yes   : 5/07  : Dictionary should delay IDataProvider initialization until open(), to allow delayed call to setSource(URL)
001 : High    : 5/07  : Yes   : 5/07  : Resource URL doesn't work for FileProvider