本發(fā)明涉及計算機領(lǐng)域,尤其涉及一種基于正則表達式的匹配方法及裝置。
背景技術(shù):
一些業(yè)務(wù)處理過程中,例如,語音通話業(yè)務(wù)、短信業(yè)務(wù)等,需要對文本語句進行精確的過濾時,可以使用正則表達式與文本語句進行匹配。在現(xiàn)有技術(shù)中,在對于復(fù)雜的文本語句進行匹配之前,需要編寫一條與該復(fù)雜的文本語句完全匹配的正則表達式,或者編寫多條正則表達式與該復(fù)雜的文本語句進行多次匹配,難度和復(fù)雜度很高。
因此,當(dāng)對復(fù)雜的文本語句進行過濾時,采用現(xiàn)有技術(shù)的方法編寫正則表達式生成難度大,匹配靈活度低。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種基于正則表達式的匹配方法及裝置,以解決當(dāng)需要過濾很復(fù)雜的語句時,需要編寫多個復(fù)雜的正則表達式進行匹配,正則表達式生成難度大,匹配靈活度低的問題。
本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的:
一種基于正則表達式的匹配方法,該方法包括:
根據(jù)待匹配語句所屬的業(yè)務(wù)類型,確定與所述業(yè)務(wù)類型對應(yīng)的正則表達式集合;
將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句;
其中,所述正則表達式集合中的正則表達式是按照如下步驟生成的:
確定所述正則表達式集合所屬的業(yè)務(wù)類型對應(yīng)的數(shù)據(jù)庫;
將所述數(shù)據(jù)庫中的字,按照詞性進行分類,得到至少一種類型的字;
對于每種類型的字,根據(jù)語法結(jié)構(gòu),將該類型中的任意兩個或兩個以上的字組成詞;
將所述數(shù)據(jù)庫中的詞和所組成的詞,按照詞性進行分類,得到至少一種類型的詞;
將至少一種類型的字、至少一種類型的詞,和/或至少一個用于匹配任意字符的特定符號分別作為正則表達式的匹配項,并根據(jù)語法結(jié)構(gòu),將所述匹配項進行排序,形成至少一個正則表達式。
可選的,將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句,包括:
將所述待匹配語句與所述正則表達式集合中的正則表達式中的每個匹配項進行匹配;
若所述待匹配語句與任一正則表達式的每個匹配項均匹配成功,且所述任一正則表達式的每個匹配項在所述待匹配語句中的排列順序與在所述任一正則表達式中的排列順序一致,根據(jù)所述任一正則表達式,確定匹配后的語句,其中,所述匹配后的語句包括所述待匹配語句中與所述任一表達式中的匹配項匹配的字符。
可選的,所述根據(jù)所述任一正則表達式,確定匹配后的語句,包括:
確定所述任一正則表達式中的特定符號在所述任一正則表達式中的位置;
根據(jù)所述特定符號的編號,確定所述任一正則表達式中所述特定符號相鄰的匹配項的位置;
根據(jù)所述特定符號相鄰的匹配項的編號,確定所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置;
根據(jù)所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置,確定所述待匹配語句中與所述特定符號匹配的字符。
可選的,根據(jù)所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置,確定所述待匹配語句中與所述特定符號匹配的字符,包括:
若所述特定符號位于所述任一正則表達式中第一個位置,將所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符之前的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符;或者
若所述特定符號位于所述任一正則表達式中最后一個位置,將所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符之后的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符;或者
若所述特定符號位于所述任一正則表達式中除第一個位置與最后一個位置外的其他位置,將所述待匹配語句中與所述特定符號相鄰的兩個匹配項匹配的字符之間的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符。
可選的,若所述任一正則表達式中的至少一個匹配項配置有過濾規(guī)則,該方法還包括:
確定所述任一正則表達式中具有過濾規(guī)則的匹配項的位置,所述過濾規(guī)則表示對待匹配語句中與所述過濾規(guī)則對應(yīng)的匹配項匹配的字符執(zhí)行的操作;
根據(jù)具有過濾規(guī)則的匹配項的位置,確定出所述匹配后的語句中與具有過濾規(guī)則的匹配項對應(yīng)的字符;
根據(jù)所述過濾規(guī)則,對所述匹配后的語句中與具有過濾規(guī)則的匹配項對應(yīng)的字符,進行處理。
基于與方法同樣的發(fā)明構(gòu)思,本發(fā)明實施例提供了一種基于正則表達式的匹配裝置,該裝置包括:
確定模塊,用于根據(jù)待匹配語句所屬的業(yè)務(wù)類型,確定與所述業(yè)務(wù)類型對應(yīng)的正則表達式集合;
處理模塊,用于將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句;
其中,所述正則表達式集合中的正則表達式是按照如下步驟生成的:
確定所述正則表達式集合所屬的業(yè)務(wù)類型對應(yīng)的數(shù)據(jù)庫;
將所述數(shù)據(jù)庫中的字,按照詞性進行分類,得到至少一種類型的字;
對于每種類型的字,根據(jù)語法結(jié)構(gòu),將該類型中的任意兩個或兩個以上的字組成詞;
將所述數(shù)據(jù)庫中的詞和所組成的詞,按照詞性進行分類,得到至少一種類型的詞;
將至少一種類型的字、至少一種類型的詞,和/或至少一個用于匹配任意字符的特定符號分別作為正則表達式的匹配項,并根據(jù)語法結(jié)構(gòu),將所述匹配項進行排序,形成至少一個正則表達式。
可選的,所述處理模塊具體用于:
將所述待匹配語句與所述正則表達式集合中的正則表達式中的每個匹配項進行匹配;
若所述待匹配語句與任一正則表達式的每個匹配項均匹配成功,且所述任一正則表達式的每個匹配項在所述待匹配語句中的排列順序與在所述任一正則表達式中的排列順序一致,根據(jù)所述任一正則表達式,確定匹配后的語句,其中,所述匹配后的語句包括所述待匹配語句中與所述任一表達式中的匹配項匹配的字符。
可選的,所述處理模塊具體用于:
確定所述任一正則表達式中的特定符號在所述任一正則表達式中的位置;
根據(jù)所述特定符號的編號,確定所述任一正則表達式中所述特定符號相鄰的匹配項的位置;
根據(jù)所述特定符號相鄰的匹配項的編號,確定所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置;
根據(jù)所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置,確定所述待匹配語句中與所述特定符號匹配的字符。
可選的,所述處理模塊具體用于:
若所述特定符號位于所述任一正則表達式中第一個位置,將所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符之前的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符;或者
若所述特定符號位于所述任一正則表達式中最后一個位置,將所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符之后的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符;或者
若所述特定符號位于所述任一正則表達式中除第一個位置與最后一個位置外的其他位置,將所述待匹配語句中與所述特定符號相鄰的兩個匹配項匹配的字符之間的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符。
可選的,所述處理模塊還用于:
若所述任一正則表達式中的至少一個匹配項配置有過濾規(guī)則,確定所述任一正則表達式中具有過濾規(guī)則的匹配項的位置,所述過濾規(guī)則表示對待匹配語句中與所述過濾規(guī)則對應(yīng)的匹配項匹配的字符執(zhí)行的操作;
根據(jù)具有過濾規(guī)則的匹配項的位置,確定出所述匹配后的語句中與具有過濾規(guī)則的匹配項對應(yīng)的字符;
根據(jù)所述過濾規(guī)則,對所述匹配后的語句中與具有過濾規(guī)則的匹配項對應(yīng)的字符,進行處理。
本發(fā)明實施例提供的方法和裝置中,根據(jù)待匹配語句所屬的業(yè)務(wù)類型,確定與所述業(yè)務(wù)類型對應(yīng)的正則表達式集合;將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句;所述正則表達式集合中的正則表達式是按照如下步驟生成的:確定所述正則表達式集合所屬的業(yè)務(wù)類型對應(yīng)的數(shù)據(jù)庫;將所述數(shù)據(jù)庫中的字,按照詞性進行分類,得到至少一種類型的字;對于每種類型的字,根據(jù)語法結(jié)構(gòu),將該類型中的任意兩個或兩個以上的字組成詞;將所述數(shù)據(jù)庫中的詞和所組成的詞,按照詞性進行分類,得到至少一種類型的詞;將至少一種類型的字、至少一種類型的詞,和/或至少一個用于匹配任意字符的特定符號分別作為正則表達式的匹配項,并根據(jù)語法結(jié)構(gòu),將所述匹配項進行排序,形成至少一個正則表達式。按上述步驟生成正則表達式,不需要逐個編寫多個復(fù)雜的正則表達式,降低了正則表達式生成的難度,提高了匹配的靈活度。
附圖說明
圖1為本發(fā)明實施例提供的一種基于正則表達式的匹配方法流程圖;
圖2為本發(fā)明實施例提供的另一種基于正則表達式的匹配方法流程圖;
圖3為本發(fā)明實施例提供的一種基于正則表達式的匹配裝置示意圖。
具體實施方式
下面將結(jié)合附圖,對本發(fā)明實施例提供的技術(shù)方案進行詳細說明。
本發(fā)明實施例提供了一種基于正則表達式的匹配方法,如圖1所示,包括如下操作:
步驟100、根據(jù)待匹配語句所屬的業(yè)務(wù)類型,確定與所述業(yè)務(wù)類型對應(yīng)的正則表達式集合。
具體的,根據(jù)所述待匹配語句所屬的業(yè)務(wù)類型,從預(yù)先生成的正則表達式集合中,選擇與所述待匹配語句所屬的業(yè)務(wù)類型對應(yīng)的正則表達式集合。
舉例說明:假設(shè)待匹配語句為“打一個電話給媽媽嗎”,所述待匹配語句所屬的業(yè)務(wù)類型為語音通話業(yè)務(wù)。從預(yù)先生成的正則表達式集合中,選擇語音通話業(yè)務(wù)對應(yīng)的正則表達式集合。
其中,預(yù)先生成的正則表達式集合為多個,是根據(jù)不同的業(yè)務(wù)類型生成的,所述業(yè)務(wù)類型可以為語音通話業(yè)務(wù)、短信業(yè)務(wù)等,也可以為其它業(yè)務(wù)類型,本發(fā)明實施例中對業(yè)務(wù)類型不做限定。
步驟110、將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句。
其中,所述正則表達式集合中的正則表達式是按照如下步驟生成的:
確定所述正則表達式集合所屬的業(yè)務(wù)類型對應(yīng)的數(shù)據(jù)庫;
將所述數(shù)據(jù)庫中的字,按照詞性進行分類,得到至少一種類型的字;
對于每種類型的字,根據(jù)語法結(jié)構(gòu),將該類型中的任意兩個或兩個以上的字組成詞;
將所述數(shù)據(jù)庫中的詞和所組成的詞,按照詞性進行分類,得到至少一種類型的詞;
將至少一種類型的字、至少一種類型的詞,和/或至少一個用于匹配任意字符的特定符號分別作為正則表達式的匹配項,并根據(jù)語法結(jié)構(gòu),將所述匹配項進行排序,形成至少一個正則表達式。
其中,每種類型的字中包括至少一個字,每種類型的詞中包括至少一個詞。正則表達式中的匹配項可以是同一類型的字和/或詞,也可以是一個用于匹配任意字符的特定符號。
可選的,本發(fā)明實施例中涉及的詞性包括但不限于:動詞、名詞、介詞、形容詞等,是劃分字或詞類型的根據(jù)。
本發(fā)明實施例中,根據(jù)待匹配語句所屬的業(yè)務(wù)類型,確定與所述業(yè)務(wù)類型對應(yīng)的正則表達式集合;將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句;所述正則表達式集合中的正則表達式是按照如下步驟生成的:確定所述正則表達式集合所屬的業(yè)務(wù)類型對應(yīng)的數(shù)據(jù)庫;將所述數(shù)據(jù)庫中的字,按照詞性進行分類,得到至少一種類型的字;對于每種類型的字,根據(jù)語法結(jié)構(gòu),將該類型中的任意兩個或兩個以上的字組成詞;將所述數(shù)據(jù)庫中的詞和所組成的詞,按照詞性進行分類,得到至少一種類型的詞;將至少一種類型的字、至少一種類型的詞,和/或至少一個用于匹配任意字符的特定符號分別作為正則表達式的匹配項,并根據(jù)語法結(jié)構(gòu),將所述匹配項進行排序,形成至少一個正則表達式。按上述步驟生成正則表達式,不需要逐個編寫多個復(fù)雜的正則表達式,降低了正則表達式生成的難度,提高了匹配的靈活度。
本發(fā)明實施例中,以構(gòu)建樹型結(jié)構(gòu)的方式生成正則表達式,所形成的每種類型的字、以及每種類型詞均作為樹型結(jié)構(gòu)的葉子節(jié)點,每種類型的字和/或詞可以組成短句,所組成的短句作為該樹型結(jié)構(gòu)的枝,從而形成樹型結(jié)構(gòu),即正則表達式集合。
本發(fā)明實施例中,在生成正則表達式時,所生成的正則表達式包括以下幾種可能的實現(xiàn)方式:
方式1、所生成的正則表達式是所有類型的字、所有類型的詞,以及至少一個特定符號,按照不同的排序方式生成的。
舉例說明:假設(shè)有三種類型的字的集合,分別為A1,A2,A3;根據(jù)A1,A2,A3生成的詞的集合分別為B1,B2,B3;特定符號為X;所生成的正則表達式E1為A1,A2,A3,B1,B2,B3和X,按照語法結(jié)構(gòu)確定的排序方式形成的。
該方式中,所生成的正則表達式中的每個匹配項中可以包括同一類型的全部字和/或詞,也可以包括同一類型的部分字和/或詞。
方式2、所生成的正則表達式是部分類型的字、部分類型的詞,以及至少一個特定符號,按照不同的排序方式生成的。
舉例說明:假設(shè)有三種類型的字的集合,分別為A1,A2,A3;根據(jù)A1,A2,A3生成的詞的集合分別為B1,B2,B3;特定符號為X;所生成的正則表達式E2為A1,A2,B1B2,和X,是按照語法結(jié)構(gòu)確定的排序方式形成的。
該方式中,所生成的正則表達式的每個匹配項中可以包括同一類型的全部字和/或詞,也可以包括同一類型的部分字和/或詞。
方式3、所生成的正則表達式是全部類型的字,以及至少一個特定符號,按照不同的排序方式生成的。
舉例說明:假設(shè)有三種類型的字的集合,分別為A1,A2,A3;特定符號為X;所生成的正則表達式E3為A1,A2,A3和X,是按照語法結(jié)構(gòu)確定的排序方式形成的。
該方式中,所生成的正則表達式中的每個匹配項中可以包括同一類型的全部字,也可以包括同一類型的部分字。
方式4、所生成的正則表達式可以是部分類型的字,以及至少一個特定符號,按照不同的排序方式生成的。
舉例說明:假設(shè)有三種類型的字的集合,分別為A1,A2,A3;特定符號為X;所生成的正則表達式E4為A1,A2和X,是按照語法結(jié)構(gòu)確定的排序方式形成的。
該方式中,所生成的正則表達式中的每個匹配項中可以包括同一類型的全部字,也可以包括同一類型的部分字。
方式5、所生成的正則表達式可以是全部類型的詞,以及至少一個特定符號,按照不同的排序方式生成的。
舉例說明:假設(shè)有三種類型的字的集合,分別為A1,A2,A3;根據(jù)A1,A2,A3生成的詞的集合分別為B1,B2,B3;特定符號為X;所生成的正則表達式E5為B1,B2,B3和X,是按照語法結(jié)構(gòu)確定的排序方式形成的。
該方式中,所生成的正則表達式中的每個匹配項中可以包括同一類型的全部詞,也可以包括同一類型的部分詞。
方式6、所生成的正則表達式可以是部分類型的詞,以及至少一特定符號,按照不同的排序方式生成的。
舉例說明:假設(shè)有三種類型的字的集合,分別為A1,A2,A3;根據(jù)A1,A2,A3生成的詞的集合分別為B1,B2,B3;特定符號為X;所生成的正則表達式E6為B1,B2和X,是按照語法結(jié)構(gòu)確定的排序方式形成的。
該方式中,所生成的正則表達式中的每個匹配項中可以包括同一類型的全部詞,也可以包括同一類型的部分詞。
下面通過一個具體實施例,對本發(fā)明實施例中正則表達式的生成過程進行詳細說明:
假設(shè)以語音通話業(yè)務(wù)為例,預(yù)先配置的語音通話業(yè)務(wù)相關(guān)的數(shù)據(jù)庫中包括:打,一,下,電,個,話,號,碼,座,機,手,撥,呼,叫,的,嗎,吧,給,跟,和等等;
先將該數(shù)據(jù)庫中的字按照詞性進行分類,詞性為動詞的是:打、撥、呼、叫,將其保存為一類;詞性為名詞的是:電、話、號、碼、座、機和手,將其保存為一類;詞性為介詞的是:給、跟、和,將其保存為一類;詞性為數(shù)量詞的是:一、個、下,將其保存為一類;無關(guān)詞:的、嗎、吧,將其保存為一類等等。
根據(jù)每一類字構(gòu)建出詞,例如,動詞類的字構(gòu)建出的詞為:呼叫、撥打,將其保存為一類;名詞類的字構(gòu)建出的詞為:電話,號碼,座機,手機,將其保存為一類;量詞類的字構(gòu)建出的詞為:一下,一個。
根據(jù)語法結(jié)構(gòu)將所述字和/或詞,按照排序方式的不同,生成多個正則表達式,例如:生成的一個正則表達式為:(((撥打|撥|打|呼叫)((一)?(下|個)?)(電話|號碼|座機號碼))(給|和|跟)(.*?))。其中,(.*?)為特殊字符。
一種可能的實現(xiàn)方式中,將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句,包括:
將所述待匹配語句與所述正則表達式集合中的正則表達式中的每個匹配項進行匹配;
若所述待匹配語句與任一正則表達式的每個匹配項均匹配成功,且所述任一正則表達式的每個匹配項在所述待匹配語句中的排列順序與在所述任一正則表達式中的排列順序一致,根據(jù)所述任一正則表達式,確定匹配后的語句,其中,所述匹配后的語句包括所述待匹配語句中與所述任一表達式中的匹配項匹配的字符。
一種可選的實現(xiàn)方式中,根據(jù)所述任一正則表達式,確定匹配后的語句,包括:
確定所述任一正則表達式中的特定符號在所述任一正則表達式中的位置;
根據(jù)所述特定符號的編號,確定所述任一正則表達式中所述特定符號相鄰的匹配項的位置;
根據(jù)所述特定符號相鄰的匹配項的編號,確定所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置;
根據(jù)所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置,確定所述待匹配語句中與所述特定符號匹配的字符。
本發(fā)明實施例中,根據(jù)所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置,確定所述待匹配語句中與所述特定符號匹配的字符,具體包括三種情況:
情況一、若所述特定符號位于所述任一正則表達式中第一個位置,將所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符之前的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符;
舉例說明:假設(shè)正則表達式為(.*?)(撥打|撥|打|呼叫)(一)(下|個)(電話|號碼|座機號碼),待匹配語句為:“媽媽嗎打一個電話”,所述特殊字符(.*?)匹配的字符包括所述待匹配語句中與所述特殊字符(.*?)相鄰的匹配項(撥打|撥|打|呼叫)匹配的字符“打”之前的所有字符“媽媽嗎”。
情況二、若所述特定符號位于所述任一正則表達式中最后一個位置,將所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符之后的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符;
舉例說明:假設(shè)正則表達式為:(撥打|撥|打|呼叫)(一)(下|個)(電話|號碼|座機號碼)(給|和|跟)(.*?),待匹配語句為:“打一個電話給媽媽嗎”,所述特殊字符(.*?)匹配的字符包括所述待匹配語句中與所述特殊字符(.*?)相鄰的匹配項(給|和|跟)匹配的字符“給”之后的所有字符“媽媽嗎”。
情況三、若所述特定符號位于所述任一正則表達式中除第一個位置與最后一個位置外的其他位置,將所述待匹配語句中與所述特定符號相鄰的兩個匹配項匹配的字符之間的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符。
舉例說明:假設(shè)正則表達式為(給|和|跟)(.*?)(撥打|撥|打|呼叫)(一)(下|個)(電話|號碼|座機號碼),待匹配語句為:“給媽媽嗎打一個電話”,所述特殊字符(.*?)匹配的字符包括所述待匹配語句中與所述特殊字符(.*?)相鄰的兩個匹配項(給|和|跟)和(撥打|撥|打|呼叫)匹配的字符“給”和“打”之間的所有字符“媽媽嗎”。
基于上述任一實施例,本發(fā)明實施例中,任一正則表達式中的任一匹配項具有額外的過濾規(guī)則,則需要建立匹配項的位置與過濾規(guī)則之間的映射關(guān)系,例如,匹配項1具有過濾規(guī)則1,匹配項2具有過濾規(guī)則2,等等。這樣,在執(zhí)行完步驟100-110之后,根據(jù)該正則表達式的匹配項的位置與過濾規(guī)則之間的映射關(guān)系,確定出該正則表達式中具有過濾規(guī)則的匹配項的位置,并根據(jù)該正則表達式中具有過濾規(guī)則的匹配項的位置,確定出匹配后的語句中與該匹配項匹配的字符的位置,進一步根據(jù)該過濾規(guī)則,對該字符進行處理。
一種可選的實現(xiàn)方式中,若所述任一正則表達式中的至少一個匹配項配置有過濾規(guī)則,該方法還包括:
確定所述任一正則表達式中具有過濾規(guī)則的匹配項的位置,所述過濾規(guī)則表示對待匹配語句中與所述過濾規(guī)則對應(yīng)的匹配項匹配的字符執(zhí)行的操作;
根據(jù)具有過濾規(guī)則的匹配項的位置,確定出所述匹配后的語句中與具有過濾規(guī)則的匹配項對應(yīng)的字符;
根據(jù)所述過濾規(guī)則,對所述匹配后的語句中與具有過濾規(guī)則的匹配項對應(yīng)的字符,進行處理。
具體的,以語音通話業(yè)務(wù)為例,具有過濾規(guī)則的匹配項為特殊字符,具體的過濾規(guī)則為從已保存的通訊錄中確定出與該具有過濾規(guī)則的匹配項對應(yīng)的字符中相同的字符,將確定出的字符作為最終匹配后的字符。
例如,所述已保存的通訊錄中的信息為:“爸爸”、“媽媽”、“姐姐”等,所述對應(yīng)的字符“媽媽嗎”,從已保存的通訊錄中確定出于與所述匹配項匹配的對應(yīng)的字符中相同的字符“媽媽”,作為最終匹配后的字符。
一種具體的實現(xiàn)方式中,在生成正則表達式后,將生成的正則表達式中所有匹配項,按從左到右的順序依次進行編號。
相應(yīng)的,在確定出匹配后的語句后,根據(jù)所述編號確定所述匹配后的語句中與具有過濾規(guī)則的匹配項匹配的字符。
在具體實現(xiàn)中,以括號表示正則表達式中各匹配項的位置,例如,字和詞屬于葉子節(jié)點(記為第一級節(jié)點),短句屬于枝(記為第二級節(jié)點),記錄每級節(jié)點的括號數(shù)目,并對括號進行編號,從而得到各個節(jié)點的位置,所述括號里的內(nèi)容為一個匹配項,或至少兩個匹配項的組合;
例如:1(2(3(撥打|撥|打|呼叫)4(5(一)?6(下|個)?)7(電話|號碼|座機號碼))8(給|和|跟)9(.*?)),其中,9位置為特殊字符的位置,數(shù)字1、2等為括號的編號,在語音通話業(yè)務(wù)中,(撥打|撥|打|呼叫)中的字和詞均屬于動詞,(一)(下|個)中的字均屬于數(shù)量詞,(電話|號碼|座機號碼)中的詞均屬于名詞,(給|和|跟)中的字均屬于介詞。
將待匹配語句“能幫我打個電話給媽媽嗎?”與上述正則表達式進行匹配時,根據(jù)該正則表達式中的括號的編號,確定相應(yīng)匹配項的位置:例如,“打”所在的匹配項的編號為3,“個”所在的匹配項的編號為6,“電話”所在的匹配項的編號為7,“給”所在的匹配項的編號為8,“媽媽嗎”所在的特殊字符的編號為9;確定出編號為9的特殊字符所對應(yīng)的字符“媽媽嗎”,具有過濾規(guī)則的匹配項的編號為9,過濾規(guī)則為“媽媽嗎”與語音通話業(yè)務(wù)對應(yīng)的信息進行匹配,該信息為通訊錄信息;
從通訊錄信息中,確定出與“媽媽嗎”中相同的字符“媽媽”,將確定出的“媽媽”作為最終匹配后的字符。
本發(fā)明實施例中,每種類型的字、以及每種類型詞均作為樹型結(jié)構(gòu)的葉子節(jié)點,每種類型的字和/或詞可以組成短句,所組成的短句作為該樹型結(jié)構(gòu)的枝,正則表達式中匹配項的編號的具體計算方式如公式一所示:
其中:n枝表示該枝含有的括號數(shù)目,ni葉子表示第i個葉子含有的括號數(shù)目,N葉子表示該枝中含有的葉子的數(shù)目。
本發(fā)明實施例中,第k個葉子第j個括號的編號如公式二所示:
其中:Ij表示第k個葉子第j個括號的編號;
第k個葉子需要通過過濾規(guī)則進行處理時,根據(jù)第k個葉子的編號進行定位。
舉例說明,匹配語音通話業(yè)務(wù)時,((撥打|撥|打|呼叫)((一)?(下|個)?)(電話|號碼|座機號碼))短句是由3類詞構(gòu)成,其中((一)?(下|個)?)由2類字組成,按照公式一,((一)?(下|個)?)的括號數(shù)目為:
即1+1+1=3;
((撥打|撥|打|呼叫)((一)?(下|個)?)(電話|號碼|座機號碼))的括號數(shù)目為:
即1+3+1+1=6。
計算“下”在((一)?(下|個)?)的括號的編號,按照公式二,k=2,j=1,
Ij=1+j+1即為3;
那么“下”在((撥打|撥|打|呼叫)((一)?(下|個)?)(電話|號碼|座機號碼))的括號的編號,根據(jù)公式二,k=2,j=3,
Ij=1+j+1即為5。
下面通過一個具體實施例,對本發(fā)明實施例提供的一種基于正則表達式的匹配方法進行詳細說明,如圖2所示,包括:
步驟201、建立不同業(yè)務(wù)類型的基本數(shù)據(jù)庫,對于每種業(yè)務(wù)類型的基本數(shù)據(jù),將該數(shù)據(jù)庫中的字按照詞性進行分類。
步驟202、對于每種類型的字,根據(jù)語法結(jié)構(gòu),將該類型中的任意兩個或兩個以上的字組成詞。
步驟203、根據(jù)語法結(jié)構(gòu),將至少一種類型的字、至少一種類型的詞,和/或至少一個特殊字符,按照不同的排序方式,形成至少一個正則表達式。
步驟204、將生成的正則表達式組成正則表達式集合。
步驟205、將待匹配語句與正則表達式集合中的正則表達式進行匹配,直至與任一正則表達式的每個匹配項均匹配,確定出匹配后的語句。
步驟206、確定出待匹配語句中具有過濾規(guī)則的匹配項;
步驟207、將所述具有過濾規(guī)則的匹配項對應(yīng)的字符,與已保存的所述正則表達式集合所屬的業(yè)務(wù)類型對應(yīng)的信息進行匹配,確定出最終匹配后的字符。
基于與方法同樣的發(fā)明構(gòu)思,本發(fā)明實施例還提供一種基于正則表達式的匹配裝置,如圖3所示,包括:
確定模塊301,用于根據(jù)待匹配語句所屬的業(yè)務(wù)類型,確定與所述業(yè)務(wù)類型對應(yīng)的正則表達式集合。
處理模塊302,用于將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句;
其中,所述正則表達式集合中的正則表達式是按照如下步驟生成的:
確定所述正則表達式集合所屬的業(yè)務(wù)類型對應(yīng)的數(shù)據(jù)庫;
將所述數(shù)據(jù)庫中的字,按照詞性進行分類,得到至少一種類型的字;
對于每種類型的字,根據(jù)語法結(jié)構(gòu),將該類型中的任意兩個或兩個以上的字組成詞;
將所述數(shù)據(jù)庫中的詞和所組成的詞,按照詞性進行分類,得到至少一種類型的詞;
將至少一種類型的字、至少一種類型的詞,和/或至少一個用于匹配任意字符的特定符號分別作為正則表達式的匹配項,并根據(jù)語法結(jié)構(gòu),將所述匹配項進行排序,形成至少一個正則表達式。
本發(fā)明實施例中,根據(jù)待匹配語句所屬的業(yè)務(wù)類型,確定與所述業(yè)務(wù)類型對應(yīng)的正則表達式集合;將所述待匹配語句與所述正則表達式集合中的正則表達式進行匹配,得到匹配后的語句;所述正則表達式集合中的正則表達式是按照如下步驟生成的:確定所述正則表達式集合所屬的業(yè)務(wù)類型對應(yīng)的數(shù)據(jù)庫;將所述數(shù)據(jù)庫中的字,按照詞性進行分類,得到至少一種類型的字;對于每種類型的字,根據(jù)語法結(jié)構(gòu),將該類型中的任意兩個或兩個以上的字組成詞;將所述數(shù)據(jù)庫中的詞和所組成的詞,按照詞性進行分類,得到至少一種類型的詞;將至少一種類型的字、至少一種類型的詞,和/或至少一個用于匹配任意字符的特定符號分別作為正則表達式的匹配項,并根據(jù)語法結(jié)構(gòu),將所述匹配項進行排序,形成至少一個正則表達式。按上述步驟生成正則表達式,不需要逐個編寫多個復(fù)雜的正則表達式,降低了正則表達式生成的難度,提高了匹配的靈活度。
可選的,所述處理模塊具體用于:
將所述待匹配語句與所述正則表達式集合中的正則表達式中的每個匹配項進行匹配;
若所述待匹配語句與任一正則表達式的每個匹配項均匹配成功,且所述任一正則表達式的每個匹配項在所述待匹配語句中的排列順序與在所述任一正則表達式中的排列順序一致,根據(jù)所述任一正則表達式,確定匹配后的語句,其中,所述匹配后的語句包括所述待匹配語句中與所述任一表達式中的匹配項匹配的字符。
可選的,所述處理模塊在根據(jù)所述任一正則表達式,確定匹配后的語句時,具體用于:
確定所述任一正則表達式中的特定符號在所述任一正則表達式中的位置;
根據(jù)所述特定符號的編號,確定所述任一正則表達式中所述特定符號相鄰的匹配項的位置;
根據(jù)所述特定符號相鄰的匹配項的編號,確定所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置;
根據(jù)所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符的位置,確定所述待匹配語句中與所述特定符號匹配的字符。
可選的,所述處理模塊具體用于:
若所述特定符號位于所述任一正則表達式中第一個位置,將所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符之前的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符;或者
若所述特定符號位于所述任一正則表達式中最后一個位置,將所述待匹配語句中與所述特定符號相鄰的匹配項匹配的字符之后的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符;或者
若所述特定符號位于所述任一正則表達式中除第一個位置與最后一個位置外的其他位置,將所述待匹配語句中與所述特定符號相鄰的兩個匹配項匹配的字符之間的所有字符,確定為所述待匹配語句中與所述特定符號匹配的字符。
可選的,所述處理模塊還用于:
若所述任一正則表達式中的至少一個匹配項配置有過濾規(guī)則,確定所述任一正則表達式中具有過濾規(guī)則的匹配項的位置,所述過濾規(guī)則表示對待匹配語句中與所述過濾規(guī)則對應(yīng)的匹配項匹配的字符執(zhí)行的操作;
根據(jù)具有過濾規(guī)則的匹配項的位置,確定出所述匹配后的語句中與具有過濾規(guī)則的匹配項對應(yīng)的字符;
根據(jù)所述過濾規(guī)則,對所述匹配后的語句中與具有過濾規(guī)則的匹配項對應(yīng)的字符,進行處理。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。