0

正確に定義する方法がわからない状況があります。テキストから特定のパターンを抽出できる正規表現関数があります。合計で 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

ここに画像の説明を入力

4

0 に答える 0