1 // Implementation of CMorphemeCollection methods
2 // Copyright © 2009 The University of Chicago
3 #include "MorphemeCollection.h"
5 #include <Q3TextStream>
8 #include "MiniLexicon.h"
11 CMorphemeCollection::CMorphemeCollection()
18 CMorphemeCollection::CMorphemeCollection( CMiniLexicon
* Lex
)
21 if( m_pMiniLex
) m_pLexicon
= m_pMiniLex
->GetLexicon();
25 CMorphemeCollection::~CMorphemeCollection()
30 CMorpheme
* CMorphemeCollection::operator << (CStringSurrogate ssMorpheme
)
32 CMorpheme
* pMorpheme
= TCollection
<CMorpheme
>::AddToCollection (ssMorpheme
);
37 CMorpheme* CMorphemeCollection::operator << (char* szWord)
39 CMorpheme* pMorpheme = TCollection<CMorpheme>::operator<< (szWord);
43 CMorpheme* CMorphemeCollection::operator << (CMorpheme& Morpheme)
51 pNode = Insert (Morpheme.GetKeyPointer(), &Result);
55 pMorpheme = new CMorpheme(Morpheme);
56 pNode->SetPointer (pMorpheme);
57 pMorpheme->SetIndex ( GetCount() - 1 );
58 pMorpheme->SetDLSavings( Morpheme.GetDLSavings() );
59 pMorpheme->SetDLImprovementFromSuffixes ( Morpheme.GetDLImprovementFromSuffixes() );
60 pMorpheme->SetCorpusCount ( Morpheme.GetCorpusCount() );
65 pMorpheme =(CMorpheme*) pNode->Get_T_Pointer();
66 pMorpheme->SetDLSavings( pMorpheme->GetDLSavings() + Morpheme.GetDLSavings() );
67 pMorpheme->SetDLImprovementFromSuffixes ( pMorpheme->GetDLImprovementFromSuffixes() +
68 Morpheme.GetDLImprovementFromSuffixes() );
69 pMorpheme->SetCorpusCount ( pMorpheme->GetCorpusCount() + Morpheme.GetCorpusCount() );
73 IncrementCorpusCount(1);
76 m_SortValidFlag = FALSE;
77 m_HashHasChangedFlag = TRUE;
79 m_TotalDLSavings += Morpheme.GetDLSavings() + Morpheme.GetDLImprovementFromSuffixes();
80 pMorpheme->CopySuffixList ( Morpheme );
87 void CMorphemeCollection::operator<< (CMorphemeCollection& CMC)
90 for (int i = 0; i < CMC.GetCount(); i++)
92 pMorpheme = *this << *CMC.GetAt(i);
100 void CMorphemeCollection::Display(CMyCollectionView* pView)
102 CMorpheme* pMorpheme;
104 CListCtrl& List = pView->GetListCtrl();
105 // Clean it out first
106 for (int i = 0; i < pView->GetNumberOfColumns(); i++)
108 List.DeleteColumn(0);
110 List.DeleteAllItems();
112 m_MemberName = "Morpheme";
114 // Add Column headers
115 pView->GetListCtrl().InsertColumn(0, m_MemberName, LVCFMT_LEFT, 100);
116 pView->IncrementNumberOfColumns();
118 List.InsertColumn(col++, "Inverse log freq", LVCFMT_RIGHT, 100);
119 pView->IncrementNumberOfColumns();
122 List.InsertColumn(col++, "Morpheme count", LVCFMT_RIGHT, 100);
123 pView->IncrementNumberOfColumns();
125 List.InsertColumn(col++, "Corpus count", LVCFMT_RIGHT, 100);
126 pView->IncrementNumberOfColumns();
128 List.InsertColumn(col++, "PF", LVCFMT_RIGHT, 50);
129 pView->IncrementNumberOfColumns();
131 List.InsertColumn(col++, "SF", LVCFMT_RIGHT, 50);
132 pView->IncrementNumberOfColumns();
134 List.InsertColumn(col++, "Goodness", LVCFMT_RIGHT, 70);
135 pView->IncrementNumberOfColumns();
137 List.InsertColumn(col++, "Description Length savings", LVCFMT_RIGHT, 150);
138 pView->IncrementNumberOfColumns();
140 List.InsertColumn(col++, "Frequency", LVCFMT_RIGHT, 100);
141 pView->IncrementNumberOfColumns();
143 List.InsertColumn(col++, "Followed by:", LVCFMT_RIGHT, 180);
144 pView->IncrementNumberOfColumns();
147 List.InsertColumn(3, "Other word letters", LVCFMT_RIGHT, 110);
148 pView->IncrementNumberOfColumns();
150 List.InsertColumn(4, "Suffix letters", LVCFMT_RIGHT, 120);
151 pView->IncrementNumberOfColumns();
153 List.InsertColumn(5, "Signatures", LVCFMT_RIGHT, 80);
154 pView->IncrementNumberOfColumns();
156 List.InsertColumn(6, "Corpus:", LVCFMT_RIGHT, 90);
157 pView->IncrementNumberOfColumns();
159 List.InsertColumn(7, "Unanalyzed words", LVCFMT_RIGHT, 120);
160 pView->IncrementNumberOfColumns();
162 List.InsertColumn(8, "Analyzed words", LVCFMT_RIGHT, 120);
163 pView->IncrementNumberOfColumns();
167 if (m_SortValidFlag == FALSE)
174 for (i = 0; i < (int) GetCount(); i++)
176 pMorpheme = GetAtSort(i);
177 pMorpheme->Display( &List, i );
183 void operator<< (ofstream& out, CMorphemeCollection& MC)
185 for (int i = 0; i < MC.GetCount(); i++)
186 out << MC.GetAt(i)->SpellOut() << " " << MC.GetAt(i)->GetDLSavings() << " ";
190 void CMorphemeCollection::Empty()
193 m_TotalDLSavings = 0;
194 TCollection<CMorpheme>::Empty();
197 void CMorphemeCollection::ClearAllMorphemeCounts()
199 for (int i = 0; i < GetCount(); i++)
201 GetAt(i)->SetMorphemeCount (0);
206 void CMorphemeCollection::OutputMorphemes (QString
& FileName
)
208 Q_ASSERT(!FileName
.isEmpty());
210 CMorpheme
* pMorpheme
;
211 QFile
file( FileName
);
213 if( file
.open( QIODevice::WriteOnly
) )
215 Q3TextStream
outf( &file
);
216 outf
.setEncoding ( Q3TextStream::Unicode
);
222 for (int i
= 0; i
< (int)GetCount(); i
++)
224 pMorpheme
= GetAtSort(i
);
231 outf
<< pMorpheme
->Display( 0, m_pMiniLex
->GetOutFilter() );
232 outf
<< pMorpheme
->GetMorphemeCount();
233 outf
<< pMorpheme
->GetFrequency();
234 outf
<< pMorpheme
->GetSuffixList()->Display( 0, m_pMiniLex
->GetOutFilter() );