




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)一、中文分詞一、實(shí)驗(yàn)內(nèi)容用正向最大匹配法對(duì)文檔進(jìn)行中文分詞,其中:(1)wordlist.txt 詞表文件 (2)pku_test.txt 未經(jīng)過分詞的文檔文件 (3)pku_test_gold.txt 經(jīng)過分詞的文檔文件二、實(shí)驗(yàn)所采用的開發(fā)平臺(tái)及語言工具 Visual C+ 6.0三、實(shí)驗(yàn)的核心思想和算法描述本實(shí)驗(yàn)的核心思想為正向最大匹配法,其算法描述如下假設(shè)句子: , 某一詞 ,m 為詞典中最長詞的字?jǐn)?shù)。(1) 令 i=0,當(dāng)前指針 pi 指向輸入字串的初始位置,執(zhí)行下面的操作:(2) 計(jì)算當(dāng)前指針 pi 到字串末端的字?jǐn)?shù)(即未被切分字串的長度)n,如果n=1,轉(zhuǎn)(4),結(jié)束算法。否則
2、,令 m=詞典中最長單詞的字?jǐn)?shù),如果n<m, 令 m=n;(3) 從當(dāng)前 pi 起取m個(gè)漢字作為詞 wi,判斷: (a) 如果 wi 確實(shí)是詞典中的詞,則在wi 后添加一個(gè)切分標(biāo)志,轉(zhuǎn)(c);(b) 如果 wi 不是詞典中的詞且 wi 的長度大于1,將wi 從右端去掉一個(gè)字,轉(zhuǎn)(a)步;否則(wi 的長度等于1),則在wi 后添加一個(gè)切分標(biāo)志,將wi 作為單字詞添加到詞典中,執(zhí)行 (c)步; (c) 根據(jù) wi 的長度修改指針 pi 的位置,如果 pi 指向字串末端,轉(zhuǎn)(4),否則, i=i+1,返回 (2);(4) 輸出切分結(jié)果,結(jié)束分詞程序。四、系統(tǒng)主要模塊流程、源代碼(1) 正向最
3、大匹配算法 (2)原代碼如下/ Dictionary.h #include <iostream> #include <string> #include <fstream> using namespace std; class CDictionary public: CDictionary(); /將詞典文件讀入并構(gòu)造為一個(gè)哈希詞典 CDictionary(); int FindWord(string w); /在哈希詞典中查找詞 private: string strtmp; /讀取詞典的每一行string word; /保存每個(gè)詞string strwor
4、d55400; ; /將詞典文件讀入并 CDictionary:CDictionary() ifstream infile("wordlist.txt"); / 打開詞典 if (!in() / 打開詞典失敗則退出程序cerr << "Unable to open input file: " << "wordlist.txt" << " - bailing out!" << endl; exit(-1);int i=0; while (getline(infile,
5、strtmp) / 讀入詞典的每一行并將其添加入哈 希中 strwordi+=strtmp; in(); CDictionary:CDictionary()/在哈希詞典中查找詞,若找到,則返回,否則返回 int CDictionary:FindWord(string w) int i=0;while (strwordi!=w) && (i<55400)i+;if(i<55400)return 1;elsereturn 0; / 主程序main.cpp#include "Dictionary.h"#define MaxWordLength 14 /
6、 最大詞長為個(gè)字節(jié)(即個(gè)漢字)# define Separator " " / 詞界標(biāo)記CDictionary WordDic; /初始化一個(gè)詞典/對(duì)字符串用最大匹配法(正向)處理 string SegmentSentence(string s1)string s2 = "" /用s2存放分詞結(jié)果string s3 = s1;int l = (int) s1.length(); / 取輸入串長度int m=0;while(!s3.empty() int len =(int) s3.length(); / 取輸入串長度 if (len > MaxWo
7、rdLength) / 如果輸入串長度大于最大詞長 len = MaxWordLength; / 只在最大詞長范圍內(nèi)進(jìn)行處理 string w = s3.substr(0, len); /(正向用)將輸入串左邊等于最大詞長長度串取出作為候選詞int n = WordDic.FindWord(w); / 在詞典中查找相應(yīng)的詞while(len > 1 && n = 0) / 如果不是詞int j=len-1;while(j>=0 && (unsigned char)wj<128)j-;if(j<1)break; len -= 1; / 從候
8、選詞右邊減掉一個(gè)英文字符,將剩下的部分作為候選詞 w = w.substr(0, len); /正向用 n = WordDic.FindWord(w); s2 += w + Separator; / (正向用)將匹配得到的詞連同詞界標(biāo)記加到輸出串末尾 s3 = s1.substr(m=m+w.length(), s1.length(); /(正向用)從s1-w處開始return s2; int main(int argc, char *argv)string strtmp; /用于保存從語料庫中讀入的每一行string line; /用于輸出每一行的結(jié)果ifstream infile(&quo
9、t;pku_test.txt"); / 打開輸入文件if (!in() / 打開輸入文件失敗則退出程序cerr << "Unable to open input file: " << "pku_test.txt" << " - bailing out!" << endl; exit(-1);ofstream outfile1("SegmentResult.txt"); /確定輸出文件if (!out() cerr << "Unable
10、to open " << "-bailing out!" << endl; exit(-1); while (getline(infile, strtmp) /讀入語料庫中的每一行并用最大匹配法處理line = strtmp;line = SegmentSentence(line); / 調(diào)用分詞函數(shù)進(jìn)行分詞處理outfile1 << line << endl; / 將分詞結(jié)果寫入目標(biāo)文件cout<<line<<endl;in();out();return 0;五、實(shí)驗(yàn)結(jié)果及分析(1)、實(shí)驗(yàn)運(yùn)
11、行結(jié)果(2) 實(shí)驗(yàn)結(jié)果分析在基于字符串匹配的分詞算法中,詞典的設(shè)計(jì)往往對(duì)分詞算法的效率有很大的影響。正向最大匹配分詞算法是最基本的字符串匹配算法之一,它能夠保證將詞典中存在的最長復(fù)合詞切分出來。實(shí)驗(yàn)二:ICTCLAS 漢語分詞系統(tǒng)說明一、實(shí)驗(yàn)內(nèi)容調(diào)用ICTCLAS程序?qū)ζ渲械奈臋n進(jìn)行分詞,并標(biāo)注詞性 (實(shí)驗(yàn)數(shù)據(jù)包含1個(gè)文件:pku_test.txt 未經(jīng)過分詞的文檔文件)二、實(shí)驗(yàn)所采用的開發(fā)平臺(tái)及語言工具Visual C+ 6.0 ICTCLAS 漢語分詞系統(tǒng) 中科院計(jì)算所ICTCLAS 5.0接口文檔三、實(shí)驗(yàn)的核心思想和算法描述分詞系統(tǒng)的主要是思想是先通過CHMM(層疊形馬爾可夫模型)進(jìn)行分
12、詞,通過分層,既增加了分詞的準(zhǔn)確性,又保證了分詞的效率.共分五層,如下圖一所示:基本思路:先進(jìn)行原子切分,然后在此基礎(chǔ)上進(jìn)行N-最短路徑粗切分,找出前N個(gè)最符合的切分結(jié)果,生成二元分詞表,然后生成分詞結(jié)果,接著進(jìn)行詞性標(biāo)注ICTCLAS程序軟件使用:(1). 在函數(shù)里加入對(duì)ICTCLAS50.lib的引用#ifndef OS_LINUX#include <Windows.h>#pragma comment(lib, "ICTCLAS50.lib") /ICTCLAS50.lib庫加入到工程中#endif(2).ICTCLAS_API bool ICTCLAS_函
13、數(shù)的調(diào)用ICTCLAS_API bool ICTCLAS_(const char* pszSrc, /文本文件的讀取const char* pszDst, /目標(biāo)文件的存放eCodeTypesrcCodeType=CODE_TYPE_UNKNOWN, /類型boolbEnablePOS=false /true表示可以標(biāo)注詞性 );(3) . ICTCLAS5.0接口文檔中的示例四、系統(tǒng)源代碼/*(1). 在函數(shù)里加入對(duì)ICTCLAS50.lib的引用*/#ifndef OS_LINUX#include <Windows.h>#pragma comment(lib, "IC
14、TCLAS50.lib") /ICTCLAS50.lib庫加入到工程中#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <string>#include "ICTCLAS50.h" using namespace std;int main(int argc, char* argv)if(!ICTCLAS_Init() printf("Init failsn"
15、);return -1;ICTCLAS_("pku_test.txt", "Test_result.txt",CODE_TYPE_GB,true); /分別表示讀取所需分次的文件、存放分詞結(jié)果的文件、類型、標(biāo)注詞性printf("Init okn"); /分詞結(jié)束后輸出提示ICTCLAS_Exit();return 0;5、 實(shí)驗(yàn)結(jié)果及分析(1)分詞前分詞后:(2)實(shí)驗(yàn)結(jié)果分析 ICTCLAS是中科院計(jì)算所研發(fā)的中文分詞軟件,這個(gè)軟件在第一屆國際中文處理研究機(jī)構(gòu)SigHan組織的評(píng)測中都獲得了多項(xiàng)第一名,是公認(rèn)的當(dāng)今最好的中文分詞軟件
16、。綜合性能:ICTCLAS 2011分詞速500KB/s左右,分詞精度98.45%。ICTCLAS分詞系統(tǒng)是個(gè)NB的系統(tǒng),效率奇高,比自己搞字典,分詞算法效率高了很多倍,用起來也是非常簡單的,但有一點(diǎn)不完美的是,該源代碼沒有配套的文檔,閱讀起來可能有一定的障礙,尤其是對(duì)C/C+不熟的人來說.實(shí)驗(yàn)三:基于語言模型的音字轉(zhuǎn)換說明一 實(shí)驗(yàn)內(nèi)容: 1、實(shí)驗(yàn)數(shù)據(jù)包含1個(gè)文件:pku_test_gold.txt經(jīng)過分詞的文檔文件 2、設(shè)計(jì)一個(gè)基于語言模型的音字轉(zhuǎn)換給定拼音串:jinjitizhigaige可能的漢字串:緊濟(jì)體質(zhì)改革經(jīng)濟(jì)體質(zhì)改革經(jīng)濟(jì)體制改革使用 2-gram計(jì)算:p(CString1) =p
17、(緊)×p(濟(jì)|緊)×p(體質(zhì)|濟(jì))×p(改革|體質(zhì))p(CString2) =p(經(jīng)濟(jì))×p(體質(zhì)|經(jīng)濟(jì))×p(改革|體質(zhì))p(CString3) =p(經(jīng)濟(jì))×p(體制|經(jīng)濟(jì))×p(改革|體制) 比較p(CString1),p(CString2),p(CString3)二 實(shí)驗(yàn)所用的開發(fā)平臺(tái)及語言工具Visual C+ 6.03 實(shí)驗(yàn)的核心思想和算法描述 1.先分別統(tǒng)計(jì)出“緊”、“經(jīng)”、“濟(jì)”、“體”、“制”、“質(zhì)”、“改”、“革”這幾個(gè)字出現(xiàn)的個(gè)數(shù) 2.再計(jì)算出各個(gè)字出現(xiàn)的概率 3.然后計(jì)算出在“緊”字出現(xiàn)概率下“濟(jì)”
18、字出現(xiàn)的條件概率乘上在“濟(jì)”字出現(xiàn)是“體質(zhì)”出現(xiàn)的條件概率以及“體質(zhì)”出現(xiàn)時(shí)“改革”出現(xiàn)的條件概率的乘積,即為該句話出現(xiàn)的概率四系統(tǒng)主要模塊流程、源代碼#include <iostream>#include <fstream>#include <string>using namespace std;string wstr210000;void main()int j=0,num=0;string str;/存放讀入的詞ifstream infile("pku_test_gold.txt"); / 打開輸入文件if (!in() / 打開輸
19、入文件失敗則退出程序cerr << "Unable to open input file: " << "pku_test_gold.txt" << " - bailing out!" << endl; exit(-1);while (getline(infile, str,' ') / 讀入每一個(gè)詞放入字符串?dāng)?shù)組中int i=0;while(str.length()!=0)if(unsigned char)stri>=128)wstrj+=str.substr(i,
20、2);i+=2;cout<<wstrj-1<<" "str=str.substr(i,str.length()-2);i=0;elsewstrj+=str.substr(i,1);i+;cout<<wstrj-1<<" "str=str.substr(i,str.length()-1);i=0;num=j;cout<<"總的詞數(shù)"<<num<<endl;int jin=0,ji=0,tizhi1=0,tizhi2=0,jingji=0,jinji=0,
21、jtzh1=0,tzh1gg=0,tzh2gg=0,jjtzh1=0,jjtzh2=0;inti=0;while(wstri.length()!=0)if(wstri="緊")jin+;/緊出現(xiàn)的次數(shù)加1if(wstri+1="濟(jì)")jinji+;/緊濟(jì)出現(xiàn)的次數(shù)加1elseif(wstri="濟(jì)")ji+;/濟(jì)出現(xiàn)的次數(shù)加1if(wstri+1="體")if(wstri+2="質(zhì)")jtzh1+;/濟(jì)體質(zhì)出現(xiàn)的次數(shù)加1elseif(wstri="體")if(wstri+1=
22、"質(zhì)")tizhi1+;/體質(zhì)出現(xiàn)的次數(shù)加1if(wstri+2="改")if(wstri+3="革")tzh1gg+;/體質(zhì)改革出現(xiàn)次數(shù)加1elseif(wstri+1="制")tizhi2+;/體制出現(xiàn)的次數(shù)加1if(wstri+2="改")if(wstri+3="革")tzh2gg+;/體制改革出現(xiàn)的次數(shù)加1elseif(wstri="經(jīng)")if(wstri+1="濟(jì)")jingji+;/經(jīng)濟(jì)出現(xiàn)的次數(shù)加1if(wstri+2=&
23、quot;體")if(wstri+3="質(zhì)")jjtzh1+;/經(jīng)濟(jì)體質(zhì)出現(xiàn)的次數(shù)加1elseif(wstri+3="制")jjtzh2+;/經(jīng)濟(jì)體質(zhì)出現(xiàn)的次數(shù)加1i+;cout<<"'緊'的出現(xiàn)次數(shù)="<<jin<<endl;cout<<"'緊濟(jì)'的出現(xiàn)次數(shù)"<<jinji<<endl;cout<<"'濟(jì)'的出現(xiàn)次數(shù)"<<ji<<
24、endl;cout<<"'濟(jì)體質(zhì)'的出現(xiàn)數(shù)"<<jtzh1<<endl;cout<<"'體質(zhì)'的出現(xiàn)次數(shù)"<<tizhi1<<endl;cout<<"'體質(zhì)改革'的出現(xiàn)次數(shù)"<<tzh1gg<<endl;cout<<"'經(jīng)濟(jì)'的出現(xiàn)次數(shù)"<<jingji<<endl;cout<<"'
25、;經(jīng)濟(jì)體質(zhì)'的出現(xiàn)次數(shù)"<<jjtzh1<<endl;cout<<"'經(jīng)濟(jì)體制'的出現(xiàn)次數(shù)"<<jjtzh2<<endl;cout<<"'體制'的出現(xiàn)次數(shù)"<<tizhi2<<endl;cout<<"'體制改革'的出現(xiàn)次數(shù)"<<tzh2gg<<endl;if(jin!=0)&&(jinji!=0)&&(jtz
26、h1!=0)&&(tzh1gg!=0)cout<<"p(CString1) =p(緊)×p(濟(jì)|緊)×p(體質(zhì)|濟(jì))×p(改革|體質(zhì))="<<jin<<"/"<<num<<"*"<<jinji<<"/"<<"jin"<<"*"<<jtzh1<<"/"<<ji<&l
27、t;"*"<<tzh1gg<<"/"<<tizhi1<<"= "<<(float)jin/num*jinji/jin*jtzh1/ji*tzh1gg/tizhi1<<endl;elsecout<<"p(CString1) =p(緊)×p(濟(jì)|緊)×p(體質(zhì)|濟(jì))×p(改革|體質(zhì))= 0"<<endl;if(jingji!=0)&&(jjtzh1!=0)&&(tzh1gg!=0)cout<<"p(CString2) =p(經(jīng)濟(jì))×p(體質(zhì)|經(jīng)濟(jì))×p(改革|體質(zhì))="<<jingji<<"/"<<num<<"*"<<jjtzh1<<&quo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時(shí)保安合同范本
- 人才引進(jìn)聘用合同范本
- 2025年西藏貨運(yùn)從業(yè)資格證考試模擬考試題目答案
- 專業(yè)購銷合同范本
- 個(gè)人雇傭老師合同范本
- 加工木料供貨合同范本
- 辦公區(qū)花卉租賃合同范本
- 冰淇淋原材料采購合同范本
- 儀器外借合同范本
- 公交駕校培訓(xùn)合同范本
- 全腦血管造影術(shù)的護(hù)理查房
- 直系親屬股權(quán)無償轉(zhuǎn)讓合同(2篇)
- 2025年四年級(jí)下學(xué)期語文教學(xué)計(jì)劃
- 學(xué)習(xí)弘揚(yáng)紅船精神課件
- 消防工程施工組織設(shè)計(jì)方案
- 敦刻爾克大撤退課件
- 農(nóng)藥殘留監(jiān)測
- 新生兒敗血癥(共22張課件)
- 頌缽療愈師培訓(xùn)
- 2025蛇年春節(jié)習(xí)俗大賞體驗(yàn)感受家的溫馨課件
- 投資居間協(xié)議合同模板
評(píng)論
0/150
提交評(píng)論