自然語言理解課程實(shí)驗(yàn)報(bào)告_第1頁
自然語言理解課程實(shí)驗(yàn)報(bào)告_第2頁
自然語言理解課程實(shí)驗(yàn)報(bào)告_第3頁
自然語言理解課程實(shí)驗(yàn)報(bào)告_第4頁
自然語言理解課程實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論