分別為第一字符串和第二字符串,minCost(Sl,S2)為最小語義編輯距離,d為編輯距離,p為配對數(shù),cost (J)為交換操作的操作代價,cost (T)為替換操作的操作代價,且 2cost(T)-cost(J)>0。
[0073]在另一個實施例中,根據(jù)編輯距離、配對數(shù)及替換操作的操作代價、交換操作的操作代價,確定第一字符串與第二字符串之間的第一語義編輯距離,包括:
[0074]根據(jù)編輯距離、配對數(shù)及替換操作的操作代價、交換操作的操作代價,通過如下公式三確定第一字符串與第二字符串之間的第一語義編輯距離:
[0075]公式三:
[0076]minCost (SI, S2) =d-p(2cost(T)_cost( J));
[0077]公式三中,S1和S2分別為第一字符串和第二字符串,minCost(Sl,S2)為第一語義編輯距離,d為編輯距離,p為配對數(shù),cost (J)為交換操作的操作代價,cost (T)為替換操作的操作代價,且2cost(T)_cost(J) >0,且2cost(T)_cost(J) >0。
[0078]在另一個實施例中,根據(jù)插入操作的操作代價和刪除操作的操作代價中的一個、替換操作的操作代價及第一序列中的詞個數(shù)、第二序列中的詞個數(shù),確定第一字符串與第二字符串之間的第二語義編輯距離,包括:
[0079]根據(jù)插入操作的操作代價和刪除操作的操作代價中的一個、替換操作的操作代價及第一序列中的詞個數(shù)、第二序列中的詞個數(shù),通過如下公式四確定第一字符串與第二字符串之間的第二語義編輯距離:
[0080] 公式四:
[0081 ] normFact(Sl,S2)=min(n,m)cost(T) + (max(n,m)-min(n,m))XcostM
[0082]costM = cost(C),if n〈m;
[0083]costM = cost(S),if n>m
[0084]公式四中,normFaCt(Sl,S2)為第二語義編輯距離,n為第一序列的詞個數(shù),m為第二序列的詞個數(shù),cost(T)為替換操作的操作代價,為刪除操作的操作代價,cost(C)為插入操作的操作代價。
[0085]在另一個實施例中,根據(jù)第一語義編輯距離和第二語義編輯距離,確定第一字符串與第二字符串之間cos t (S)間的相似性,包括:
[0086]根據(jù)第一語義編輯距離和第二語義編輯距離,通過如下公式五確定第一字符串與第二字符串之間的相似性:
[0087]公式五:
[0088]sim(Sl,S2) = 1-minCost(SI,S2)/normFact(Sl,S2);
[0089]公式五中,sim(Sl,S2)為第一字符串與第二字符串之間的相似性,minCost(Sl,S2)為第一語義編輯距離,normFact(Sl,S2)為第二語義編輯距離。
[0090]上述所有可選技術(shù)方案,可以采用任意結(jié)合形成本發(fā)明的可選實施例,在此不再
--贅述。
[0091 ]結(jié)合圖1所對應(yīng)實施例的內(nèi)容,圖2是根據(jù)一示例性實施例提供的一種相似性確定方法的流程圖,該相似性確定方法可以應(yīng)用于終端中。如圖2所示,本公開實施例提供的相似性確定方法包括以下步驟。
[0092]在步驟S201中,分別對第一字符串和第二字符串進行分詞,得到第一序列和第二序列。
[0093]由于字符串中的各個字符之間并不是完全獨立的,而可能具有一定的相關(guān)性,有些相鄰的字符串可能是一個不可分割的整體,例如,“今天我去爬香山”中“今天”和“香山”即是一個不可分割的整體,因此,本公開實施例在確定兩個字符串之間的相似性時,并不將兩個字符串分別分詞為各個字符,而是對兩個字符串進行分詞,將每個字符串分詞為各個詞,被切分后的字符串包括至少一個詞。為了便于說明,本公開實施例將需要確定相似性的兩個字符串分別定義為第一字符串和第二字符串,且將第一字符串分詞為各個詞后,得到第一序列;將第二字符串分詞為各個詞后,得到第二序列。其中,第一序列和第二序列分別包括至少一個詞
[0094]例如,當?shù)谝蛔址偷诙址謩e為S1和S2時,第一序列和第二序列分別為(Sll,S12,S13,"_,Sln)和(S21,S22,S23,一42111)。其中,S1中詞的個數(shù)為n,S2中詞的個數(shù)為m。
[0095]關(guān)于第一字符串和第二字符串的語言,本公開實施例不作具體限定。例如,第一字符串和第二字符串可以均為漢語,或者均為英語等。其中,第一字符串和第二字符串可以分別為一個句子。如,第一字符串為“今天我打算去香山”,第二字符串為“我打算今天去香山”。
[0096]在步驟S202中,根據(jù)替換操作與交換操作之間的關(guān)系確定替換操作的操作代價及交換操作的操作代價,根據(jù)替換操作與插入操作及刪除操作之間的關(guān)系確定插入操作的操作代價、刪除操作的操作代價及替換操作的操作代價。
[0097]傳統(tǒng)的確定字符串之間的相似度的方法,在將一個字符串變換為另一個字符串時,往往包括三種編輯操作,即插入操作、刪除操作和替換操作,且這三種操作的操作代價相同。然而,在字符串中,有些成分在字符串的不同位置出現(xiàn),并不改變字符串的整體含義。例如,“今天我打算去香山”、“我打算今天去香山”、“我今天打算去香山”,雖然各個詞在字符串中的位置不同,但這三個字符串所表達的意思相同。因此,在本公開實施例中,在傳統(tǒng)的插入操作、刪除操作及替換操作的基礎(chǔ)上,新定義了交換操作,并根據(jù)各種操作之間的關(guān)系,為不同的操作定義了不同的操作代價。
[0098]關(guān)于為各種操作分配的操作代價的具體數(shù)值,本公開實施例不作具體限定。然而,在具體實施時,由于交換操作可以分解為兩次替換操作,因此,本公開實施例可以根據(jù)替換操作與交換操作之間的關(guān)系確定替換操作代價及交換操作代價,如,本公開實施例定義的替換操作代價與交換操作代價之間的關(guān)系滿足:2*替換操作的操作代價〉交換操作的操作代價,即:
[0099]2cost(T)-cost(J) >0;
[0100]其中,cost(T)為替換操作的操作代價,cost(J)為交換操作的操作代價。
[0101]又由于一次替換操作可以分解為一次刪除操作和一次插入操作,因此,本公開實施例可以根據(jù)替換操作與插入操作及刪除操作之間的關(guān)系確定插入操作代價及刪除操作代價,如本公開實施例定義的替換操作代價、交換操作代價及刪除操作代價之間的關(guān)系滿足:插入操作的操作代價+刪除操作的操作代價〉替換操作的操作代價。進一步地,可以確定替換操作的操作代價大于插入操作的操作代價和刪除操作的操作代價中的最大值。示例地,該種關(guān)系可以表示為如下公式:
[0102]max(cost(C),cost(S))<cost(T)<cost(C)+cost(S);
[0103]其中,cost(S)為刪除操作的操作代價,cost(C)為插入操作的操作代價。
[0104]另外,如果相似性是對稱的,即在第一字符串中插入一個字符相當于在第二字符串中刪除一個字符,則可以根據(jù)插入操作與刪除操作之間的關(guān)系,確定插入操作代價等于刪除操作代價。當然,針對相似性是非對稱的情況,也可以定義插入操作代價與刪除操作代價不相同或者相同,本公開實施例對此不作具體限定。
[0105]在步驟S203中,根據(jù)替換操作的操作代價、刪除操作的操作代價及插入操作的操作代價,生成預(yù)先定義的編輯距離算法。
[0106]示例地,預(yù)先定義的編輯距離算法可以如下述公式一。
[0107]公式一:
[0108]minCost[ i , j ] =min(
[0109]minCost[1-1,j]+cost(S),
[0110]minCost[i,j-1]+cost(C),
[0111]minCost[i_l,j_l]+cost(T))
[0112]公式一中,i表示第一序列中的第i個詞;j表示第二序列中的第j個詞;cost(S)為刪除操作的操作代價,cost(C)為插入操作的操作代價,cost(T)為替換操作的操作代價。
[0113]由該公式一可得,本公開實施例預(yù)先定義的編輯距離算法為一種動態(tài)規(guī)劃算法,該預(yù)先定義的編輯距離算法根據(jù)本公開實施例預(yù)先定義的刪除操作的操作代價、插入操作的操作代價和替換操作的操作代價得到。
[0114]需要說明的是,步驟S202和步驟S203為確定相似性之前需要執(zhí)行的步驟,并不是每次確定兩個字符串之間的相似性時均需執(zhí)行的步驟,保證在確定相似性之前,已經(jīng)確定各種操作的操作代價及預(yù)先定義的編輯距離算法即可。
[0115]在步驟S204中,根據(jù)預(yù)先定義的編輯距離算法及第一序列和第二序列,確定第一字符串和第二字符串之間的編輯距離。
[0116]兩個字符串之間的編輯距離是指由其中一個字符串變換為另一個字符串所需的最少編輯操作次數(shù),其中,每種編輯操作對應(yīng)一個操作代價,因此,可以將變換時的總操作代價作為編輯距離。在本公開實施例中,在進行字符串之間的變換時,可以進行的編輯操作包括替換操作、插入操作、刪除操作和交換操作。
[0117]結(jié)合上述公式一預(yù)先定義的編輯距離算法,本公開實施例在根據(jù)預(yù)先定義的編輯距離算法及第一序列和第二序列,確定第一字符串與第二字符串之間的編輯距離時,可以根據(jù)預(yù)先定義的編輯距離算法及第一序列和第二序列,通過如上公式一遞推計算第一字符串與第二字符串之間的編輯距離。具體的通過公式一計算編輯距離的原理與現(xiàn)有的基于動態(tài)規(guī)劃算法計算編輯距離的原理相同,本公開實施例對此不作詳細闡述。
[0118]在步驟S205中,根據(jù)編輯距離及由第一序列向第二序列變換所做的各操作的信息,確定第一字符串與第二字符串之間的相似性。
[0119]在本公開實施例中,第一序列向第二序列變換所做的各操作的信息包括操作的類型、每種類型的操作的操作次數(shù)及每種類型的操作的操作代價。
[0120]由于本公開實施例中預(yù)先定義了不同的操作具有不同的操作代價,結(jié)合兩個字符串之間的編輯距離的定義,在由第一字符串向第二字符串變換時所需的各種操作的操作代價將直接影響編輯距離。因此,在確定第一字符串與第二字符串之間的相似性時,需要根據(jù)編輯距離以及得到編輯距離時所進行的各種操作的操作信息實現(xiàn),而操作信息包括操作代價,且得到編輯距離時的各種操作的操作代價在步驟S202中已預(yù)先設(shè)定。
[0121]例如,如果在由第一字符串變換為第二字符串時進行的操作包括兩次插入操作、一次刪除操作、一次交換操作和一次替換操作,則第一字符串和第二字符串之間的編輯距離d為d = 2cost(C)+cost(S))+cost(T)+cost(J)。此時,在確定第一