基于VC++的人工分詞及詞性標(biāo)注輔助程序的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于VC++的人工分詞及詞性標(biāo)注輔助程序的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于VC++的人工分詞及詞性標(biāo)注輔助程序的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于VC++的人工分詞及詞性標(biāo)注輔助程序的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于VC++的人工分詞及詞性標(biāo)注輔助程序的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于VC+的人工分詞及詞性標(biāo)注輔助程序的設(shè)計(jì)和實(shí)現(xiàn)馬創(chuàng)新,李斌(南京師范大學(xué)語言科技中心,南京,210097)提要:在語言研究中,經(jīng)常要對語料進(jìn)行分詞和詞性標(biāo)注,我們使用VC+設(shè)計(jì)了一個(gè)人工分詞及詞性標(biāo)注輔助程序,它能夠根據(jù)預(yù)定的規(guī)則對標(biāo)注后的語料進(jìn)行檢驗(yàn),發(fā)現(xiàn)違反規(guī)則的情況就會給予提示,并且還設(shè)計(jì)了一個(gè)小鍵盤,減輕了標(biāo)注者記憶詞性標(biāo)記的負(fù)擔(dān)。我們使用這個(gè)輔助程序?qū)Υ罅康墓糯鷿h語和現(xiàn)代漢語的語料進(jìn)行標(biāo)注,結(jié)果證明,這個(gè)輔助程序既能夠有效處理GB2312編碼的簡體漢字語料,也能夠處理Unicode編碼的繁體漢字語料,有效地提高了人工分詞及詞性標(biāo)注的速度和正確率。關(guān)鍵詞:分詞;詞性標(biāo)注;輔助程序;

2、VC+;DesignandRealizationoftheAssistantProgramForManualWord-SegmentedandPartofSpeech-LabeledBasedonVC+MaChuangxin,LiBin(LanguageScienceandTechnologyCenter,NanjingNormalUniversity,Nanjing,China,210097)【Abstract】Theresearcherswhostudylanguageoftensegmentwordsandlabelpartofspeechinstudylanguage.Wedesign

3、edandrealizedanassistantprogramformanualword-segmentedandpartofspeech-labeledusingVC+.Itcancheckthesentencesaccordingonpreconcertedformulae.Ifitfindthethingsdontaccordwiththeformulae,itwillgiveadvices.Furthermore,wedesignasmallkeyboard,itcanrelievetheresearchersburdentoremembertags.Weusetheassistant

4、programtolabellotsofancientbooksandmodernbooks.TheresultproveditnotonlycandealwiththematerialwithsimplifiedChinesecharacter,butalsotreatwiththematerialwiththeoriginalcomplexChinesecharacter.Itcanimprovethespeedandprecisenesseffectively.【Keywords】word-segmented;partofspeech-labeled;assistantprogram;V

5、C+人工分詞及詞性標(biāo)注輔助程序在語言研究中,經(jīng)常要對語料進(jìn)行分詞和詞性標(biāo)注,分詞和詞性標(biāo)注是進(jìn)行句法分析、句義分析的基礎(chǔ)但是在人工分詞或詞性標(biāo)注時(shí),經(jīng)常會出現(xiàn)多加了分隔符(一般是空格)或是少加了分隔符等問題,有時(shí)當(dāng)詞性標(biāo)記很多時(shí),標(biāo)注者在記憶這些詞性標(biāo)記時(shí)會有很大困難。我們設(shè)計(jì)的人工分詞及詞性標(biāo)注輔助程序能夠根據(jù)預(yù)定的規(guī)則對標(biāo)注后的語料進(jìn)行檢驗(yàn),發(fā)現(xiàn)違反規(guī)則的情況就會給予提示,并且還設(shè)計(jì)了一個(gè)小鍵盤,減輕了標(biāo)注者記憶詞性標(biāo)記的負(fù)擔(dān)。通過實(shí)驗(yàn)表明,使用這個(gè)輔助程序能夠有效提高人工分詞及詞性標(biāo)注的速度和正確率。人工分詞及詞性標(biāo)注輔助程序的功能及特點(diǎn)人工分詞及詞性標(biāo)注輔助程序的主界面如圖1所示,標(biāo)語

6、料,在“從第幾句開始標(biāo)注”前面的編輯框中輸入開始標(biāo)注的句數(shù),再點(diǎn)擊“開始標(biāo)注”按紐就可以進(jìn)行標(biāo)注。在對話框中間的三個(gè)編輯框中會呈現(xiàn)“上一句”,“當(dāng)前句”和“下一句”三句話,其中“上一句”和“下一句”編輯框中的句子是只讀、無法改寫的,供標(biāo)注者在標(biāo)注時(shí)聯(lián)系上下文作參考用的,只有“當(dāng)前句”編輯框中呈現(xiàn)的文本可以改寫。點(diǎn)擊右邊的“上句”按紐可以翻看上一句,點(diǎn)擊“下句”按紐可以翻看下一句。在這三個(gè)編輯框的下面有一個(gè)小鍵盤,這個(gè)小鍵盤中的每個(gè)鍵其實(shí)都是一個(gè)命令按紐,有些鍵上放的是詞性標(biāo)記,它的功能是如果“當(dāng)前句”編輯框的句子已經(jīng)被分詞(即句子中的各個(gè)詞之間已經(jīng)用一個(gè)空格隔開),通過點(diǎn)擊小鍵盤中這些帶有詞性

7、標(biāo)記的命令按紐,程序就會自動的按照從前往后的順序在每個(gè)詞語后面添加命令按紐上的詞性標(biāo)記。還有幾個(gè)鍵是用來實(shí)現(xiàn)一些特殊功能的,比如“刪除”鍵的功能是按照從后往前的順序刪除“當(dāng)前句”編輯框中詞語的詞性標(biāo)記的,但它只是刪除詞性標(biāo)記,并不會刪除詞與詞之間的空隔。如果一句話中的每個(gè)詞語都已做了詞性標(biāo)注,第一次點(diǎn)“刪除”鍵,它會刪除最后一個(gè)詞語的詞性標(biāo)記,第二次點(diǎn)“刪除”鍵,它會刪除倒數(shù)第二個(gè)詞語的詞性標(biāo)記,如果不停點(diǎn)擊“刪除”鍵,它就會按照從后往前的順序刪除完句子中所有的詞性標(biāo)記?!癠ndo”鍵的功能是撤銷在“當(dāng)前句”編輯框中所做的最后一次手動操作,但不會撤銷使用小鍵盤上的命令按紐所做的操作?!疤砑訐Q行

8、符”鍵的功能在句子的末尾添加一個(gè)換行符,防止人工誤操作刪除了末尾的換行符致使當(dāng)前句和下一句連在一起。另外,我們根據(jù)相關(guān)知識設(shè)計(jì)了一系列的檢驗(yàn)規(guī)則,點(diǎn)擊“檢驗(yàn)標(biāo)注”鍵就可以對“當(dāng)前句”編輯框中已經(jīng)做好分詞及詞性標(biāo)記的句子做檢驗(yàn),如果某些地方不符合這些規(guī)則的規(guī)定,在小鍵盤下面的提示窗口將會顯示相應(yīng)的提示信息,提醒標(biāo)注者修改。當(dāng)點(diǎn)擊“提交標(biāo)注”鍵時(shí),如果做好分詞及詞性標(biāo)記的句子完全與規(guī)則相符,將會被順利保存,并且原先在“當(dāng)前句”的內(nèi)容會顯示到“上一句”中,原先在“下一句”中的內(nèi)容會顯示到“當(dāng)前句”中,編輯框“下一句”中會顯示新的一句話;但是如果做好分詞及詞性標(biāo)記的句子與規(guī)則不相符,只會在提示窗口顯示

9、相應(yīng)的提示信息,其他地方不變??紤]到可能會有一些例外情況,我們又設(shè)置了一個(gè)“強(qiáng)制提交”鍵,該鍵功能與“提交標(biāo)注”鍵相似,不同的地方就是當(dāng)做好分詞及詞性標(biāo)記的句子與規(guī)則不相符,會在提示窗口顯示相應(yīng)的提示信息,同時(shí)也會把做好分詞及詞性標(biāo)記的句子保存下來,并且原先在“當(dāng)前句”的內(nèi)容會顯示到“上一句”中,原先在“下一句”中的內(nèi)容會顯示到“當(dāng)前句”中編輯框“下一句”中會顯示新的一句話。人工分詞及詞性標(biāo)注輔助程序的實(shí)現(xiàn)過程建立一個(gè)基于對話框的應(yīng)用程序,按照圖1所示,在上面放置相應(yīng)的控件,為這個(gè)對話框建立一個(gè)類,并且為各個(gè)編輯框控件設(shè)置相應(yīng)的成員變量。我們在編寫程序時(shí)為編輯框控件設(shè)置的成員變量有:顯示語料庫

10、名的編輯框是m_corpus,顯示正在標(biāo)注第幾句的編輯框是m_ParaNumber,顯示上一句的編輯框是m_before,顯示下一句的編輯框是m_after,顯示當(dāng)前句的編輯框是m_current,顯示提示信息的編輯框是m_appear。并且我們定義了三個(gè)全局變量vectorlines;inttotalLines,currentLines;“選擇語料庫”命令按紐的單擊響應(yīng)消息如下:CFileDialogOpenFileDlg(TRUE,OFN_OVERWRITEPROMPT);/打開語料文件if(OpenFileDlg.DoModal()!=IDOK)return;this-m_corpus=

11、OpenFileDlg.GetPathName();/將選擇的文件名顯示在編輯框里this-m_before=;this-m_current=;this-m_after=;/初始設(shè)置“上一句”,“當(dāng)前句”和“下一句”三個(gè)編輯框內(nèi)容都為空this-m_paraNumber=1;/默認(rèn)從第一句開始標(biāo)注。UpdateData(FALSE);UpdateWindow();FILE*in;in=fopen(m_corpus,rt);if(in=NULL)AfxMessageBox(Cannotopenthefile!);return;CStdioFileinFile(in);charline6000;l

12、ines.clear();totalLines=0;while(inFile.ReadString(line,6000)/從文件中循環(huán)讀入每一段。lines.push_back(line);totalLines+;/將文件中的內(nèi)容存儲在向量lines中。inFile.Close();“開始標(biāo)注”命令按紐的單擊響應(yīng)消息如下:UpdateData(TRUE);if(this-m_corpus=)AfxMessageBox(沒有打開語料庫,請先打開語料庫!);return;currentLines=m_paraNumber-1;if(currentLines=totalLines)m_current

13、.Format(rrnrrntt!輸入的段數(shù)錯(cuò)誤rrnrrntt語料庫的總段數(shù)為%d行,請重新輸入!,totalLines);elsethis-m_current=linescurrentLines;if(currentLines0¤tLinesm_before=linescurrentLines-1;if(currentLinesm_after=linescurrentLines+1;elsethis-m_after=ttt語料庫標(biāo)注結(jié)束;UpdateData(FALSE);UpdateWindow();“上句”命令按紐的單擊響應(yīng)消息如下:UpdateData(TRUE);if(

14、this-m_corpus=)return;this-m_current=;this-m_before=;this-m_after=;if(currentLines=0|currentLines=totalLines)return;currentLines-;m_paraNumber=currentLines+1;this-m_current=linescurrentLines;if(currentLines0¤tLinesm_before=linescurrentLines-1;if(currentLinesm_after=linescurrentLines+1;elsethis

15、-m_after=ttt語料庫標(biāo)注結(jié)束;UpdateData(FALSE);UpdateWindow();“下句”命令按紐的單擊響應(yīng)消息如下:UpdateData(TRUE);if(this-m_corpus=)return;this-m_current=;this-m_before=;this-m_after=;if(currentLines=totalLines-1)return;currentLines+;m_paraNumber=currentLines+1;this-m_current=linescurrentLines;if(currentLines0¤tLinesm_

16、before=linescurrentLines-1;if(currentLinesm_after=linescurrentLines+1;elsethis-m_after=ttt語料庫標(biāo)注結(jié)束;UpdateData(FALSE);UpdateWindow();小鍵盤中“詞性標(biāo)記”命令按紐的單擊響應(yīng)消息如下:先編寫一個(gè)子函數(shù):CStringaddMark(CStringcurrentLine,CStringmark)unsignedpoint=currentLine.GetLength();for(unsignedit=1;itm_current=)return;/如果沒有打開語料,就返回。m

17、_current=addMark(m_current,/w);/調(diào)用函數(shù),參數(shù)表中的第二個(gè)參數(shù)是/wUpdateData(FALSE);UpdateWindow();其他“詞性標(biāo)記”命令按紐的單擊響應(yīng)消息與此類似,不同之處就是調(diào)用函數(shù)addMark時(shí),參數(shù)表中的第二個(gè)參數(shù)不同。小鍵盤中“刪除”命令按紐的單擊響應(yīng)消息如下:UpdateData(TRUE);if(this-m_current=)return;CStringcurrentLine=m_current;inttr=currentLine.ReverseFind(/);if(tr0)if(currentLine.Mid(tr+2,1)=

18、)m_current=currentLine.Mid(0,tr)+currentLine.Mid(tr+2);if(currentLine.Mid(tr+3,1)=)m_current=currentLine.Mid(0,tr)+currentLine.Mid(tr+3);UpdateData(FALSE);UpdateWindow();3.8小鍵盤中“Undo”命令按紐的單擊響應(yīng)消息很簡單:CEdit*editCur=(CEdit*)GetDlgItem(IDC_current);editCur-Undo();3.9小鍵盤中“提交標(biāo)注”命令按紐的單擊響應(yīng)消息如下:UpdateData(TRU

19、E);if(m_corpus=)return;CStringbuff=m_current,message;buff.TrimLeft();m_appear=;/初始設(shè)置提示信息編輯框的內(nèi)容為空。CEdit*currentEdit=(CEdit*)GetDlgItem(IDC_current);CStringmsgbuf;unsignedparaN=0,curP=0;if(buff.GetLength()=2)/不處理只有一個(gè)回車的句子。for(unsignedit=0;itLineFromChar(it);/得到錯(cuò)誤所在的行。curP=currentEdit-LineIndex(paraN);

20、/得到錯(cuò)誤所在的行的第一個(gè)字符的下標(biāo)。msgbuf=buff.Mid(curP,it-curP);/得到錯(cuò)誤所在的行的第一個(gè)字符到錯(cuò)誤字符之間的字符串message.Format(”警告(第小行):t%st之后有兩個(gè)空格,是否需要刪除一個(gè)!,paraN+1,msgbuf);m_appear=m_appear+rrn+message;message=;msgbuf=,curP=0;paraN=0/規(guī)則2:每一段的最后一個(gè)字符一定要是換行符。if(m_current.Mid(m_current.GetLength()-1)!=n)m_appear=m_appear+rrn+警告:t當(dāng)前句末末尾缺少

21、一個(gè)換行符,請點(diǎn)擊小鍵盤加入一個(gè),否則當(dāng)前句會和下一句連成一句。;(這里只用兩條規(guī)則來舉例,如果需要增加驗(yàn)證規(guī)則,還可以依據(jù)上面的方式添加代碼即可)if(m_appear!=)/如果有警告信息,說明標(biāo)注有錯(cuò)誤,顯示提示后就不再執(zhí)行下面的代碼。UpdateData(FALSE);UpdateWindow();return;if(currentLinesm_current;currentLines+;m_paraNumber=currentLines+1;this-m_current=linescurrentLines;if(currentLines0¤tLinesm_before=l

22、inescurrentLines-1;if(currentLinesm_after=linescurrentLines+1;elsethis-m_after=ttt語料庫標(biāo)注結(jié)束;else/如果當(dāng)前段是最后一段,只保存,不往下處理了。linescurrentLines=this-m_current;this-m_before=linescurrentLines;this-m_current=rrntt語料庫標(biāo)注結(jié)束,不要再點(diǎn)“申請?zhí)峤弧薄皬?qiáng)制提交”,rrnt否則最后一句會被改寫,請退出。;UpdateData(FALSE);UpdateWindow();FILE*agencys;agencys=fopen(m_corpus,wt);/讀出向量中的內(nèi)容保存到文件中。if(agencys=NULL)return;CStdioFileagenfs(agencys);for(inti=0;itotalLines;i+)agenfs.WriteString(linesi);agenfs.Close();3.10小鍵盤中“檢驗(yàn)標(biāo)注”和“強(qiáng)制提交”兩個(gè)命令按紐的單擊響應(yīng)消息與“提交標(biāo)注”相似,對“檢驗(yàn)標(biāo)注”命令

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論