void GLogicProcessor::renderDictSearch(map<vector<short>,int>&searchResult, vector<OCRMatch>&dLine, vector<OCRMatch>&originalMatch, vector<OCRMatch>&pageText){ int print=0; DR(" searchResult.size()="<<searchResult.size()<<" dLine()="<<dLine.size()) vector<OCRMatch>wordLine; //TIME_START //в dLine[] записаны пары букв из которых словарь собирал фразы //для окончательной сборки фразы нужны найденные с словаре фразы, составленные из оригинальных пар букв //также нужны сами пары букв для частей фразы на которые не найдены ответы словаря //каждый OCRMatch содержит два массива, в которые записана информация о парах букв, составляющих фразу. // .line[] содержит индекс пар букв и возвращается заполненным в searchResult как результат работы словаря // .letter[] содержит копию пары букв по индексу line[] из исходного массива dLine[] for(int i=0;i<originalMatch.size();i++){ originalMatch[i].setSize(); } map<vector<short>,int>::iterator it; for (it = searchResult.begin(); it != searchResult.end(); ++it) { OCRMatch word; int in=abs(it->first[0]); //знаком значения записано есть ли по мнению словаря разделитель слогов в этой паре word.x0=dLine[in].x0; word.y0=dLine[in].y0; word.xL0C=dLine[in].letter[0].xCenter; int d; int sizeStr=0; while(sizeStr<128){ d=it->first[sizeStr]; DR(d<<" ") if(d==32767)break; //32767 маркирует конец строки word.line.push_back(d); sizeStr++; } d=abs(word.line[word.line.size()-1]); word.x1=dLine[d].x1; word.y1=dLine[d].y1; word.xL1C=dLine[d].letter[1].xCenter; word.correlation=0; int n; for(int i=0;i<sizeStr;i++){ //DR(searchResult[i].line[j]<<" c="<<line[searchResult[i].line[j]].correlation; //DR(" searchResult["<<i<<"].line.size()="<<searchResult[i].line.size()<<" ind="<<searchResult[i].line[j]) n=abs(it->first[i]); word.wName+=dLine[n].wName[0]; word.correlation+=dLine[n].correlation; } word.wName+=dLine[n].wName[1]; word.correlation=word.correlation/sizeStr+(float)(sizeStr*100)/50+(float)(it->second)/5000; //учитываем длину и вероятность фразы //word.correlation+=it->second; //прибавляем к кореляции количество ответов словаря //word.correlation=word.line.size(); //if(word.correlation<70)continue; word.name=Unicode_to_UTF(word.wName); DR("Yagpo= "<<word.name<<" "<<endl) word.name=YagpoToUni(word.name); DR("xL0C="<<word.xL0C<<"xL1C="<<word.xL1C<<" n="<<word.name<<endl); DR(word.name<<"/"<<"c="<<word.correlation<<" x0="<<word.x0<<" x1="<<word.x1<<" y0="<<word.y0<<" y1="<<word.y1<<endl) wordLine.push_back(word); } //drawGrapeLine(wordLine); exit(0); //результаты словаря с записаными в разделители букв знаками препинания и расставленными слогами //drawGrapeLine(originalMatch); exit(0); //результаты распознавания //drawGrapeLine(dLine); exit(0); //пары букв с записанными в разделители букв знаками препинания //print=1; //добавляем распознанные пары букв for(int i=0;i<dLine.size();i++){ if(!dLine[i].correlation)continue; //значение уже записано OCRMatch word=dLine[i]; word.name=Unicode_to_UTF(word.wName); //DR("Yagpo= "<<word.name<<" ") word.name=YagpoToUni(word.name); word.line=dLine[i].line; word.line.push_back(i); wordLine.push_back(word); } for(int i=0;i<wordLine.size();i++){ wordLine[i].status=0; wordLine[i].allMatchCount=1; wordLine[i].setSize(); //DR(" wordLine[i]="<<wordLine[i].name<<" w="<<wordLine[i].letterW) } sort(wordLine.begin(),wordLine.end(),sortMatchX0); compressMatch(wordLine); //drawGrapeLine(wordLine); exit(0); //int count=(int)wordLine.size(); //int step=0; print=0; //проверяем ответы словаря на здравый смысл. Пары букв из которых составлен ответ словаря не должны отменять //уверенно распознанные буквы //также убираем пустые значения vector<OCRMatch>wLine; for(int i=0;i<wordLine.size();i++){ if(!wordLine[i].correlation)continue; wordLine[i].status=0; DR("wordLine["<<i<<"].name="<<wordLine[i].name<<endl); if(wordLine[i].line.size()>1){ //для полученных фраз удобнее хранить исходные пары букв внутри фразы for(int j=0;j<wordLine[i].line.size();j++){ DR(" ind="<<wordLine[i].line[j]<<" size="<<wordLine[i].line.size()) DR(" n="<<dLine[abs(wordLine[i].line[j])].name<<" d="<<dLine[abs(wordLine[i].line[j])].letter[0].delimeter<<endl) wordLine[i].letter.push_back(dLine[abs(wordLine[i].line[j])].letter[0]); //wordLine[i].letter.push_back(dLine[abs(wordLine[i].line[j])].letter[1]); if(wordLine[i].line[j]<0){ //если в паре по мнению словаря есть разделитель слога (минус маркирует такие пары) /@@@ wordLine[i].letter[wordLine[i].letter.size()-1].delimeter=dLine[abs(wordLine[i].line[j])].letter[0].delimeter; if(wordLine[i].letter[wordLine[i].letter.size()-1].delimeter=="")wordLine[i].letter[wordLine[i].letter.size()-1].delimeter="་"; } } wordLine[i].letter.push_back(dLine[abs(wordLine[i].line[wordLine[i].line.size()-1])].letter[1]); } //if(wordLine[i].letter.size()==1){ //нормализуем одиночные пары букв // wordLine[i].letter[0].delimeter=wordLine[i].delimeter; // } wLine.push_back(wordLine[i]); } //drawGrapeLine(wLine); exit(0); //полученные в результате подготовки в renderDictSearch части фразы собираем в целые фразы //на этом этапе фразы собираются вместе ограничителями слогов и знаками препинания и примечаниями внутри фразы. sentenceConstructur(wLine); //drawGrapeLine(wLine); exit(0); //расставляем ограничители слогов (точки) print=0; string str; wstring delimeter; for(int n=0;n<originalMatch.size();n++){ originalMatch[n].setSize(); } print=0; for(int i=0;i<wLine.size();i++){ if(!wLine[i].correlation)continue; DR(wLine[i].name<<endl) wLine[i].wName=L""; for(int n=0;n<wLine[i].letter.size();n++){ str=wLine[i].letter[n].delimeter; //cout<<"d="<<str; str=UnicodeToYagpo(str); delimeter=UTF_to_Unicode(str); wLine[i].wName+=wLine[i].letter[n].wName[0]+delimeter; DR(" n="<<wLine[i].letter[n].name<<"d="<<str<<"/"<<endl) } wLine[i].wName+=wLine[i].letter[wLine[i].letter.size()-1].wName[1]; wLine[i].name=Unicode_to_UTF(wLine[i].wName); wLine[i].name=YagpoToUni(wLine[i].name); DR(" n="<<wLine[i].name<<endl) wLine[i].correlation+=3; //создаем приоритет над парами без расставленных ограничителей слогов //добавляем результат к массиву исходных букв (результат распознавания включая все распознанные буквы и символы) //это позволит разобрать части фразы, не закрытые словарными ответами //x0=wLine[i].x0; x1=wLine[i].x1; //for(int n=0;n<dLine.size();n++){ // if(dLine[n].x0>=x0&&dLine[n].x1<=x1)dLine[n].correlation=0; //} //wLine[i].correlation=100; dLine.push_back(wLine[i]); //DR(wLine[i].name) } //добавляем все исходные графические элементы. Это нужно для распознования отдельно стоящих букв и знаков препинания for(int i=0;i<originalMatch.size();i++)dLine.push_back(originalMatch[i]); for(int i=0;i<dLine.size();i++)dLine[i].setSize(); sort(dLine.begin(),dLine.end(),sortMatchXCenter); //drawGrapeLine(dLine); exit(0); print=0; //убираем фразы внутри стыкованной фразы int limit; for(int n=0;n<dLine.size();n++){ if(!dLine[n].correlation)continue; if(dLine[n].y0>y1Base)dLine[n].correlation=0; //print=0;if(n==13)print=1; if(!print)continue; DR("@@@@"<<n<<" Collect n="<<dLine[n].name<<" d="<<dLine[n].delimeter<<endl) for(int m=0;m<dLine.size();m++){ if(!dLine[m].correlation)continue; //print=0;if(m==16)print=1; if(m==n)continue; limit=12; if(dLine[n].OCRIndex!='N'&&dLine[m].OCRIndex=='N')limit=0; if(dLine[n].OCRIndex!='Z'&&dLine[m].OCRIndex=='Z')limit=0; if(dLine[n].OCRIndex=='N'&&dLine[m].OCRIndex=='N')limit=0; if(dLine[n].OCRIndex=='Z'&&dLine[m].OCRIndex=='Z')limit=4; if(dLine[n].OCRIndex=='Z'&&dLine[m].OCRIndex!='Z')limit=0; if(dLine[n].OCRIndex=='S'&&dLine[m].OCRIndex=='S')limit=0; if(dLine[m].xCenter>dLine[n].x0-limit&&dLine[m].xCenter<dLine[n].x1+limit){ DR("n"<<n<<"="<<dLine[n].name<<" d="<<dLine[n].delimeter<<" c="<<dLine[n].correlation<<" m"<<m<<"="<<dLine[m].name <<" c="<<dLine[m].correlation<<" xmC="<<dLine[m].xCenter<<" xnC="<<dLine[n].xCenter<<" xnX0="<<dLine[n].x0<<" xnX1="<<dLine[n].x1<<" wM="<<dLine[m].letterW<<" wN="<<dLine[n].letterW<<endl); if(dLine[n].correlation>dLine[m].correlation){ if(dLine[n].letterW>dLine[m].letterW-limit||(dLine[n].letterW/dLine[m].letterW)>1.3){ DR(100) DR("REMOVE M "<<m<<" cM="<<dLine[m].correlation<<" wM="<<dLine[m].letterW<<" cN="<<dLine[n].correlation<<" wN="<<dLine[n].letterW<<endl) dLine[m].correlation=0; }else{ DR(200) if(dLine[n].correlation-dLine[m].correlation>5){ //предпочтение отдаем более широким буквам dLine[m].correlation=0; DR("REMOVE M1 "<<m<<" cN="<<dLine[n].correlation<<endl) }else{ DR("REMOVE N "<<m<<" cN="<<dLine[n].correlation<<endl) dLine[n].correlation=0; break; } } }else{ if(dLine[m].letterW>dLine[n].letterW-limit||(dLine[n].letterW/dLine[m].letterW)<1.3){
string GLogicProcessor::startConvert(){ //cout<<"Start inputData.data[\"inputFolder\"]"<<inputData.data["inputFolder"]<<END; string str,path; vector<string> strVector; int index=0; DIR *dir; int fileFlag; string ocrData=inputData.data["ocrData"]; while(index<inputData.fileList.size()){ if( ( dir=opendir(inputData.fileList[index].c_str()))!=NULL){ if(ocrData=="RTFToYagpo"){ fileFlag=readDirectoryToArray(inputData.fileList, inputData.fileList[index],"rtf"); }else{ fileFlag=readDirectoryToArray(inputData.fileList, inputData.fileList[index],"txt"); } inputData.fileList.erase(inputData.fileList.begin()+index); continue; } index++; } if(ocrData=="YagpoToWylie"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"YagpoToWylieConverter inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); mainString=""; for(int i=0;i<strVector.size();i++){ mainString+=TibUniToWylie(strVector[i],2); mainString+="\n"; } writeText(mainString, path); cout<<"done convert"; } }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ mainString+=TibUniToWylie(inputData.fileList[i],2); mainString+="\n"; } return mainString; } } if(ocrData=="CXS_to_UTF"){ loadMapFilePali("CXS_UTF_HTML.xml"); cout<<"fileList.size()="<<inputData.fileList.size(); for(int i=0;i<inputData.fileList.size();i++){ inputData.data["inputFile"]=inputData.fileList[i]; cout<<"convert "<<i<<" from "<<inputData.fileList.size()<<" "<<inputData.fileList[i]<<END; strVector.resize(0); readText(strVector,inputData.data["inputFile"]); for(int m=0;m<strVector.size();m++){ //strVector[m]= regex_replace( strVector[m], date, format ); strVector[m]=Unicode_to_UTF(strVector[m]); convertCXS_to_UTF_nocopy(strVector[m]); //cout<<strVector[m]; } writeText(strVector,inputData.data["inputFile"]); } } if(ocrData=="SinhalaUniToYagpo"){ } if(ocrData=="ConcatenateFolder"){ cout<<"fileList.size()="<<inputData.fileList.size(); ofstream srcOutput; str=inputData.data["inputFolder"]; str+="/allText.txt"; srcOutput.open(str.c_str()); for(int i=0;i<inputData.fileList.size();i++){ inputData.data["inputFile"]=inputData.fileList[i]; readText(str,inputData.data["inputFile"].c_str()); cout<<"cat "<<i<<" from "<<inputData.fileList.size()<<" "<<inputData.fileList[i]<<END; srcOutput<<str<<endl; } srcOutput.close(); } if(ocrData=="LowerCase"){ loadMapFilePali("CXS_UTF_HTML.xml"); cout<<"fileList.size()="<<inputData.fileList.size(); for(int i=0;i<inputData.fileList.size();i++){ inputData.data["inputFile"]=inputData.fileList[i]; cout<<"convert "<<i<<" from "<<inputData.fileList.size()<<" "<<inputData.fileList[i]<<END; strVector.resize(0); readText(strVector,inputData.data["inputFile"]); int step=0; for(int m=0;m<strVector.size();m++){ //strVector[m]= regex_replace( strVector[m], date, format ); //strVector[m]=Unicode_to_UTF(strVector[m]); lowerCase_nocopy(strVector[m]); if(step==1000){ cout<<m<<"."<<strVector[m]<<END; step=0;}step++; } writeText(strVector,inputData.data["inputFile"]); } } //cout<<"inputData.data[\"ocrData\"]="<<ocrData<<END; if(ocrData=="PaliUTFToEng"){ cout<<"PaliUTFToEng"<<END; } if(ocrData=="RTFToYagpo"){ ofstream c_out; c_out.open("/_out.txt"); cout<<"RTFToYagpo inputData.fileList.size()="<<inputData.fileList.size()<<END; string mainString; for(int i=0;i<inputData.fileList.size();i++){ mainString=""; #ifdef COCOA RTFtoYagpoConverter(mainString,inputData.fileList[i]); #endif string path=inputData.fileList[i]+"_out.txt"; cout<<"path="<<path<<END; writeText(mainString, path); c_out<<report; } return "done convert"; } if(ocrData=="dWylieToYagpo"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"dWylieToYagpoConverter inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); mainString=""; int step=0; for(int i=0;i<strVector.size();i++){ if(step==1000){cout<<i<<" ";step=0;}step++; mainString+=dWylieToYagpoConverter(strVector[i]); mainString+="\n"; } writeText(mainString, path); } }else{ for(int i=0;i<inputData.fileList.size();i++){ mainString=""; mainString+=dWylieToYagpoConverter(inputData.fileList[i])+"\n"; } return mainString; } } if(ocrData=="dSinhalaASCIToYagpo"){ string mainString; string path=inputData.data["tablePath"]+"codePages/SinhalaASCI.xml"; readMapXML(SinhalaASCI,path); cout<<"SinhalaASCI.size()="<<SinhalaASCI.size()<<END; if(inputData.data["InputMethod"]=="fileList"){ cout<<"dSinhalaASCIToYagpo inputData.fileList.size()="<<inputData.fileList.size()<<END; int step=0; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); cout<<"strVector.size()="<<strVector.size()<<END; mainString=""; for(int i=0;i<strVector.size();i++){ mainString+=dSinhalaASCIToYagpo(strVector[i])+"\n"; if(step==1000){cout<<i<<" ";step=0;}step++; } writeText(mainString, path); } }else{ int step=0; for(int i=0;i<inputData.fileList.size();i++){ mainString=""; mainString+=dSinhalaASCIToYagpo(inputData.fileList[i]); if(step==1000){cout<<".";step=0;}step++; } cout<<mainString<<END; } } if(ocrData=="SinhalaUniToYagpo"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"SinhalaUniToYagpo inputData.fileList.size()="<<inputData.fileList.size()<<END; int step=0; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); cout<<"strVector.size()="<<strVector.size()<<END; mainString=""; for(int i=0;i<strVector.size();i++){ mainString+=SinhalaUniToYagpo(strVector[i],2)+"\n"; if(step==1000){cout<<i<<" ";step=0;}step++; } writeText(mainString, path); } }else{ int step=0; for(int i=0;i<inputData.fileList.size();i++){ mainString=""; mainString+=SinhalaUniToYagpo(inputData.fileList[i],2); if(step==1000){cout<<".";step=0;}step++; } return mainString; } } if(ocrData=="SinhalaMettaToYagpo"){ string mainString; string path=inputData.data["tablePath"]+"codePages/SinhalaMetta.xml"; readMapXML(SinhalaASCI,path); cout<<"SinhalaASCI.size()="<<SinhalaASCI.size()<<END; if(inputData.data["InputMethod"]=="fileList"){ cout<<"dSinhalaASCIToYagpo inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); cout<<"strVector.size()="<<strVector.size()<<END; mainString=""; int step=0; for(int i=0;i<strVector.size();i++){ //cout <<"next string "<<i<<" ="<<strVector[i]<<endl; if(strVector[i].size()){ mainString+=SinghalaASCIToYagpo(strVector[i])+"\n"; }else{mainString+="\n";} if(step==1000){cout<<i<<" ";step=0;}step++; } writeText(mainString, path); } }else{ int step=0; for(int i=0;i<inputData.fileList.size();i++){ mainString=""; mainString+=dSinhalaASCIToYagpo(inputData.fileList[i]); if(step==1000){cout<<".";step=0;}step++; } return mainString; } cout<<"DONE CONVERT"; } if(ocrData=="WylieToYagpo"){ string mainString; cout<<" @inputData.data[InputMethod]="<<inputData.data["InputMethod"]<<endl; loadTransliterationFile("TranslitTableUni_Wylie.xml"); if(inputData.data["InputMethod"]=="fileList"){ cout<<"WylieToYagpoConverter inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; cout<<" path="<<path; readText(strVector, inputData.fileList[i]); cout<<" strVector="<<strVector.size()<<endl; mainString=""; int step=0; string str; for(int i=0;i<strVector.size();i++){ if(step==100){cout<<i<<" ";step=0;}step++; str=WylieToYagpoConverter(strVector[i]); mainString+=YagpoToUni(str); mainString+="\n"; } writeText(mainString, path); cout<<"done convert"; } }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ mainString+=WylieToYagpoConverter(inputData.fileList[i])+"\n"; } return mainString; } } if(ocrData=="TibUniToWylie"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"YagpoToWylieConverter inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); mainString=""; for(int i=0;i<strVector.size();i++){ mainString+=TibUniToWylie(strVector[i],1); mainString+="\n"; } writeText(mainString, path); cout<<"done convert"; } }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ mainString+=TibUniToWylie(inputData.fileList[i],1); mainString+="\n"; } return mainString; } } if(ocrData=="YagpoToWylie"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"YagpoToWylieConverter inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); mainString=""; for(int i=0;i<strVector.size();i++){ mainString+=TibUniToWylie(strVector[i],2); mainString+="\n"; } writeText(mainString, path); cout<<"done convert"; } }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ mainString+=TibUniToWylie(inputData.fileList[i],2); mainString+="\n"; } return mainString; } } if(ocrData=="YagpoToUnicode"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"YagpoToUnicode inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); mainString=""; cout<<"strVector.size()="<<strVector.size()<<endl; int step=0; for(int n=0;n<strVector.size();n++){ if(step==strVector.size()/100){ step=0;cout<<".";}step++; mainString+=YagpoToUni(strVector[n]); mainString+="\n"; } writeText(mainString, path); //return path; } return "done"; }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ mainString+=YagpoToUni(inputData.fileList[i]); //cout<<"mainString="<<mainString<<endl; mainString+="\n"; } return mainString; } } if(ocrData=="UnicodeToYagpo"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"YagpoToUnicode inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); cout<<"convert "<<inputData.fileList[i]<<endl; path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); mainString=""; int step=0; for(int n=0;n<strVector.size();n++){ //mainString+=UnicodeToYagpo(strVector[n]); if(step==100000){cout<<n<<" "; step=0;} step++; mainString+=tibetanUTFToYagpo(strVector[n],1); mainString+="\n"; } writeText(mainString, path); } }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ mainString+=UnicodeToYagpo(inputData.fileList[i]); if(i)mainString+="\n"; } return mainString; } } if(ocrData=="BonPDFToUni"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"BonPDFToUni inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); cout<<"convert "<<inputData.fileList[i]<<endl; path=inputData.fileList[i]+"_out.txt"; readText(strVector, inputData.fileList[i]); mainString=""; for(int n=0;n<strVector.size();n++){ BonPDFToUni(strVector[n]); mainString+=strVector[n]; mainString+="\n"; } writeText(mainString, path); } return "done"; }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ BonPDFToUni(inputData.fileList[i]); mainString+=inputData.fileList[i]; if(i)mainString+="\n"; } return mainString; } } if(ocrData=="tibTextCorrector"){ string mainString,path; readGrammarDataXML(inputData.data["wordsDataPath"]); if(inputData.data["mode"]!="text"){ cout<<"TibetanCorrector inputData.fileList.size()="<<inputData.fileList.size()<<END; cout<<" mode="<<inputData.data["mode"]<<endl; if(inputData.data["system"]=="process"){ for(int i=0;i<inputData.fileList.size();i++){ cout<<"convert "<<inputData.fileList[i]<<endl; inputData.data["fileName"]=inputData.fileList[i]; path=str_replace(".txt",".html",inputData.fileList[i]); inputData.data["outFile"]=path; TibetanCorrector(); string cmd="textutil -convert rtf \""+path+"\""; cout<<cmd<<endl; system(cmd.c_str()); } }else{ for(int i=0;i<inputData.fileList.size();i++){ //strVector.resize(0); cout<<"convert "<<inputData.fileList[i]<<endl; ostringstream out; out<<inputData.data["rootApp"]<<" \"xml=<fileList>"<<inputData.fileList[i]<< "</fileList><ocrData>"<<inputData.data["ocrData"]<<"</ocrData>"<< "<ocrLn>"<<inputData.data["ocrLn"]<<"</ocrLn><system>process</system>\" &"; string cmd=out.str(); //cout<<cmd; exit(0); system(cmd.c_str()); } } return "done"; }else{ mainString=implode("\n",inputData.fileList); mainString=lineTibetanCorrector(mainString); return mainString; } } if(ocrData=="transcription"){ string mainString,path; loadTransliterationFile("TranslitTableUni_Wylie.xml"); if(inputData.data["InputMethod"]=="fileList"){ cout<<"TranslitYagpoRus inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ //strVector.resize(0); cout<<"convert "<<inputData.fileList[i]<<endl; inputData.data["fileName"]=inputData.fileList[i]; path=inputData.fileList[i]+"_out.txt"; inputData.data["outFile"]=path; Transcription(); } return "done"; }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ mainString+=lineTranscription(inputData.fileList[i]); mainString+="\n"; } return mainString; } } if(ocrData=="textNormalisation"){ string mainString,path; if(inputData.data["InputMethod"]=="fileList"){ cout<<"textNormalisation inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ //strVector.resize(0); cout<<"convert "<<inputData.fileList[i]<<endl; inputData.data["fileName"]=inputData.fileList[i]; path=inputData.fileList[i]+"_out.txt"; inputData.data["outFile"]=path; string srcStr; readText(srcStr,inputData.data["fileName"].c_str()); //readText(strVector, inputData.fileList[i]); //mainString=""; //for(int n=0;n<strVector.size();n++){ // mainString+=TranslitYagpo(strVector[n]); // mainString+="\n"; //} //writeText(mainString, path); textNormalisation(srcStr); } }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ //mainString+=TranslitYagpo(); if(i)mainString+="\n"; } return mainString; } } if(ocrData=="TXTtoXML"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"TXTtoXML inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+".xml"; path=str_replace(".doc.txt", "" ,path); path=str_replace(".DOC.txt", "" ,path); readText(strVector, inputData.fileList[i]); cout<<"strVector.size()="<<strVector.size()<<END; mainString="<text:text xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:text=\"http://www.tbrc.org/models/text#\" RID=\"\" lang=\"bo_ZH\" volume=\"\" num=\"\" fromWork=\"lam.dre\" fromVolume=\"\" start=\"0\" last=\"\">"; for(int n=0;n<strVector.size();n++){ if(strVector[n].find("FILE",0)==string::npos&&strVector[n].find("PAGE",0)==string::npos){ //if(strVector[n].find("Corel",0)!=string::npos)cout<<inputData.fileList[i]<<END; mainString+=strVector[n]; mainString+="\n"; } } mainString+="</text:text>"; cout<<path<<END; writeText(mainString, path); } }else{ mainString="start\n"; for(int i=0;i<inputData.fileList.size();i++){ mainString+=YagpoToUni(inputData.fileList[i]); } cout<<mainString<<END; } } if(ocrData=="TXTtoHTML"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ cout<<"TXTtoHTML inputData.fileList.size()="<<inputData.fileList.size()<<END; for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]+".xml"; path=str_replace(".doc.txt", "" ,path); path=str_replace(".DOC.txt", "" ,path); readText(strVector, inputData.fileList[i]); cout<<"inputData.fileList[i]="<<inputData.fileList[i]<<" strVector.size()="<<strVector.size()<<END; //continue; /* mainString="<text:text xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:text=\"http://www.tbrc.org/models/text#\" RID=\"\" lang=\"bo_ZH\" volume=\"\" num=\"\" fromWork=\"lam.dre\" fromVolume=\"\" start=\"0\" last=\"\">"; for(int n=0;n<strVector.size();n++){ if(strVector[n].find("FILE",0)==string::npos&&strVector[n].find("PAGE",0)==string::npos){ //if(strVector[n].find("Corel",0)!=string::npos)cout<<inputData.fileList[i]<<END; mainString+=strVector[n]; mainString+="\n"; } } mainString+="</text:text>"; cout<<path<<END; writeText(mainString, path); */ } }else{ mainString="start\n"; for(int i=0;i<inputData.fileList.size();i++){ mainString+=YagpoToUni(inputData.fileList[i]); } cout<<mainString<<END; } } if(ocrData=="UTF8"){ string mainString; if(inputData.data["InputMethod"]=="fileList"){ DT("YagpoToUnicode inputData.fileList.size()="<<inputData.fileList.size()<<endl); for(int i=0;i<inputData.fileList.size();i++){ strVector.resize(0); path=inputData.fileList[i]; DT("convert path "<<path<<endl); readText(strVector, inputData.fileList[i]); mainString=""; for(int n=0;n<strVector.size();n++){ mainString+=Unicode_to_UTF(strVector[n]); mainString+="\n"; } writeText(mainString, path); } }else{ mainString=""; for(int i=0;i<inputData.fileList.size();i++){ mainString+=YagpoToUni(inputData.fileList[i]); mainString+="\n"; } return mainString; } } return ""; }//________________________________________________________________________________________________________________