中文文本信息处理Word文件下载.docx

上传人:b****6 文档编号:20273487 上传时间:2023-01-21 格式:DOCX 页数:14 大小:22.24KB
下载 相关 举报
中文文本信息处理Word文件下载.docx_第1页
第1页 / 共14页
中文文本信息处理Word文件下载.docx_第2页
第2页 / 共14页
中文文本信息处理Word文件下载.docx_第3页
第3页 / 共14页
中文文本信息处理Word文件下载.docx_第4页
第4页 / 共14页
中文文本信息处理Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

中文文本信息处理Word文件下载.docx

《中文文本信息处理Word文件下载.docx》由会员分享,可在线阅读,更多相关《中文文本信息处理Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

中文文本信息处理Word文件下载.docx

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+'

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1