public override string ToString()
            {
                if ( image == null )
                {
                    return UNINITIALIZED;
                }
                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "image" ).alignLeft();
                t.addColumn( "type" );
                t.addColumn( "tf" );
                t.addColumn( "tfByDocument" ).alignLeft();
                t.addColumn( "fieldIndices" );

                if ( stemIndex != null )
                {
                    t.addColumn( "stemIndex" );
                    t.addColumn( "=>stem" ).alignLeft();
                }

                for ( int i = 0; i < image.Length; i++, t.nextRow() )
                {
                    t.rowData(
                        i,
                        image[i] == null ? "<null>" : new String( image[i] ),
                        type[i],
                        tf[i],
                        SparseArray.sparseToString( tfByDocument[i] ) );

                    t.rowData( Arrays.toString( toFieldIndexes( fieldIndices[i] ) ).replace( " ", "" ) );

                    if ( stemIndex != null )
                    {
                        t.rowData( stemIndex[i] );
                        t.rowData( new String( allStems.image[stemIndex[i]] ) );
                    }
                }

                t.flush();
                sw.Write( "\n" );
                return sw.ToString();
            }
            public override string ToString()
            {
                if ( featureIndex == null )
                    return UNINITIALIZED;

                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "featureIdx" );
                t.addColumn( "=>feature" ).alignLeft();
                t.addColumn( "documentIdx" ).alignLeft();

                for ( int i = 0; i < featureIndex.Length; i++, t.nextRow() )
                {
                    t.rowData(
                        i,
                        featureIndex[i],
                        getLabel( i ),
                        documentIndices != null ? documentIndices[i].toString().replace( " ", "" ) : "" );
                }

                t.flush();
                sw.Write( "\n" );
                return t.toString();
            }
            public override string ToString()
            {
                if ( wordIndices == null )
                {
                    return UNINITIALIZED;
                }

                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "wordIndices" );
                t.addColumn( "=>words" ).alignLeft();
                t.addColumn( "tf" );
                t.addColumn( "tfByDocument" ).alignLeft();

                for ( int i = 0; i < wordIndices.Length; i++, t.nextRow() )
                {
                    t.rowData(
                        i,
                        Arrays.toString( wordIndices[i] ).replace( " ", "" ),
                        getPhrase( i ),
                        tf[i],
                        SparseArray.sparseToString( tfByDocument[i] ) );
                }

                t.flush();
                sw.Write( "\n" );
                return sw.ToString();
            }
            public override string ToString()
            {
                if ( name == null )
                {
                    return UNINITIALIZED;
                }

                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "name" ).format( "%-10s" ).alignLeft();

                int i = 0;
                foreach ( String n in name )
                {
                    t.rowData( i++, n ).nextRow();
                }

                t.flush();
                sw.Write( "\n" );
                return sw.ToString();
            }