16#ifdef INCLUDE_TENSORFLOW
24#if defined(MISSING_CODE)
25static std::string EncodeAsUTF8(
const char32 ch32) {
27 return std::string(uni_ch.utf8(), uni_ch.utf8_len());
31TEST(NormstrngsTest, BasicText) {
32 const char *kBasicText =
"AbCd Ef";
39TEST(NormstrngsTest, LigatureText) {
40 const char *kTwoByteLigText =
"ij";
46 const char *kThreeByteLigText =
"finds";
52TEST(NormstrngsTest, OcrSpecificNormalization) {
53 const char *kSingleQuoteText =
"‘Hi";
59 const char *kDoubleQuoteText =
"“Hi";
64 const char *kEmDash =
"Hi—";
70 kSingleQuoteText, &result));
73 kDoubleQuoteText, &result));
81const char kEngText[] =
"the quick brown fox jumps over the lazy dog";
82const char kHinText[] =
"पिताने विवाह की | हो गई उद्विग्न वह सोचा";
89TEST(NormstrngsTest, DetectsCorrectText) {
97 <<
"Incorrect text: '" <<
kHinText <<
"'";
105TEST(NormstrngsTest, DetectsIncorrectText) {
109 << kBadlyFormedHinWord;
114 << kBadlyFormedThaiWord;
118TEST(NormstrngsTest, NonIndicTextDoesntBreakIndicRules) {
119 std::string nonindic =
"Here's some latin text.";
122 nonindic.c_str(), &
dest))
127TEST(NormstrngsTest, NoLonelyJoiners) {
128 std::string str =
"x\u200d\u0d06\u0d34\u0d02";
129 std::vector<std::string> glyphs;
136 EXPECT_EQ(glyphs[1], std::string(
"\u0d06"));
137 EXPECT_EQ(glyphs[2], std::string(
"\u0d34\u0d02"));
140TEST(NormstrngsTest, NoLonelyJoinersPlus) {
141 std::string str =
"\u0d2a\u200d+\u0d2a\u0d4b";
142 std::vector<std::string> glyphs;
148 EXPECT_EQ(glyphs[0], std::string(
"\u0d2a"));
150 EXPECT_EQ(glyphs[2], std::string(
"\u0d2a\u0d4b"));
153TEST(NormstrngsTest, NoLonelyJoinersNonAlpha) {
154 std::string str =
"\u200d+\u200c\u200d";
157 str =
"\u200d\u200c\u200d";
161 str.c_str(), &result))
165TEST(NormstrngsTest, JoinersStayInArabic) {
166 std::string str =
"\u0628\u200c\u0628\u200d\u0628";
172 std::string str =
"\u0cea";
177 std::string str =
"\u0964";
183TEST(NormstrngsTest, AllScriptsRegtest) {
186 const std::vector<std::pair<std::string, std::string>> kScriptText(
188 " فكان منهم علقمة بن قيس ، و إبراهيم النخعي ، و الأسود بن"
189 "توفي بالمدينة في هذه السنة وهو ابن مائة وعشرين سنة "
190 "مجموعه هیچ اثری در فنون هنر و ادب و ترجمه، تقدیم پیشگاه ارجمند "
191 "سازنده تاریخ نگاه میکرد و به اصطلاح انسان و فطرت انسانی را زیربنای"},
193 "անտիկ աշխարհի փիլիսոփաների կենսագրությունը, թե′ նրանց ուս-"
194 "պատրաստւում է դալ (բուլամա): Կովկասում կաթից նաև պատ-"
195 "Հոգաբարձութեան յղել այդ անձին յիմարութիւնը հաստա-"
196 "գծերը եւ միջագծերը կը համրուին վարէն վեր:"},
198 "এসে দাঁড়ায় দাও খানি উঁচিয়ে নিয়ে । ঝরনার স্বচ্ছ জলে প্রতিবিম্বিত "
199 "পাঠিয়ে, গোবিন্দ স্মরণ করে, নির্ভয়ে রওনা হয়েছিল। তাতে সে "
200 "সুলতার। মনে পড়ে বিয়ের সময় বাবা এদের বাড়ি থেকে ঘুরে "
201 "কিন্তু তারপর মাতৃহৃদয় কেমন করে আছে? কী"},
203 "достей, є ще нагороди й почесті, є хай і сумнівна, але слава, "
204 "вып., 96б). Параўн. найсвятший у 1 знач., насвятейший у 1 знач., "
205 "»Правді«, — гітлерівські окупанти винищували нижчі раси, після дру- "
206 "І знов майдан зачорнів од народу. Всередині чоло-"},
208 "डा॰ नै हात्तीमाथि चढेर त्यो भएनेर आइपुगे। राजालाई देखी "
209 "बाबतीत लिहिणे ही एक मोठीच जबाबदारी आहे. काकासाहेबांच्या कार्याचा "
210 "प्रबंध, आधोगिक प्रबंध तथा बैंकिंग एवम वाणिज्य आदि विषयों में "
211 "चित्रकृती दिल्या. शंभराहून अधिक देश आज आपापले चित्रपट निर्माण करीत"},
213 "Μέσα ένα τετράδιο είχα στριμώξει το πρώτο "
214 "νον αξίως τού ευαγγελίου τού χριστού πολιτεύεσθε, ίνα "
215 "οὐδεμία ὑπ' αὐτοῦ μνεία γίνεται τῶν οἰκείων χωρίων. "
216 "είτα την φάσιν αυτήν ην ούτος εποιήσατο κατά του Μίκω-"},
218 "ઉપહારગૃહે ને નાટ્યસ્થળે આ એ જ તેલ કડકડતું "
219 "શકી. ભાવવધારો અટકાવી નથી શકી અને બેકારીને "
220 "ત્યાં વાંકુથી પાછે આવ્યો, ચોરીનો માલ સોંપવા ! "
221 "કહી. એણે રેશમના કપડામાં વીંટી રાખેલ કુંવરીની છબી"},
223 "ਯਾਦ ਰਹੇ ਕਿ ‘ਨਫਰਤ ’ ਦਾ ਵਿਸ਼ਾ ਕ੍ਰਾਤੀ ਨਹੀ ਹੈ ਅਤੇ ਕਵੀ ਦੀ ਇਹ "
224 "ਮਹਾਂ ਨੰਦਾ ਕੋਲ ਇਕ ਚੀਜ਼ ਸੀ ਉਹ ਸੀ ਸਚ, ਕੋਰਾ ਸਚ, ਬੇਧਤ੍ਰਕ ਕਹਿੳ "
225 "ਭੂਰਾ ਸਾਨੂੰ ਥੜਾ ਚੰਗਾ ਲਗਦਾ ਸੀ । ਉਸ ਦਾ ਇਕ ਪੈਰ ਜਨਮ ਤੋ "
226 "ਨੂੰ ਇਹ ਅਧਿਕਾਰ ਦਿੱਤਾ ਕਿ ਉਹ ਸਿੱਖ ਵਿਰੋਧ ਦਾ ਸੰਗਠਨ ਕਰੇ ਅਤੇ 3 ਸਤੰਬਰ,"},
228 "로 들어갔다. 이대통령은 아이젠하워 대통령의 뒷모습을 보면서 "
229 "그것뿐인 줄 아요? 노름도 했다 캅니다. 빌어묵을 놈이 그러 "
230 "의 가장 과학적 태도이며, 우리 역사를 가장 정확하게 학습할 수 있는 "
232 "각하는 그는 그들의 식사보장을 위해 때때로 집에"},
234 "大凡世界上的先生可 分 三 种: 第一种只会教书, 只会拿一 "
235 "书像是探宝一样,在茶叶店里我买过西湖龙井﹑黄山毛峰﹑福建的铁观音﹑大红"
237 "持 “左” 倾冒险主义的干部,便扣上 “富农 "
238 "笑说:“我听说了,王总工程师也跟我说过了,只是工作忙,谁"},
241 "民國六十三年,申請就讀台灣大學歷史研究所,並從事著述,"
242 "質言之﹐在社會結構中﹐性質﹑特徵﹑地位相類似的一羣人﹐由於 "
243 "董橋,一九四二年生,福建晉江人,國立成功大學外"},
245 " אֵ-לִי, אֵ-לִי, כֵּיַצד מְטַפְּסִים בְּקִירוֹת שֶׁל זְכוּכִי"
246 " הראשון חוצה אותי שוב. אני בסיבוב הרביעי, הוא בטח מתחיל את"
247 " ווערטער געהאט, אבער דער עיקר איז ניט דאָס וואָרט, נאָר"
248 " על גחלת היהדות המקורית בעירך, נתת צביון ואופי מיוחד"},
250 "は異民族とみなされていた。楚の荘王(前613〜前 "
251 "を詳細に吟味する。実際の治療活動の領域は便宜上、(1) 障害者 "
252 "困難性は多角企業の場合原則として部門別に判断されている.). "
253 "☆ご希望の団体には見本をお送りします"},
255 "ಕೂಡ ಯುದ್ಧ ಮಾಡಿ ಜಯಪಡೆ. ನಂತರ ನಗರದೊಳಕ್ಕೆ ನಡೆ ಇದನ್ನು "
256 "ಅಸಹ್ಯದೃಶ್ಯ ಯಾರಿಗಾದರೂ ನಾಚಿಕೆತರುವಂತಹದಾಗಿದೆ. ಆರೋಗ್ಯ ದೃಷ್ಟಿ "
257 "ಯಾಗಲಿ, ಮೋಹನನಾಗಲಿ ಇಂಥ ಬಿಸಿಲಿನಲ್ಲಿ ಎಂದೂ ಬಹಳ ಹೊತ್ತು "
258 "\"ಇದೆ...ಖಂಡಿತಾ ಇದೆ\" ಅಂದ ಮನಸ್ಸಿನಲ್ಲಿಯೇ ವಂದಿಸುತ್ತಾ,"},
260 "សិតសក់និងផ្លាស់សម្លៀកបំពាក់ពេលយប់ចេញ។ "
261 "និយាយអំពីនគរនេះ ប្រាប់ដល់លោកទាំងមូលឲ្យដឹងច្បាស់លាស់អំពី "
262 "កន្លះកាថាសម្រាប់ទន្ទេញឲ្យងាយចាំ បោះពុម្ពនៅក្នុងទ្រង់ទ្រាយបច្ចុប្បន្ន "
263 "ឯកសារនេះបានផ្សព្វផ្សាយនៅក្នុងសន្និសីទ"},
265 "ເອີຍ ! ຟັງສຽງຟ້າມັນຮ້ອງຮ່ວນ ມັນດັງໄກໆ ເອີຍ "
266 "ໄດລຽງດູລາວມາດວບຄວາມລາບາກຫລາຍ; "
267 "ບາງໄດ້ ເຈົ້າລອງສູ້ບໍ່ໄດ້ຈຶ່ງຫນີລົງມາວຽງຈັນ. "
268 "ລົບອອກຈາກ 3 ເຫລືອ 1, ຂ້ອຍຂຽນ 1 (1)"},
270 "režisoru, palīdzēja to manu domīgo, kluso Dzejas metru ielikt "
271 "Ešte nedávno sa chcel mladý Novomeský „liečiť” "
272 "tiivisia kysymyksiä, mistä seuraa, että spekula- | don luonteesta "
273 "Grabiel Sanchez, yang bertani selama 120 tahun meninggal"},
275 "അമൂർത്തചിത്രമായിരിക്കും. ഛേ! ആ വീട്ടിലേക്ക് അവളൊന്നിച്ച് പോകേണ്ടതാ "
276 "മൃഗങ്ങൾക്ക് എന്തെക്കിലും പറ്റിയാൽ മാത്രം ഞാനതു "
277 "വെലക്ക് വേണമെങ്കിൽ തരാം. എന്തോ തരും? പറ. "
278 "എല്ലാം കഴിഞ്ഞ് സീനിയറിന്റെ അടുത്തു ചെന്ന് കാൽതൊട്ട"},
280 "பொருத்தமாகப் பாடினாள் நம் ஔவைப் பாட்டி. காவிரி "
281 "உள்ளடக்கி நிற்பது விநோத வார்த்தையின் அஃறிணை "
282 "சூரிய கிரஹண சமயத்தில் குருக்ஷேத்திரம் செல்வது "
283 "காலங்களில் வெளியே போகும்பொழுது, 'ஸார்', 'ஸார்',"},
285 "1892లో ఆమె 10వ సంవత్సరంలో గుంటూరు తాలూకా వేములాపాడు "
286 "ఫండ్స్ చట్టము'నందు చేయబడెను. తరువాత క్రీ. శ. "
287 "సంచారము చేయును. మీరు ఇప్పుడే కాళకాలయమునకు "
288 "ఎంతటి సరళమైన భాషలో వ్రాశాడో విశదమవుతుంది. పైగా ఆనాటి భాష"},
290 "อ้อ! กับนัง....แม่ยอดพระกลิ่น นั่นเอง ! หรับก็ย่อมจะรู้โดยชัดเจนว่า "
291 "ถ้าตราบใดยังมีเรือปืนอยู่ใกล้ ๆ แล้ว ตราบนั้น "
292 "พระดำรินี้ ที่มีคตีทำกรวยหมากและธูปเทียน "
293 "อันยานมีเรือเปนต้นฃ้ามยาก ฯ เพราะว่าแม่น้ำนั่นมีน้ำใสยิ่ง แม้เพียง"},
295 "vợ đến tai mụ hung thần Xăng-tô- mê-a. Mụ vô cùng "
296 "chiếc xe con gấu chạy qua nhà. Nhưng thỉnh thoảng "
297 "hòa hoãn với người Pháp để cho họ được dựng một ngôi nhà thờ nhỏ bằng "
298 "Cặp câu đói súc tích mà sâu sắc, là lời chúc lời"}});
300 for (
const auto &
p : kScriptText) {
301 std::string normalized;
305 <<
"Script=" <<
p.first <<
" text=" <<
p.second;
318 snprintf(text,
sizeof(text),
"Failed at U+%x",
ch);
336 const char kHinText[] =
"पिताने विवाह";
337 const char kKorText[] =
"이는 것으로 다시 넣을";
338 const char kMixedText[] =
"والفكر 123 والصراع abc";
354#ifdef INCLUDE_TENSORFLOW
355 const int32_t kMinUnicodeValue = 33;
356 const int32_t kMaxUnicodeValue = 0x10FFFF;
357 for (int32_t
ch = kMinUnicodeValue;
ch <= kMaxUnicodeValue; ++
ch) {
359 snprintf(text,
sizeof(text),
"Failed at U+%x",
ch);
371#if defined(MISSING_CODE) && defined(INCLUDE_TENSORFLOW)
372 const int32_t kMinUnicodeValue = 33;
373 const int32_t kMaxUnicodeValue = 0x10FFFF;
374 for (int32_t
ch = kMinUnicodeValue;
ch <= kMaxUnicodeValue; ++
ch) {
376 snprintf(text,
sizeof(text),
"Failed at U+%x",
ch);
378 std::string str = EncodeAsUTF8(
ch);
397#if defined(MISSING_CODE) && defined(INCLUDE_TENSORFLOW)
399 const int32_t kMinUnicodeValue = 33;
400 const int32_t kMaxUnicodeValue = 0x10FFFF;
401 for (int32_t
ch = kMinUnicodeValue;
ch <= kMaxUnicodeValue; ++
ch) {
405 snprintf(text,
sizeof(text),
"Failed at U+%x",
ch);
407 std::string str = EncodeAsUTF8(
ch);
408 const std::string expected_half_str =
#define EXPECT_EQ(val1, val2)
#define SCOPED_TRACE(message)
#define EXPECT_TRUE(condition)
#define EXPECT_STREQ(s1, s2)
#define EXPECT_FALSE(condition)
bool IsWhitespace(const char32 ch)
unsigned int SpanUTF8Whitespace(const char *text)
std::string PrintString32WithUnicodes(const std::string &str)
void ExpectGraphemeModeResults(const std::string &str, UnicodeNormMode u_mode, int unicode_count, int glyph_count, int grapheme_count, const std::string &target_str)
bool IsInterchangeValid(const char32 ch)
bool NormalizeCleanAndSegmentUTF8(UnicodeNormMode u_mode, OCRNorm ocr_normalize, GraphemeNormMode g_mode, bool report_errors, const char *str8, std::vector< std::string > *graphemes)
bool NormalizeUTF8String(UnicodeNormMode u_mode, OCRNorm ocr_normalize, GraphemeNorm grapheme_normalize, const char *str8, std::string *normalized)
const char * kBadlyFormedHinWords[]
const char * kBadlyFormedThaiWords[]
bool IsInterchangeValid7BitAscii(const char32 ch)
char32 FullwidthToHalfwidth(const char32 ch)
unsigned int SpanUTF8NotWhitespace(const char *text)
bool IsValidCodepoint(const char32 ch)
TEST(TesseractInstanceTest, TestMultipleTessInstances)
bool IsInterchangeValid(char32 c)