1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
<html xmlns="http://www.w3.org/1999/xhtml">
4
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
<title>tesseract: tesseract::TessLangModel Class Reference</title>
8
<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
<link href="doxygen.css" rel="stylesheet" type="text/css" />
10
<link href="navtree.css" rel="stylesheet" type="text/css"/>
11
<script type="text/javascript" src="jquery.js"></script>
12
<script type="text/javascript" src="resize.js"></script>
13
<script type="text/javascript" src="navtree.js"></script>
14
<script type="text/javascript">
15
$(document).ready(initResizable);
17
<link href="search/search.css" rel="stylesheet" type="text/css"/>
18
<script type="text/javascript" src="search/search.js"></script>
19
<script type="text/javascript">
20
$(document).ready(function() { searchBox.OnSelectItem(0); });
25
<div id="top"><!-- do not remove this div! -->
29
<table cellspacing="0" cellpadding="0">
31
<tr style="height: 56px;">
34
<td style="padding-left: 0.5em;">
35
<div id="projectname">tesseract
36
 <span id="projectnumber">3.03</span>
48
<!-- Generated by Doxygen 1.7.6.1 -->
49
<script type="text/javascript">
50
var searchBox = new SearchBox("searchBox", "search",false,'Search');
52
<div id="navrow1" class="tabs">
54
<li><a href="index.html"><span>Main Page</span></a></li>
55
<li><a href="pages.html"><span>Related Pages</span></a></li>
56
<li><a href="modules.html"><span>Modules</span></a></li>
57
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
58
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
59
<li><a href="files.html"><span>Files</span></a></li>
61
<div id="MSearchBox" class="MSearchBoxInactive">
63
<img id="MSearchSelect" src="search/mag_sel.png"
64
onmouseover="return searchBox.OnSearchSelectShow()"
65
onmouseout="return searchBox.OnSearchSelectHide()"
67
<input type="text" id="MSearchField" value="Search" accesskey="S"
68
onfocus="searchBox.OnSearchFieldFocus(true)"
69
onblur="searchBox.OnSearchFieldFocus(false)"
70
onkeyup="searchBox.OnSearchFieldChange(event)"/>
71
</span><span class="right">
72
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
78
<div id="navrow2" class="tabs2">
80
<li><a href="annotated.html"><span>Class List</span></a></li>
81
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
82
<li><a href="functions.html"><span>Class Members</span></a></li>
86
<div id="side-nav" class="ui-resizable side-nav-resizable">
88
<div id="nav-tree-contents">
91
<div id="splitbar" style="-moz-user-select:none;"
92
class="ui-resizable-handle">
95
<script type="text/javascript">
96
initNavTree('a00612.html','');
98
<div id="doc-content">
100
<div class="summary">
101
<a href="#pub-methods">Public Member Functions</a> </div>
102
<div class="headertitle">
103
<div class="title">tesseract::TessLangModel Class Reference</div> </div>
105
<div class="contents">
106
<!-- doxytag: class="tesseract::TessLangModel" --><!-- doxytag: inherits="tesseract::LangModel" -->
107
<p><code>#include <<a class="el" href="a01012_source.html">tess_lang_model.h</a>></code></p>
108
<div class="dynheader">
109
Inheritance diagram for tesseract::TessLangModel:</div>
110
<div class="dyncontent">
112
<img src="a00612.png" usemap="#tesseract::TessLangModel_map" alt=""/>
113
<map id="tesseract::TessLangModel_map" name="tesseract::TessLangModel_map">
114
<area href="a00445.html" alt="tesseract::LangModel" shape="rect" coords="0,0,158,24"/>
118
<p><a href="a01850.html">List of all members.</a></p>
119
<table class="memberdecls">
120
<tr><td colspan="2"><h2><a name="pub-methods"></a>
121
Public Member Functions</h2></td></tr>
122
<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#a23d5290b102bb43428957c4c4a96e6d6">TessLangModel</a> (const string &lm_params, const string &data_file_path, bool load_system_dawg, <a class="el" href="a00606.html">TessdataManager</a> *tessdata_manager, <a class="el" href="a00339.html">CubeRecoContext</a> *cntxt)</td></tr>
123
<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#a3976ab4c324b005b9165609e3b077dbc">~TessLangModel</a> ()</td></tr>
124
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00611.html">TessLangModEdge</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#a939ea7ad8b064d8167b3c7019bf82d9f">Root</a> ()</td></tr>
125
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00444.html">LangModEdge</a> ** </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#abd9a2fc77fe18caeb4a8f17020b460a4">GetEdges</a> (<a class="el" href="a00300.html">CharAltList</a> *alt_list, <a class="el" href="a00444.html">LangModEdge</a> *edge, int *edge_cnt)</td></tr>
126
<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#a2c303d6052f7b99c6b65a497592e5e2e">IsValidSequence</a> (const <a class="el" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> *sequence, bool eow_flag, <a class="el" href="a00444.html">LangModEdge</a> **final_edge=NULL)</td></tr>
127
<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#ae012b6f6dec52e66ccc7b78fa8975b10">IsLeadingPunc</a> (<a class="el" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> ch)</td></tr>
128
<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#aed986e1547e8faf18a522ef074e0413a">IsTrailingPunc</a> (<a class="el" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> ch)</td></tr>
129
<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#a69d61128a73ddf1e9ce709a3808c6530">IsDigit</a> (<a class="el" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> ch)</td></tr>
130
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00612.html#a1fc3e4c81803a84dba0ff7dd1e0ec936">RemoveInvalidCharacters</a> (string *lm_str)</td></tr>
132
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
133
<div class="textblock">
134
<p>Definition at line <a class="el" href="a01012_source.html#l00038">38</a> of file <a class="el" href="a01012_source.html">tess_lang_model.h</a>.</p>
135
</div><hr/><h2>Constructor & Destructor Documentation</h2>
136
<a class="anchor" id="a23d5290b102bb43428957c4c4a96e6d6"></a><!-- doxytag: member="tesseract::TessLangModel::TessLangModel" ref="a23d5290b102bb43428957c4c4a96e6d6" args="(const string &lm_params, const string &data_file_path, bool load_system_dawg, TessdataManager *tessdata_manager, CubeRecoContext *cntxt)" -->
137
<div class="memitem">
138
<div class="memproto">
139
<table class="memname">
141
<td class="memname"><a class="el" href="a00612.html#a23d5290b102bb43428957c4c4a96e6d6">tesseract::TessLangModel::TessLangModel</a> </td>
143
<td class="paramtype">const string & </td>
144
<td class="paramname"><em>lm_params</em>, </td>
147
<td class="paramkey"></td>
149
<td class="paramtype">const string & </td>
150
<td class="paramname"><em>data_file_path</em>, </td>
153
<td class="paramkey"></td>
155
<td class="paramtype">bool </td>
156
<td class="paramname"><em>load_system_dawg</em>, </td>
159
<td class="paramkey"></td>
161
<td class="paramtype"><a class="el" href="a00606.html">TessdataManager</a> * </td>
162
<td class="paramname"><em>tessdata_manager</em>, </td>
165
<td class="paramkey"></td>
167
<td class="paramtype"><a class="el" href="a00339.html">CubeRecoContext</a> * </td>
168
<td class="paramname"><em>cntxt</em> </td>
179
<p>Definition at line <a class="el" href="a01011_source.html#l00060">60</a> of file <a class="el" href="a01011_source.html">tess_lang_model.cpp</a>.</p>
180
<div class="fragment"><pre class="fragment"> {
182
has_case_ = cntxt_-><a class="code" href="a00339.html#a935e5758a4674f439814ec57b8c4d42b">HasCase</a>();
183
<span class="comment">// Load the rest of the language model elements from file</span>
184
LoadLangModelElements(lm_params);
185
<span class="comment">// Load word_dawgs_ if needed.</span>
186
<span class="keywordflow">if</span> (tessdata_manager->SeekToStart(<a class="code" href="a01265.html#a5f278974ef80900b460194614d4f1899a87310a274403592ee7b1bd07e8b29973">TESSDATA_CUBE_UNICHARSET</a>)) {
187
word_dawgs_ = <span class="keyword">new</span> <a class="code" href="a01265.html#a8dc259fa09d9302b96f5b3d2aad10c9f">DawgVector</a>();
188
<span class="keywordflow">if</span> (load_system_dawg &&
189
tessdata_manager->SeekToStart(<a class="code" href="a01265.html#a5f278974ef80900b460194614d4f1899a445f2a31c9940f2027a67ba8f8630f9f">TESSDATA_CUBE_SYSTEM_DAWG</a>)) {
190
<span class="comment">// The last parameter to the Dawg constructor (the debug level) is set to</span>
191
<span class="comment">// false, until Cube has a way to express its preferred debug level.</span>
192
*word_dawgs_ += <span class="keyword">new</span> SquishedDawg(tessdata_manager->GetDataFilePtr(),
193
<a class="code" href="a01265.html#a07c41f251f1782c60df4e626c35d2151a9c67e397ff6d57a705cd4cd4524a2b34">DAWG_TYPE_WORD</a>,
194
cntxt_-><a class="code" href="a00339.html#a5e8e654a7db7d086d7e05d08bb53fa97">Lang</a>().c_str(),
195
<a class="code" href="a00788.html#a18e2c75cefe9e5b78e8ce41aa5fa25bca616bdbcaed7dd414823b303af5c8b1f1">SYSTEM_DAWG_PERM</a>, <span class="keyword">false</span>);
197
} <span class="keywordflow">else</span> {
204
<a class="anchor" id="a3976ab4c324b005b9165609e3b077dbc"></a><!-- doxytag: member="tesseract::TessLangModel::~TessLangModel" ref="a3976ab4c324b005b9165609e3b077dbc" args="()" -->
205
<div class="memitem">
206
<div class="memproto">
207
<table class="memname">
209
<td class="memname"><a class="el" href="a00612.html#a3976ab4c324b005b9165609e3b077dbc">tesseract::TessLangModel::~TessLangModel</a> </td>
211
<td class="paramname"></td><td>)</td>
212
<td><code> [inline]</code></td>
218
<p>Definition at line <a class="el" href="a01012_source.html#l00045">45</a> of file <a class="el" href="a01012_source.html">tess_lang_model.h</a>.</p>
219
<div class="fragment"><pre class="fragment"> {
220
<span class="keywordflow">if</span> (word_dawgs_ != NULL) {
221
word_dawgs_-><a class="code" href="a00403.html#a98f62dccd75224a60437c2761bd215cd">delete_data_pointers</a>();
222
<span class="keyword">delete</span> word_dawgs_;
228
<hr/><h2>Member Function Documentation</h2>
229
<a class="anchor" id="abd9a2fc77fe18caeb4a8f17020b460a4"></a><!-- doxytag: member="tesseract::TessLangModel::GetEdges" ref="abd9a2fc77fe18caeb4a8f17020b460a4" args="(CharAltList *alt_list, LangModEdge *edge, int *edge_cnt)" -->
230
<div class="memitem">
231
<div class="memproto">
232
<table class="memname">
234
<td class="memname"><a class="el" href="a00444.html">LangModEdge</a> ** <a class="el" href="a00612.html#abd9a2fc77fe18caeb4a8f17020b460a4">tesseract::TessLangModel::GetEdges</a> </td>
236
<td class="paramtype"><a class="el" href="a00300.html">CharAltList</a> * </td>
237
<td class="paramname"><em>alt_list</em>, </td>
240
<td class="paramkey"></td>
242
<td class="paramtype"><a class="el" href="a00444.html">LangModEdge</a> * </td>
243
<td class="paramname"><em>edge</em>, </td>
246
<td class="paramkey"></td>
248
<td class="paramtype">int * </td>
249
<td class="paramname"><em>edge_cnt</em> </td>
254
<td></td><td><code> [virtual]</code></td>
260
<p>Implements <a class="el" href="a00445.html#a61071a0736427f808d7134aeeb456701">tesseract::LangModel</a>.</p>
262
<p>Definition at line <a class="el" href="a01011_source.html#l00169">169</a> of file <a class="el" href="a01011_source.html">tess_lang_model.cpp</a>.</p>
263
<div class="fragment"><pre class="fragment"> {
264
TessLangModEdge *tess_lm_edge =
265
<span class="keyword">reinterpret_cast<</span>TessLangModEdge *<span class="keyword">></span>(lang_mod_edge);
266
LangModEdge **edge_array = NULL;
269
<span class="comment">// if we are starting from the root, we'll instantiate every DAWG</span>
270
<span class="comment">// and get the all the edges that emerge from the root</span>
271
<span class="keywordflow">if</span> (tess_lm_edge == NULL) {
272
<span class="comment">// get DAWG count from Tesseract</span>
273
<span class="keywordtype">int</span> dawg_cnt = NumDawgs();
274
<span class="comment">// preallocate the edge buffer</span>
275
(*edge_cnt) = dawg_cnt * max_edge_;
276
edge_array = <span class="keyword">new</span> LangModEdge *[(*edge_cnt)];
277
<span class="keywordflow">if</span> (edge_array == NULL) {
278
<span class="keywordflow">return</span> NULL;
281
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> dawg_idx = (*edge_cnt) = 0; dawg_idx < dawg_cnt; dawg_idx++) {
282
<span class="keyword">const</span> Dawg *curr_dawg = GetDawg(dawg_idx);
283
<span class="comment">// Only look through word Dawgs (since there is a special way of</span>
284
<span class="comment">// handling numbers and punctuation).</span>
285
<span class="keywordflow">if</span> (curr_dawg->type() == <a class="code" href="a01265.html#a07c41f251f1782c60df4e626c35d2151a9c67e397ff6d57a705cd4cd4524a2b34">DAWG_TYPE_WORD</a>) {
286
(*edge_cnt) += FanOut(alt_list, curr_dawg, 0, 0, NULL, <span class="keyword">true</span>,
287
edge_array + (*edge_cnt));
289
} <span class="comment">// dawg</span>
291
(*edge_cnt) += FanOut(alt_list, number_dawg_, 0, 0, NULL, <span class="keyword">true</span>,
292
edge_array + (*edge_cnt));
294
<span class="comment">// OOD: it is intentionally not added to the list to make sure it comes</span>
295
<span class="comment">// at the end</span>
296
(*edge_cnt) += FanOut(alt_list, ood_dawg_, 0, 0, NULL, <span class="keyword">true</span>,
297
edge_array + (*edge_cnt));
299
<span class="comment">// set the root flag for all root edges</span>
300
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> edge_idx = 0; edge_idx < (*edge_cnt); edge_idx++) {
301
edge_array[edge_idx]->SetRoot(<span class="keyword">true</span>);
303
} <span class="keywordflow">else</span> { <span class="comment">// not starting at the root</span>
304
<span class="comment">// preallocate the edge buffer</span>
305
(*edge_cnt) = max_edge_;
306
<span class="comment">// allocate memory for edges</span>
307
edge_array = <span class="keyword">new</span> LangModEdge *[(*edge_cnt)];
308
<span class="keywordflow">if</span> (edge_array == NULL) {
309
<span class="keywordflow">return</span> NULL;
312
<span class="comment">// get the FanOut edges from the root of each dawg</span>
313
(*edge_cnt) = FanOut(alt_list,
314
tess_lm_edge->GetDawg(),
315
tess_lm_edge->EndEdge(), tess_lm_edge->EdgeMask(),
316
tess_lm_edge->EdgeString(), <span class="keyword">false</span>, edge_array);
318
<span class="keywordflow">return</span> edge_array;
323
<a class="anchor" id="a69d61128a73ddf1e9ce709a3808c6530"></a><!-- doxytag: member="tesseract::TessLangModel::IsDigit" ref="a69d61128a73ddf1e9ce709a3808c6530" args="(char_32 ch)" -->
324
<div class="memitem">
325
<div class="memproto">
326
<table class="memname">
328
<td class="memname">bool <a class="el" href="a00612.html#a69d61128a73ddf1e9ce709a3808c6530">tesseract::TessLangModel::IsDigit</a> </td>
330
<td class="paramtype"><a class="el" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> </td>
331
<td class="paramname"><em>ch</em></td><td>)</td>
332
<td><code> [virtual]</code></td>
338
<p>Implements <a class="el" href="a00445.html#aae119709c73d00d731c65588be763a1d">tesseract::LangModel</a>.</p>
340
<p>Definition at line <a class="el" href="a01011_source.html#l00162">162</a> of file <a class="el" href="a01011_source.html">tess_lang_model.cpp</a>.</p>
341
<div class="fragment"><pre class="fragment"> {
342
<span class="keywordflow">return</span> digits_.find(ch) != string::npos;
347
<a class="anchor" id="ae012b6f6dec52e66ccc7b78fa8975b10"></a><!-- doxytag: member="tesseract::TessLangModel::IsLeadingPunc" ref="ae012b6f6dec52e66ccc7b78fa8975b10" args="(char_32 ch)" -->
348
<div class="memitem">
349
<div class="memproto">
350
<table class="memname">
352
<td class="memname">bool <a class="el" href="a00612.html#ae012b6f6dec52e66ccc7b78fa8975b10">tesseract::TessLangModel::IsLeadingPunc</a> </td>
354
<td class="paramtype"><a class="el" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> </td>
355
<td class="paramname"><em>ch</em></td><td>)</td>
356
<td><code> [virtual]</code></td>
362
<p>Implements <a class="el" href="a00445.html#ade13ad9a3c3f6bb19a1071aa20bffb4b">tesseract::LangModel</a>.</p>
364
<p>Definition at line <a class="el" href="a01011_source.html#l00154">154</a> of file <a class="el" href="a01011_source.html">tess_lang_model.cpp</a>.</p>
365
<div class="fragment"><pre class="fragment"> {
366
<span class="keywordflow">return</span> lead_punc_.find(ch) != string::npos;
371
<a class="anchor" id="aed986e1547e8faf18a522ef074e0413a"></a><!-- doxytag: member="tesseract::TessLangModel::IsTrailingPunc" ref="aed986e1547e8faf18a522ef074e0413a" args="(char_32 ch)" -->
372
<div class="memitem">
373
<div class="memproto">
374
<table class="memname">
376
<td class="memname">bool <a class="el" href="a00612.html#aed986e1547e8faf18a522ef074e0413a">tesseract::TessLangModel::IsTrailingPunc</a> </td>
378
<td class="paramtype"><a class="el" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> </td>
379
<td class="paramname"><em>ch</em></td><td>)</td>
380
<td><code> [virtual]</code></td>
386
<p>Implements <a class="el" href="a00445.html#a0235bd607e1d0cd00082661e0b71d495">tesseract::LangModel</a>.</p>
388
<p>Definition at line <a class="el" href="a01011_source.html#l00158">158</a> of file <a class="el" href="a01011_source.html">tess_lang_model.cpp</a>.</p>
389
<div class="fragment"><pre class="fragment"> {
390
<span class="keywordflow">return</span> trail_punc_.find(ch) != string::npos;
395
<a class="anchor" id="a2c303d6052f7b99c6b65a497592e5e2e"></a><!-- doxytag: member="tesseract::TessLangModel::IsValidSequence" ref="a2c303d6052f7b99c6b65a497592e5e2e" args="(const char_32 *sequence, bool eow_flag, LangModEdge **final_edge=NULL)" -->
396
<div class="memitem">
397
<div class="memproto">
398
<table class="memname">
400
<td class="memname">bool <a class="el" href="a00612.html#a2c303d6052f7b99c6b65a497592e5e2e">tesseract::TessLangModel::IsValidSequence</a> </td>
402
<td class="paramtype">const <a class="el" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> * </td>
403
<td class="paramname"><em>sequence</em>, </td>
406
<td class="paramkey"></td>
408
<td class="paramtype">bool </td>
409
<td class="paramname"><em>eow_flag</em>, </td>
412
<td class="paramkey"></td>
414
<td class="paramtype"><a class="el" href="a00444.html">LangModEdge</a> ** </td>
415
<td class="paramname"><em>final_edge</em> = <code>NULL</code> </td>
420
<td></td><td><code> [virtual]</code></td>
426
<p>Implements <a class="el" href="a00445.html#a8b2edb01fa6b82d7a0eba6fb28717494">tesseract::LangModel</a>.</p>
428
<p>Definition at line <a class="el" href="a01011_source.html#l00145">145</a> of file <a class="el" href="a01011_source.html">tess_lang_model.cpp</a>.</p>
429
<div class="fragment"><pre class="fragment"> {
430
<span class="keywordflow">if</span> (final_edge != NULL) {
431
(*final_edge) = NULL;
434
<span class="keywordflow">return</span> <a class="code" href="a00612.html#a2c303d6052f7b99c6b65a497592e5e2e">IsValidSequence</a>(NULL, sequence, eow_flag, final_edge);
439
<a class="anchor" id="a1fc3e4c81803a84dba0ff7dd1e0ec936"></a><!-- doxytag: member="tesseract::TessLangModel::RemoveInvalidCharacters" ref="a1fc3e4c81803a84dba0ff7dd1e0ec936" args="(string *lm_str)" -->
440
<div class="memitem">
441
<div class="memproto">
442
<table class="memname">
444
<td class="memname">void <a class="el" href="a00612.html#a1fc3e4c81803a84dba0ff7dd1e0ec936">tesseract::TessLangModel::RemoveInvalidCharacters</a> </td>
446
<td class="paramtype">string * </td>
447
<td class="paramname"><em>lm_str</em></td><td>)</td>
454
<p>Definition at line <a class="el" href="a01011_source.html#l00482">482</a> of file <a class="el" href="a01011_source.html">tess_lang_model.cpp</a>.</p>
455
<div class="fragment"><pre class="fragment"> {
456
CharSet *char_set = cntxt_-><a class="code" href="a00339.html#ab9c6b5f85ef4baa38ad8ef9c949b8dee">CharacterSet</a>();
457
<a class="code" href="a01265.html#a5e51e225e3ac13c918ed9f77715fa041">tesseract::string_32</a> lm_str32;
458
<a class="code" href="a01265.html#a903ffe993b52191b0b18a019dd790276">CubeUtils::UTF8ToUTF32</a>(lm_str->c_str(), &lm_str32);
460
<span class="keywordtype">int</span> len = <a class="code" href="a00343.html#a88fe596e3dcadab7909c0bff64f61f59">CubeUtils::StrLen</a>(lm_str32.c_str());
461
<a class="code" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a> *clean_str32 = <span class="keyword">new</span> <a class="code" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a>[len + 1];
462
<span class="keywordflow">if</span> (!clean_str32)
463
<span class="keywordflow">return</span>;
464
<span class="keywordtype">int</span> clean_len = 0;
465
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < len; ++i) {
466
<span class="keywordtype">int</span> class_id = char_set->ClassID((<a class="code" href="a01265.html#aea2c6172b0ca77907e29cd018595b425">char_32</a>)lm_str32[i]);
467
<span class="keywordflow">if</span> (class_id != INVALID_UNICHAR_ID) {
468
clean_str32[clean_len] = lm_str32[i];
472
clean_str32[clean_len] = 0;
473
<span class="keywordflow">if</span> (clean_len < len) {
475
<a class="code" href="a01265.html#a34f64417c417283fbb3cbdd220e77ae2">CubeUtils::UTF32ToUTF8</a>(clean_str32, lm_str);
477
<span class="keyword">delete</span> [] clean_str32;
482
<a class="anchor" id="a939ea7ad8b064d8167b3c7019bf82d9f"></a><!-- doxytag: member="tesseract::TessLangModel::Root" ref="a939ea7ad8b064d8167b3c7019bf82d9f" args="()" -->
483
<div class="memitem">
484
<div class="memproto">
485
<table class="memname">
487
<td class="memname"><a class="el" href="a00611.html">TessLangModEdge</a>* <a class="el" href="a00612.html#a939ea7ad8b064d8167b3c7019bf82d9f">tesseract::TessLangModel::Root</a> </td>
489
<td class="paramname"></td><td>)</td>
490
<td><code> [inline, virtual]</code></td>
496
<p>Implements <a class="el" href="a00445.html#a46178bf09d08aa9c8048adb0a8561b75">tesseract::LangModel</a>.</p>
498
<p>Definition at line <a class="el" href="a01012_source.html#l00053">53</a> of file <a class="el" href="a01012_source.html">tess_lang_model.h</a>.</p>
499
<div class="fragment"><pre class="fragment"> {
500
<span class="keywordflow">return</span> NULL;
505
<hr/>The documentation for this class was generated from the following files:<ul>
506
<li>/usr/local/google/home/jbreiden/tesseract-ocr-read-only/cube/<a class="el" href="a01012_source.html">tess_lang_model.h</a></li>
507
<li>/usr/local/google/home/jbreiden/tesseract-ocr-read-only/cube/<a class="el" href="a01011_source.html">tess_lang_model.cpp</a></li>
509
</div><!-- contents -->
511
<!-- window showing the filter options -->
512
<div id="MSearchSelectWindow"
513
onmouseover="return searchBox.OnSearchSelectShow()"
514
onmouseout="return searchBox.OnSearchSelectHide()"
515
onkeydown="return searchBox.OnSearchSelectKey(event)">
516
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Defines</a></div>
518
<!-- iframe showing the search results (closed by default) -->
519
<div id="MSearchResultsWindow">
520
<iframe src="javascript:void(0)" frameborder="0"
521
name="MSearchResults" id="MSearchResults">
525
<div id="nav-path" class="navpath">
527
<li class="navelem"><a class="el" href="a01265.html">tesseract</a> </li>
528
<li class="navelem"><a class="el" href="a00612.html">TessLangModel</a> </li>
530
<li class="footer">Generated on Mon Feb 3 2014 10:59:21 for tesseract by
531
<a href="http://www.doxygen.org/index.html">
532
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>