中文文本信息处理Word文件下载.docx
- 文档编号:20273487
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:14
- 大小:22.24KB
中文文本信息处理Word文件下载.docx
《中文文本信息处理Word文件下载.docx》由会员分享,可在线阅读,更多相关《中文文本信息处理Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
M}的字符串C0…Ck切分出来,然后将后面的剩余字符串Ck+1…Cn-1作为新的待切分字符串进行同样的处理,直到待切分串为空为止。
謀荞抟箧飆鐸怼类蒋薔。
正向最大匹配算法的具体实现如下所示:
voidCWSView:
:
OnMaxMatch()
{
//TODO:
Addyourcontrolnotificationhandlercodehere厦礴恳蹒骈時盡继價骚。
厦礴恳蹒骈時盡继價骚。
GetDlgItem(IDC_EDIT1)->
GetWindowText(str);
//将屏幕上的句子保存在str中茕桢广鳓鯡选块网羈泪。
茕桢广鳓鯡选块网羈泪。
CStringresult="
"
;
longrecCount=0;
while(!
str.IsEmpty())
{
intlen=str.GetLength();
if(len>
MAX_WL)//不能超过最大词长
len=MAX_WL;
CStringw=str.Left(len);
//候选词
if(m_pSet->
IsOpen())
{
m_pSet->
Close();
}
m_pSet->
m_strFilter="
m_strFilter+="
word="
'
m_strFilter+=w;
Open();
recCount=m_pSet->
GetRecordCount();
while(len>
2&
&
recCount==0)//词典中不存在
len-=2;
w=w.Left(len);
//删除候选词最后一个字作为新候选词
if(m_pSet->
{
m_pSet->
}
recCount=m_pSet->
result+=w+'
/'
//将匹配词连同分词标记符加到输出串末尾
str=str.Mid(w.GetLength());
}
GetDlgItem(IDC_EDIT2)->
SetWindowText(result);
}
正向最小匹配(OnMinMatch)
正向最小匹配(MinimumMatch)算法的基本思想是:
按照从左到右的顺序,首先从汉字串中取长度为2的子串查词典。
若词典中存在这个词,则切分出该子串,指针后移2个汉字,否则,子串长度逐次加一继续匹配。
若一直到长度为MAXL的子串仍无法匹配,则切分出当前汉字。
鹅娅尽損鹌惨歷茏鴛賴。
正向最小匹配算法的具体实现如下所示:
OnMinMatch()
Addyourcontrolnotificationhandlercodehere籟丛妈羥为贍偾蛏练淨。
籟丛妈羥为贍偾蛏练淨。
//将屏幕上的句子保存在str中預頌圣鉉儐歲龈讶骅籴。
預頌圣鉉儐歲龈讶骅籴。
CStringw="
{
intlen;
if(str.GetLength()<
MIN_WL)//只剩下单字词
len=2;
w=str.Left(len);
else
len=MIN_WL;
//从最短词长开始
while(len<
=MAX_WL)//不超过最大词长
w=str.Left(len);
if(m_pSet->
{
m_pSet->
}
recCount=m_pSet->
if(recCount==0)//该词不存在
len+=2;
w=str.Left(len);
else//存在则退出循环
break;
if(len>
MAX_WL)//多字词不存在时取单字
len=2;
//将匹配词连同分词标记符加到输出串末尾
str=str.Mid(len);
}
GetDlgItem(IDC_EDIT3)->
逆向最大匹配(OnReverseMaxMatch)
逆向最大匹配(ReverseMaximumMatch)算法的基本思想是:
对于待切分的一段字符串C0C1C2…Cn-1,先从Cn-1开始进行搜索,在规定最大词长M之内,寻找满足min{k|Ck…Cn-1是匹配词且n-1-k<
M}的字符串Ck…Cn-1切分出来,然后将前面的剩余字符串C0…Ck-1作为新的待切分字符串进行同样的处理,直到待切分串为空为止。
渗釤呛俨匀谔鱉调硯錦。
逆向最大匹配算法的具体实现如下所示:
OnReverseMaxMatch()
Addyourcontrolnotificationhandlercodehere铙誅卧泻噦圣骋贶頂廡。
铙誅卧泻噦圣骋贶頂廡。
//将屏幕上的句子保存在str中擁締凤袜备訊顎轮烂蔷。
擁締凤袜备訊顎轮烂蔷。
CStringresult;
MAX_WL)
//不能超过最大词长
CStringw=str.Right(len);
//候选词
IsOpen())//判断词典中是否存在
w=w.Right(len);
//删除候选词最前一个字作为新候选词
result.Insert(0,w+'
);
//将匹配词连同分词标记符前置到输出串
str=str.Left(str.GetLength()-w.GetLength());
GetDlgItem(IDC_EDIT4)->
逆向最小匹配(OnReverseMinMatch)
逆向最小匹配(ReverseMinimumMatch)算法的基本思想是:
按照从右到左的顺序,首先从汉字串中取长度为2的子串查词典。
若词典中存在这个词,则切分出该子串,指针前移2个汉字,否则,子串长度逐次加一继续匹配。
贓熱俣阃歲匱阊邺镓騷。
逆向最小匹配算法的具体实现如下所示:
OnReverseMinMatch()
Addyourcontrolnotificationhandlercodehere坛摶乡囂忏蒌鍥铃氈淚。
坛摶乡囂忏蒌鍥铃氈淚。
//将屏幕上的句子保存在str中蜡變黲癟報伥铉锚鈰赘。
蜡變黲癟報伥铉锚鈰赘。
CStringw="
MIN_WL)//只剩下单字词
w=str.Right(len);
w=str.Right(len);
if(recCount==0)
len+=2;
w=str.Right(len);
str=str.Left(str.GetLength()-len);
GetDlgItem(IDC_EDIT5)->
邻近匹配(OnNeighborMatch)
邻近匹配(NeighborhoodMatch)算法的基本思想是:
对于待切分的一段字符串C0C1C2…Cn-1,根据C0C1得到所有以C0C1为首的词条集W,如果词条集为空,则将C0切分出来,否则取满足max{k|C0C1…Ck∈W}的字符串C0C1…Ck切分出来,然后将后面的剩余字符串Ck+1…Cn-1作为新的待切分字符串进行同样的处理,直到待切分串为空为止。
買鲷鴯譖昙膚遙闫撷凄。
邻近匹配算法的具体实现如下所示:
OnNeighborMatch()
Addyourcontrolnotificationhandlercodehere綾镝鯛駕櫬鹕踪韦辚糴。
綾镝鯛駕櫬鹕踪韦辚糴。
//将屏幕上的句子保存在str中驅踬髏彦浃绥譎饴憂锦。
驅踬髏彦浃绥譎饴憂锦。
CStringw;
if(len<
4)
w=str;
len=4;
//取头两个字
while(len<
=str.GetLength())
w=str.Left(len);
IsOpen())//判断词典中是否存在头为w的词
wordLike"
%'
if(recCount)
len-=2;
w=str.Left(len);
;
GetDlgItem(IDC_EDIT6)->
最短路径匹配(OnShortPathMath)
最短路径匹配(ShortestPathMatch)算法的基本思想是:
对于待切分的一段字符串C1C2…Cn,建立一个结点数为n+1的切分有向无环图G,各结点编号依次为V0,V1…Vn,通过以下两种方式建立G所有可能的词边。
猫虿驢绘燈鮒诛髅貺庑。
(1)相邻结点Vk-1,Vk之间建立有向边<
Vk-1,Vk>
,对应的词为Ck,边的权值Lk=ln(K)-ln(ki),其中K为词库所有词的频次之和,ki为Ck出现的频次,如果ki=0说明词库中未登录该单字,为了避免出现G非连通的情况,人为修改其频次为1,然后计算权值;
锹籁饗迳琐筆襖鸥娅薔。
(2)若w=CiCi+1…Cj是一个词,则结点Vi-1,Vj之间建立有向边<
Vi-1,Vj>
,对应的词为w,边的权值Lw=ln(K)-ln(ki),其中ki为w出现的频次。
構氽頑黉碩饨荠龈话骛。
有向图G的表示采用邻接矩阵,该G的特殊性在于Vi,Vj构成边<
Vi,Vj>
时存在j>
i,为了节省存储空间,用大小为(n+1)n/2的一维数组存放各边的权值,非词边的权值用宏定义的大值代替。
輒峄陽檉簖疖網儂號泶。
采用Dijkstra算法求得有向图G的最短路径,比如路径为V0,Vi…Vj,Vn,则字符串切分结果为C1…Ci/……/Cj+1…Cn。
尧侧閆繭絳闕绚勵蜆贅。
最短路径匹配算法的具体实现如下所示:
OnShortPathMath()
Addyourcontrolnotificationhandlercodehere识饒鎂錕缢灩筧嚌俨淒。
识饒鎂錕缢灩筧嚌俨淒。
//将屏幕上的句子保存在str中凍鈹鋨劳臘锴痫婦胫籴。
凍鈹鋨劳臘锴痫婦胫籴。
longrecCount=0;
CStringresult="
vector<
int>
best;
intn=str.GetLength()/2+1;
//节点数
intsn,k;
//sn计算权重数组下标,k循环计数
if(n<
3)
result=str+'
else
double*p=newdouble[n*(n-1)/2];
//一维数组存放词的权重恥諤銪灭萦欢煬鞏鹜錦。
恥諤銪灭萦欢煬鞏鹜錦。
for(k=0;
k<
n*(n-1)/2;
k++)
p[k]=MAX;
CStringiii;
for(inti=0;
i<
n-1;
i++)
for(intj=i+1;
j<
n;
j++)
w=str.Mid(i*2,(j-i)*2);
//取得切分词
sn=(2*n-1-i)*i/2+j-i-1;
//计算权重数组下标鯊腎鑰诎褳鉀沩懼統庫。
鯊腎鑰诎褳鉀沩懼統庫。
if(w.GetLength()==2)
p[sn]=logsum-log((double)1);
//判断词典中是否存在
else
IsOpen())
//计算词边的权值
if(recCount!
=0)
{
p[sn]=logsum-log((double)m_pSet->
m_wfreq);
CStringa;
a.Format("
%d"
sum);
iii+=a+'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中文 文本 信息处理
![提示](https://static.bdocx.com/images/bang_tan.gif)