雙向匹配中文分詞實驗報告

2021-08-18 01:16:49 字數 3556 閱讀 9628

一、   摘要

這次實驗的內容是中文分詞,現有的分詞演算法可分為三大類:基於規則匹配的分詞方法、基於統計的分詞方法和基於理解的分詞方法。按照是否與詞性標註過程相結合,又可以分為單純分詞方法和分詞與標註相結合的一體化方法。

我們這次用的分詞方法是基於規則的雙向匹配分詞法,即正向最大匹配法和逆向最大匹配法的結合。

二、   理論描述

雙向匹配法:

對同乙個字串分別採用fmm和bmm兩種方法進行切分處理,如果能夠得到相同的切分結果,則認為切分成功,否則認為有疑點。針對疑點:(1)採用上下文資訊,根據歧義規則庫進行排歧。(2)進行人工干預,選取其中一種切分為正確的切分

正向最大匹配法fmm:

1、  從左向右取待切分字串的m(詞典中詞語的最大長度)個字元作為匹配字段。

2、  在詞典中進行匹配。若匹配成功,則將這個匹配字段作為乙個詞切分處理

3、  若匹配不成功,則將這個匹配欄位的最後乙個字去掉,剩下的字串作為新的匹配字段,進行再次匹配,重複這個過程,直到切分完整個字串為止。

逆向最大匹配演算法bmm:

該演算法是正向最大匹配的逆向思維,若匹配不成功,將匹配欄位的最前乙個字去掉。

三、   演算法描述

正向最大匹配演算法fmm:

public

staticstring fmm(string

text)//

取字串前

seglen

個字元作為匹配字串

string

substring

=text

.substring(0,

seglen

);while(!

dic.contains(

substring

)) substring

=substring

.substring(0,

substring

.length()-1);

//匹配字串刪去最後乙個字元

}output

substring

+"/"

);//

匹配成功,字串從前刪去前乙個匹配字串

text

=text

.substring(

substring

.length());

}returnoutput

.tostring();

}逆向最大匹配演算法bmm:

public

staticstring bmm(string

text

)  

//取字串後

seglen

個字元作為匹配字串

string

substring

=text

.substring(

text

.length()-

seglen

);while(!

dic.contains(

substring

)) substring

=substring

.substring(1);

//匹配字串刪去最前乙個字元

}  

//匹配成功,若此時匹配長度為剩餘字串長度,則完成匹配,否則字串從後刪去匹配字串

if(

text

.length()!=

substring

.length())else

substring

=substring

+"/"

;output

.insert(0,

substring);}

returnoutput

.tostring();

}四、詳例描述

以「研究生命的起源」為例

詞典:,最大長度為3

正向最大匹配:

此時字串為s1=」研究生命的起源」,已分詞字串s2=」」,匹配字串s3=」研究生」

(1)   匹配成功,s1=」命的起源」,已分詞字串s2=」 研究生/」,匹配字串s3=」命的起」

(2)   詞典無「命的起」,s3=」命的」

(3)   詞典無「命的」,s3=」命」

(4)   匹配成功,s1=」的起源」,已分詞字串s2=」 研究生/命/」,匹配字串s3=」的起源

(5)   詞典無「的起源」,s3=」的起」

(6)   詞典無「的起」,s3=」的」

(7)   匹配成功,s1=」起源」,已分詞字串s2=」 研究生/命/的/」,匹配字串s3=」起源

(8)   匹配完成,s1=」」,已分詞字串s2=」 研究生/命/的/起源/」

逆向最大匹配:

此時字串為s1=」研究生命的起源」,已分詞字串s2=」」,匹配字串s3=」的起源」

(1)   詞典無「的起源」,s3=」起源」

(2)   匹配成功,s1=」研究生命的」,已分詞字串s2=」起源/」,匹配字串s3=」生命的」

(3)   詞典無「生命的」,s3=」命的」

(4)   詞典無「命的」,s3=」的」

(5)   匹配成功,s1=」研究生命」,已分詞字串s2=」的/起源/」,匹配字串s3=」究生命」

(6)   詞典無「究生命」,s3=」生命」

(7)   匹配成功,s1=」研究」,已分詞字串s2=」生命/的/起源/」,匹配字串s3=」研究」

(8)   匹配完成,s1=」」,已分詞字串s2=」研究/生命/的/起源/」

五、   軟體演示

(1)「研究生命的起源」

正向最大匹配:

逆向最大匹配

(2)「對外經濟技術合作與交流不斷擴大」

正向最大匹配:

逆向最大匹配:

六、   總結

1、  對於最大長度的選擇要謹慎,太長的話影響執行效率,太短可能導致某些詞語無法識別。

2、  經過實驗,發現大部分情況下,逆向最大匹配演算法要優於正向最大匹配演算法

3、  當出現兩種演算法結果不相同的時候,可以採取人工干預的方法,選擇分詞數較少的結果作為最終分詞結果。

中文分詞 雙向最大匹配實現

雙向最大匹配法 bi directction matching method,bm 雙向最大匹配法是將正向最大匹配法得到的分詞結果和逆向最大匹配法的到的結果進行比較,從而決定正確的分詞方法。據sunm.s.和 benjamin k.t.1995 的研究表明,中文中90.0 左右的句子,正向最大匹配法...

實驗五實驗報告

系統架構圖 首先我在我的電腦裡建立了有名稱要求的資料夾,然後開啟android studio clone了我們的小組專案。此處因為已經clone過了,所以無法再把這個專案clone進去 進行編譯,執行,測試均正常 我在遊戲主介面載入了乙個toast,點選可以短暫地顯示我的學號資訊 首先在封面檔案裡我...

實驗六實驗報告

實驗結論 part1 結構體型別及程式設計應用 1.補足程式 include const int n 5 定義結構體型別struct student,並定義stu為其別名 typedef struct student stu 函式宣告 void input stu s,int n int findm...