赞
踩
for(int i=0; i<strlen(str); i++){
if(str[i]!='0' && str[i]!='1'){
cout<<"字符串中的字符不在输入符号集中"<<endl;
flag=1;
break;
}
if(str[i]=='1'&&statment==0) statment=1;
else if(str[i]=='0'&&statment==0) statment=2;
else if(str[i]=='0'&&statment==1) statment=3;
else if(str[i]=='1'&&statment==1) statment=0;
else if(str[i]=='0'&&statment==2) statment=0;
else if(str[i]=='1'&&statment==2) statment=3;
else if(str[i]=='0'&&statment==3) statment=1;
else if(str[i]=='1'&&statment==3) statment=2;
}
string Langue[3][5]={{"<BOS>","商品","和","服务","<EOS>"},
{"<BOS>","商品","和服","物美价廉","<EOS>"},
{"<BOS>","服务","和","货币","<EOS>"}};
for(int t=0;t<len-1;t++){ int a=0,b=0; for(int i=0;i<3;i++){ for(int j=0;j<4;j++){ if(sentence[t]==Langue[i][j]){ b++; if(sentence[t+1]==Langue[i][j+1]){ a++; } } } } son[t]=a; mon[t]=b; cout<<"P("<<sentence[t+1]<<"|"<<sentence[t]<<")="<<a<<"/"<<b<<endl; }
C:\ProgramData\Anaconda3;
C:\ProgramData\Anaconda3\Scripts;
C:\ProgramData\Anaconda3\Library\mingw-w64\bin;
C:\ProgramData\Anaconda3\Library\bin;
conda create -n panda python=3.7.5
conda activate panda
conda deactivate
conda install ipykernel
conda activate $your env name$
conda install ipykernel
conda install nb_conda python -m ipykernel install --user --name panda --display-name panda
jupyter kernelspec list
jupyter lab
pip install mindspore-1.2.0-cp37-cp37m-win_amd64.whl
FMM算法描述:
(1)令i=0,当前指针p,指向输入字串初始位置,执行以下操作:
(2)计算当前指针p,到字串末端的字数n,如果n=1,转(4),结束算法。否则,令m=词典中最长单词的字数,如果n<m,令m=n;
(3)从当前p,起取m个汉字作为词w;,判断:
(a)如果wi是词典中的词,则在w;后添加一个切分标志,转©;
(b)如果wi不是词典中的词且w,的长度大于1,将wi从右端去掉一个字,转 (a)步;否则(wi的长度等于1),则在wi后添加一个切分标志,将wi作为单字词添加到词典中,执行(c )步;
(c)根据w,的长度修改指针p;的位置,如果p;指向字串末端,转(4),
否则,i=i+1,返回(2);
(4)输出切分结果,结束分词程序。
构建链表存储词典
typedef struct Diry{ string words; struct Diry *next; }Diry,*LinkList; ....... LinkList L; L=(LinkList)malloc(sizeof(Diry)); //头结点为空 Diry *s,*r=L; int m=sizeof(diry)/sizeof(*diry); int i,j,t=0,max=0,z; for(i=0;i<m;i++){ s=new Diry; s->words=diry[i]; r->next=s; r=s; if(s->words.length()/2>max) max=s->words.length()/2; } s=new Diry; s->words=""; //尾结点置空,方便判断词典是否遍历完成 r->next=s; r=s; r->next=NULL;
if(flag==1){ //当词典中没有该词的时候,链表末尾添加结点,插入新词
string u;
u=u+sentence[i].at(2*j)+sentence[i].at(2*j+1);
r->words=u;
s=new Diry;
r->next=s;
r=s;
r->next=NULL;
wor[t]=u+"/";
t++;
j++;
}
while(q-j>=1){ n=q-j; for(z=j;z<q;z++){ wor[t]=wor[t]+sentence[i].at(2*z)+sentence[i].at(2*z+1); } Diry *w=L->next; while(w->words!=""){ if(w->words!=wor[t]){ w=w->next; } else{ if(j+n<len){ wor[t]=wor[t]+"/"; t++; j=j+n; flag=0; break; }else{ wor[t]=wor[t]+"。"; t++; j=j+n; flag=0; break; } } } if(flag==1){ q--; wor[t]=""; }else break; }
for(i=0;i<5;i++){ cout<<sentence[i]<<"。"<<endl; int len=sentence[i].length()/2; string wor[4*len]={}; for(j=0;j<len;){ for(u=0;u<len;u++){ wor[t]=""; for(int q=j;q<=u;q++){ wor[t]=wor[t]+sentence[i].at(2*q)+sentence[i].at(2*q+1); } Diry *w=L->next; while(w->words!=""){ if(w->words!=wor[t]){ w=w->next; }else{ u_flag=u; lee=wor[t]; flag=1; break; } } } if(u_flag<len-1&&flag==1){ wor[t]=lee+"/"; j=u_flag+1; t++; }else if(u_flag==len-1&&flag==1){ wor[t]=lee+"。"; j=u_flag+1; t++; } } sentence[i]=""; for(j=0;j<t;j++){ sentence[i]=sentence[i]+wor[j]; } }
Word *s,*last;
for(i=0;i<a.length();i++){
s=(Word*)malloc(sizeof(Word));
s->words=a.at(i);
s->next=L->next;
if(L->next!=NULL) L->next->pre=s; //将已有结点的pre指针指向新插入的结点
L->next=s;
s->pre=L;
if(i==0) last=s; //挂好尾指针,便于输出
}
if(L->next->words=='r'&&L->next->next->words=='e'){ if(L->next->next->next->words=='i'){ ........ } cout<<"+er"<<endl; }else{ ........ } cout<<"+er"<<endl; } }else if(L->next->words=='t'&&L->next->next->words=='s'&&L->next->next->next->words=='e'){ ........ } cout<<"+est"<<endl; }else{ ......... } cout<<"+est"<<endl; } }else{ while(last->pre!=NULL){ //从链表尾向前遍历 cout<<last->words; last=last->pre; } cout<<endl; }
完成华为云中自然语言处理理论、应用与实验课程中实验部分4.1-4.4的视频学习。保留学习后的截图。
理解并学会4.2中的TF-IDF,用代码实现TF-IDF的计算过程,数据集不限制。
随便找篇文章存入txt文件中,根据视频一进行汉语分词
搜寻停用词文件,同生成的分词文件放置同一文件夹下,分词文件别用pku,谁用谁傻逼!
根据视频二基于 Python 和 scikit-learn 框架进行 TF-IDF 的实现即可
最终结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。