關(guān)于拼寫小助手的開發(fā)日記_第1頁
已閱讀5頁,還剩215頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、關(guān)于拼寫小助手的開發(fā)日記名目我的spellcorrect開發(fā)文檔相關(guān)配置文件及預備工作:演示效果(中文):演示效果(英語):代碼部分:相關(guān)配置文件及預備工作:演示效果(中文):演示效果(英語):代碼部分:-復原內(nèi)容開頭-我的spellcorrect開發(fā)文檔相關(guān)配置文件及預備工作:我的主要文件夾分為三個:分離為客戶端,cppjieba分詞庫,離線部分及服務(wù)器部分1560856582308客戶端部分:內(nèi)部為客戶端源碼及運行程序1560856552431cppjieba分詞庫部分,就不贅述,請自行安裝離線部分:內(nèi)部有中英文件夾放置索引及詞典文件,還有配置文件及分詞庫,其余為代/p>

2、64服務(wù)器部分:最為重要的配置文件及數(shù)據(jù)部分,頭文件在include,實現(xiàn)文件在src里面1560857034230演示效果(中文):=啟動時服務(wù)器:=1560857677039=客戶端連入時時服務(wù)器:=1560857739202=輸入趙=1560858117388=輸入周杰倫=1560858201376=輸入清華高校=1560858560147演示效果(英語):=啟動時服務(wù)器:=1560857677039=客戶端連入時時服務(wù)器:=1560857739202=輸入student:=1560858008297=輸入spell:=1560858872540=輸入computer:=15608591

3、62357代碼部分:離線部分:img=makefile:=srcs:=$(wildcard*.cc)objs:=$(patsubst%.cc,%.o,$(srcs)cxx:=g+cxxflags:=-w-g-std=c+11$(addprefix-i,$(inc_dir)$(libs)-wno-deprecated-i./cppjieba/include/-i./cppjieba/depsexe:=./main$(exe):$(objs)$(cxx)-o$(exe)$(objs)$(cxxflags)clean:rm-rf$(exe)rm-rf$(objs)=configuration:=/=

4、/file:configuration.h/author:wtptorres(1584292712)/date:2019-06-1200:30:39/dream:don&39;tforgetyourdreams!/=ifndef_configuration_h_define_configuration_h_include"nocopyable.h"includeincludeusingnamespacestd;classconfiguration:publicnoncopyablepublic:configuration(conststring&am

5、p;amp;filepath);stringgetenglishdir()constreturn_englishdir;stringgetchinesedir()constreturn_chinesedir;private:string_filepath;string_englishdir;string_chinesedir;templateclasssingletonpublic:templatestatict*getinstance(args.args)if(!_pinstance)_pinstance=newt(args.);return_pinstance;staticvoiddest

6、roy()if(_pinstance)delete_pinstance;private:singleton();singleton();statict*_pinstance;templatet*singleton:_pinstance=null;endif1/=2/file:configuration.cc3/author:wtptorres(1584292712)4/date:2019-06-1200:30:045/dream:don&39;tforgetyourdreams!6/=789include"configuration.h"10incl

7、ude11include12include13usingnamespacestd;1415configuration:configuration(conststring&filepath)16:_filepath(std:move(filepath)1718ifstreamifs(_filepath);19if(!ifs)20cout>_englishdir;22ifs>>_chinesedir;23ifs.close();24/=/file:nocopyable.h/author:wtptorres(1584292712)/date:2019-06-1200

8、:24:36/dream:don&39;tforgetyourdreams!/=ifndef_nocopyable_h_define_nocopyable_h_classnoncopyablepublic:noncopyable()=default;noncopyable()=default;private:noncopyable(constnoncopyable&rhs);noncopyable&operator=(constnoncopyable&rhs);endif=dictproducer:=/=/file:dictproduce

9、r.h/author:wtptorres(1584292712)/date:2019-06-1216:40:25/dream:don&39;tforgetyourdreams!/=ifndef_dictproducer_h_define_dictproducer_h_include"splittool.h"usingnamespacestd;include"nocopyable.h"includeincludeincludeincludeincludeclassdictproducer:publicnoncopya

10、blepublic:dictproducer(conststring,conststring,conststring&,splittooljieba*);dictproducer()voidbuild_dict();voidbuild_cn_dict();voidstore_dict();vector>&getindict()return_indict;private:voidprocessenglishword(string&word);voidprocesschineseword(string&word);/除去中文的數(shù)

11、字voidconstruct_indict();string_englishdir;string_chinesedir;string_golefilepath;vector_englishfiles;vector_chinesefiles;map_dict;vector>_indict;shared_ptr_splittool;endif/=/file:dictproducer.cc/author:wtptorres(1584292712)/date:2019-06-1216:50:46/dream:don&39;tforgetyourdreams!/=include&q

12、uot;dictproducer.h"includeincludeincludeincludedefinefirstsize10000usingnamespacestd;dictproducer:dictproducer(conststringenglishdir,conststringchinesedir,conststring&golefilepath,splittooljieba*splittoolptr):_englishdir(englishdir),_chinesedir(chinesedir),_golefilepath(golefilepath

13、)_splittool.reset(splittoolptr);std:ifstreamifsenglish(_englishdir);std:ifstreamifschinese(_chinesedir);stringfilepath;if(!ifsenglish|!ifschinese)cout>filepath)_englishfiles.push_back(filepath);while(ifschinese>>filepath)_chinesefiles.push_back(filepath);_indict.reserve(firstsize);voiddictp

14、roducer:processenglishword(string&word)autocit=word.begin();for(;cit!=word.end();+cit)/去除標點符號或數(shù)字if(!isalpha(*cit)word.erase(cit);-cit;/迭代器位置發(fā)生轉(zhuǎn)變elseif(isupper(*cit)/將大寫字母改為小寫*cit=tolower(*cit);voiddictproducer:processchineseword(string&word)autocit=word.begin();for(;cit!=word.end();+

15、cit)/去除數(shù)字if(!isalnum(*cit)word.erase(cit);-cit;voiddictproducer:build_dict()/建立英文詞典for(auto&filepath:_englishfiles)ifstreamifs(filepath);if(!ifs)cout>word)processenglishword(word);autocit=_dict.find(word);if(word.size()>0&&cit=_dict.end()_dict.insert(std:make_pair(word,

16、1);elseif(cit!=_dict.end()+cit->second;voiddictproducer:build_cn_dict()vectorwords;for(autofilepath:_chinesefiles)ifstreamifs(filepath);if(!ifs)coutcut(sentence);vector&results=_splittool->getresult();for(auto&res:results)processchineseword(res);autocit=_dict.find(res);if(cit=_

17、dict.end()_dict.insert(std:make_pair(res,1);else+cit->second;voiddictproducer:store_dict()construct_indict();ofstreamofs(_golefilepath);if(!ofs)coutincludeincludeincludeincludeincludeusingnamespacestd;classgetindexpublic:getindex(conststring&,conststring&,conststring&);get

18、index()voidconstruct_index();voidstore_index();private:boolisenglish(conststring&rhs)const;vectorgetonecharacter(conststring&word);string_sourcefilepath;string_golefilepath;string_stopwordsfilepath;vector>_dict;unordered_set_stopwords;unordered_map>_index;endif/=/file:getindex.

19、cc/author:wtptorres(1584292712)/date:2019-06-1209:00:11/dream:don&39;tforgetyourdreams!/=include"getindex.h"includeincludeincludeusingnamespacestd;getindex:getindex(conststring&sourcefilepath,conststring&golefilepath,conststring&stopwordsfilepath):_sourc

20、efilepath(std:move(sourcefilepath),_golefilepath(std:move(golefilepath),_stopwordsfilepath(std:move(stopwordsfilepath)ifstreamifs(_sourcefilepath);if(!ifs)cout>key>>value;_dict.push_back(std:make_pair(key,value);ifstreamifs1(_stopwordsfilepath);if(!ifs1)cout>stopword,!ifs1.eof()_stopword

21、s.insert(stopword);vectorgetindex:getonecharacter(conststring&word)vectortmp;autocit=word.begin();while(citsmp;smp.insert(i);_index.insert(std:make_pair(charactor,smp);else/已經(jīng)存在了該字母的索引cit->second.insert(i);else/中文處理部分vectoronecharacterrally=getonecharacter(tmp);for(autoonecharacter:onecha

22、racterrally)/stop_words中不存在該單詞,則加入索引中if(_stopwords.find(onecharacter)=_stopwords.end()autoit=_index.find(onecharacter);if(it=_index.end()settmp;tmp.insert(i);_index.insert(std:make_pair(onecharacter,tmp);elseit->second.insert(i);voidgetindex:store_index()/ofs存儲索引的內(nèi)容std:ofstreamofs(_golefilepath);

23、if(!ofs)coutincludeusingnamespacestd;usingnamespacecppjieba;classsplittooljiebapublic:splittooljieba(conststring&dict_path,conststring&model_path,conststring&user_dict_path,conststring&idfpath,conststring&stopwordpath):_jieba(dict_path,model_path,user_dict_pat

24、h,idfpath,stopwordpath)splittooljieba()voidcut(conststring&sentence)vectortmp;_jieba.cut(sentence,tmp);_result.insert(_result.end(),tmp.begin(),tmp.end();vector&getresult()return_result;private:vector_result;cppjieba:jieba_jieba;endif=main:=/=/file:main.cc/author:wtptorres(1584292712

25、)/date:2019-06-1220:38:50/dream:don&39;tforgetyourdreams!/=include"configuration.h"include"splittool.h"usingnamespacestd;include"dictproducer.h"include"getindex.h"includeincludeconstchar*constdict_path="./cppjieba/d

26、ict/jieba.dict.utf8"constchar*consthmm_path="./cppjieba/dict/hmm_model.utf8"constchar*constuser_dict_path="./cppjieba/dict/user.dict.utf8"constchar*constidf_path="./cppjieba/dict/idf.utf8"constchar*conststop_word_path="./cppjieb

27、a/dict/stop_words.utf8"conststringgole_dict_path="./server/data/dict.txt"conststringgole_index_path="./server/data/index.txt"classsplittool;intmain(void)configuration*pconfig=singleton:getinstance("configure.txt");splittooljieba*ptool=ne

28、wsplittooljieba(dict_path,hmm_path,user_dict_path,idf_path,stop_word_path);dictproducermydictproducer(pconfig->getenglishdir(),pconfig->getchinesedir(),gole_dict_path,ptool);mydictproducer.build_dict();/建立英語詞典mydictproducer.build_cn_dict();/建立中文詞典mydictproducer.store_dict();/儲存詞典getindexmyinde

29、x(gole_dict_path,gole_index_path,"stop_words_zh.txt");myindex.construct_index();/建立索引myindex.store_index();/存儲索引singleton:destroy();return0;在線部分:img=configuration:=/=/file:configuration.cc/author:wtptorres(1584292712)/date:2019-06-0610:32:43/dream:don&39;tforgetyourdreams!/=ifn

30、def_configuration_h_define_configuration_h_include"noncopyable.h"includeincludedefineconfpath"/home/wtp/spell/server/conf/configure.txt"usingnamespacestd;namespacewdclassconfiguration:publicnoncopyablepublic:configuration(conststring&filepath);configuratio

31、n()=default;stringgetdictdir()const;stringgetindexdir()const;stringgetip()const;stringgetcache()const;unsignedshortgetport()const;private:string_filepath;map_conf;templateclasssingletonpublic:templatestatict*getinstance(args.args)if(!_pinstance)_pinstance=newt(args.);return_pinstance;staticvoiddestr

32、oy()if(_pinstance)delete_pinstance;private:singleton();singleton();statict*_pinstance;templatet*singleton:_pinstance=null;endif/=/file:configuration.cc/author:wtptorres(1584292712)/date:2019-06-0715:24:14/dream:don&39;tforgetyourdreams!/=include"configuration.h"includeincludein

33、cludeincludeusingnamespacestd;usingnamespacewd;wd:configuration:configuration(conststring&filepath):_filepath(std:move(filepath)ifstreamifs(_filepath);if(!ifs)cout>key)ifs>>value;_conf.insert(std:make_pair(key,value);ifs.close();stringwd:configuration:getdictdir()constautocit=_conf.

34、find("mydict");if(cit=_conf.end()return""elsereturncit->second;stringwd:configuration:getindexdir()constautocit=_conf.find("myindex");if(cit=_conf.end()return""elsereturncit->second;stringwd:configuration:getip()constautoc

35、it=_conf.find("myip");if(cit=_conf.end()return""elsereturncit->second;unsignedshortwd:configuration:getport()constautocit=_conf.find("myport");if(cit=_conf.end()return0;elsereturnatoi(cit->second.c_str();stringwd:configuration:getcache()con

36、stautocit=_conf.find("mycache");if(cit=_conf.end()return""elsereturncit->second;=acceptor:=/=/file:acceptor.h/author:wtptorres(1584292712)/date:2019-06-0523:47:05/dream:don&39;tforgetyourdreams!/=ifndef_wd_acceptor_h_define_wd_acceptor_h_include"so

37、cket.h"include"inetaddress.h"namespacewdclassacceptorpublic:acceptor(intlistenfd,constinetaddress&addr);voidready();/服務(wù)器監(jiān)聽預備intaccept();/服務(wù)器接收新銜接intfd()constreturn_listensock.fd();private:voidsetreuseaddr(boolon);/設(shè)置地址重用voidsetreuseport(boolon);/設(shè)置端口重用voidbind();/綁

38、定voidlisten();/監(jiān)聽socket_listensock;inetaddress_addr;endif/=/file:acceptor.cc/author:wtptorres(1584292712)/date:2019-06-0523:52:12/dream:don&39;tforgetyourdreams!/=includeinclude"acceptor.h"include"socketutil.h"namespacewdacceptor:acceptor(intlistenfd,constinet

39、address&addr):_listensock(listenfd),_addr(addr)voidacceptor:ready()setreuseaddr(true);setreuseport(true);bind();listen();intacceptor:accept()intpeerfd=:accept(_listensock.fd(),null,null);if(-1=peerfd)perror("accepterror!");returnpeerfd;voidacceptor:setreuseaddr(boolflag)int

40、on=(flag?1:0);if(:setsockopt(_listensock.fd(),sol_socket,so_reuseaddr,&on,static_cast(size_t(on)=-1)perror("setsockoptreuseaddrerror!");:close(_listensock.fd();exit(exit_failure);voidacceptor:setreuseport(boolflag)ifndefso_reuseportinton=(flag?1:0);if(:setsockopt(_listensoc

41、k.fd(),sol_socket,so_reuseaddr,&on,static_cast(size_t(on)=-1)perror("setsockoptreuseporterror!");:close(_listensock.fd();exit(exit_failure);elseif(flag)fprintf(stderr,"so_reuseportisnotsupported!n");endifvoidacceptor:bind()if(-1=:bind(_listensock.fd(),(con

42、ststructsockaddr*)_addr.getsockaddrptr(),sizeof(inetaddress)perror("binderror!");:close(_listensock.fd();exit(exit_failure);voidacceptor:listen()if(-1=:listen(_listensock.fd(),10)perror("listenerror!");:close(_listensock.fd();exit(exit_failure);if0intmain()std:cou

43、tnamespacewdclasscondition:noncopyablepublic:condition(mutexlock&mutex):_mutex(mutex)pthread_cond_init(&_cond,null);condition()pthread_cond_destroy(&_cond);voidwait()pthread_cond_wait(&_cond,_mutex.getmutexlockptr();voidnotify()pthread_cond_signal(&_cond);void

44、notifyall()pthread_cond_broadcast(&_cond);private:pthread_cond_t_cond;mutexlock&_mutex;endif=cache:=/=/file:cache.h/author:wtptorres(1584292712)/date:2019-06-0519:52:40/dream:don&39;tforgetyourdreams!/=ifndef_cache_h_define_cache_h_includeincludeusingnamespacestd;namespacewdclass

45、cachepublic:voidaddelement(string,string);/增強緩存信息voidreadfromfile(string);/從文件中讀取信息voidwritetofile(string);/將信息寫入文件中voidupdate(constcache&);/更新緩存消息boolfind(stringquerry);/從數(shù)據(jù)庫中找尋信息string&operator(stringkey);private:unordered_map_hashtable;/采納hashtable舉行緩存;endif/=/file:cache.cc/author

46、:wtptorres(1584292712)/date:2019-06-0520:01:25/dream:don&39;tforgetyourdreams!/=include"cache.h"includeincludeincludeusingnamespacestd;usingnamespacewd;voidcache:addelement(stringquerry,stringresult)_hashtablequerry=result;voidcache:readfromfile(stringfilepath)ifstreamifs(filepath);if(!ifs)cout>querry,!ifs.eof()ifs>>result;_hashtablequerry=result;if0voidcache:writetofile(stringfilepath)ofstreamofs(filepath)

溫馨提示

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

評論

0/150

提交評論