HowManyAreAnalyzed(): use status_user_agent to report progress
[linguistica.git] / MorphemeCollection.cpp
blob88f8f028a182d90478576fbd5feee2b04e9c8612
1 // Implementation of CMorphemeCollection methods
2 // Copyright © 2009 The University of Chicago
3 #include "MorphemeCollection.h"
5 #include <Q3TextStream>
6 #include <QIODevice>
7 #include <QFile>
8 #include "MiniLexicon.h"
9 #include "Morpheme.h"
11 CMorphemeCollection::CMorphemeCollection()
13 m_pMiniLex = NULL;
14 m_pLexicon = NULL;
15 m_TotalDLSavings = 0;
18 CMorphemeCollection::CMorphemeCollection( CMiniLexicon* Lex )
20 m_pMiniLex = Lex;
21 if( m_pMiniLex ) m_pLexicon = m_pMiniLex->GetLexicon();
22 m_TotalDLSavings = 0;
25 CMorphemeCollection::~CMorphemeCollection()
30 CMorpheme* CMorphemeCollection::operator << (CStringSurrogate ssMorpheme)
32 CMorpheme* pMorpheme = TCollection<CMorpheme>::AddToCollection (ssMorpheme);
33 return pMorpheme;
36 /* -colin-
37 CMorpheme* CMorphemeCollection::operator << (char* szWord)
39 CMorpheme* pMorpheme = TCollection<CMorpheme>::operator<< (szWord);
40 return pMorpheme;
43 CMorpheme* CMorphemeCollection::operator << (CMorpheme& Morpheme)
47 CMorpheme* pMorpheme;
48 CNode* pNode;
49 int Result;
51 pNode = Insert (Morpheme.GetKeyPointer(), &Result);
53 if ( Result == 1)
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() );
63 else
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 );
82 return pMorpheme;
87 void CMorphemeCollection::operator<< (CMorphemeCollection& CMC)
89 CMorpheme* pMorpheme;
90 for (int i = 0; i < CMC.GetCount(); i++)
92 pMorpheme = *this << *CMC.GetAt(i);
100 void CMorphemeCollection::Display(CMyCollectionView* pView)
102 CMorpheme* pMorpheme;
103 int col = 1;
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();
145 -colin- */
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();
166 /* -colin-
167 if (m_SortValidFlag == FALSE)
169 Sort(DL_SAVINGS);
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);
205 -colin- */
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 );
218 outf.setf(2);
219 outf << GetCount();
221 Sort( KEY );
222 for (int i = 0; i< (int)GetCount(); i++)
224 pMorpheme = GetAtSort(i);
226 outf << endl;
227 outf.width(20);
228 outf.width(20);
229 outf.width(20);
230 outf.width(20);
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() );
237 file.close();