正確に定義する方法がわからない状況があります。テキストから特定のパターンを抽出できる正規表現関数があります。合計で 9 つの関数があります。
bool extractDate(const char *);
bool extractHeureFax(const char*);
bool extractFaxPhone(const char*);
bool extractFormePolitesse(const char*);
bool extractCodePostal(const char*);
bool extractDate2(const char*);
bool extractTelephone2(const char*);
bool extractNumbers(const char*);
bool extractalphanumeric(const char*);
bool extractnumeric(const char*);
bool extractPageNumber(const char*);
問題は、正規表現を追加するたびにコード全体 を変更する必要があることです。これはあまり良い考えではありません。
彼らの解決策の 1 つは、すべての正規表現をテキスト ファイルに入れることでした。したがって、新しい正規表現を追加するたびに、それをテキスト ファイルに追加し、実行時に読み込むことができます。テキスト内のすべての正規表現には ID と RE が含まれます 。 例:
DATE: ^([0]?[1-9]|[1|2][0-9]|[3][0|1])([\\.\\-\\/\\ ])([0]?[1-9]|[1][0-2])([\\.\\-\\/\\ ])([0-9]{4}|[0-9]{2})$
HEURE: ([0-1][0-9]|[2][0-3]):([0-5][0-9])$
TELEPHONE: ^(01|02|03|04|05|06|08)(([\\.\\-\\/\\ ])?[0-9][0-9]){4}
FORMULE POLITESSE: ^((c|C)ordialement|Sinc(è|\u00E8)rement|Sinc(è|\u00E8)re|croire|agr(é|\u00E9)er|agreer|l'expression|distingu(é|\u00E9)s|sentiments|salutations|consid(e|é|\u00E9)ration)$
CODE POSTAL: ^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$
次に、テキストをベクトルに保存し、正しいものが見つかるまですべての正規表現を試します。
コードの内部: これが関数の処理方法です
if(extractDate(e->getName().c_str()))
{
e->setType(0);
}
else if(extractHeureFax(e->getName().c_str()))
{
e->setType(1);
// int x0 = e->getXCenter();
// int y0 = e->getYCenter();
// markPoints(xmlFile,x0,y0,20,0,255,0);
}
//TELEPHONE = BLEU
else if(extractFaxPhone(e->getName().c_str()))
{
e->setType(2);
}
else if(extractCodePostal(e->getName().c_str()))
{
e->setType(3);
}
ExtractDAte()、ExtractHeureFax() などは正規表現関数です。
bool Keywords::extractCodePostal(const char * code)
{
// cout <<"code postal"<<endl;
const boost::regex e("^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$");
return boost::regex_match(code,e);
}///end function
bool Keywords::extractDate2(const char*date2)
{
const boost::regex e("((j|J)anvier|(f|F)\u00E9vrier|(f|F)évrier|(f|F)evrier|(m|M)ars|(a|A)vril|(m|M)ai|(j|J)uin|(j|J)uillet|juillet|(a|A)o\u00FBt|(a|A)oût|aout|(s|S)eptembre|(o|O)ctobre|(n|N)ovembre|(d|D)\u00E9cembre|(d|D)écembre|(d|D)ecembre|JANVIER|FEVRIER|MARS|AVRIL|MAI|JUIN|JUILLET|AOUT|SEPTEMBRE|OCTOBRE|NOVEMBRE|DECEMBRE)");
return boost::regex_match(date2,e);
}///end function