词性分法程序
http://tieba.baidu.com/p/1180650771?pid=13814874186&cid=0#13814874186
?
給你個函數看看,分析下有什么用
句列表指針 存儲的是一句話的數據,其中已經分好詞,并知道每個詞的詞性.
周春海(專有名詞) 是(動詞) 周依言(專有名詞) 的(的詞) 爸爸(抽象名詞) .(句號詞)
程序里的詞性分法和語文課本中的分法有所不同. 是鏈,有鏈最后都可以歸結為動詞鏈
我的想法是把復雜的語句通過學習分解成簡單的語句(程序可以理解的語句,就是程序里可以處理的語句),復雜的語句可能很多,但是簡單的語句句型是有限的,通過編程,處理了簡單語句,遇到復雜的語句通過句型分解成簡單語句.
應答類::應答函數(句列表類* 句列表指針)
{
// 周春海是周依言的爸爸.
// 周春海是誰? 周春海 是 查找是鏈(周春海,0,0) 1 2 查找是鏈(1 0 0) 1 2 001,1,0,0,
// 周春海是爸爸? 確認是鏈(周春海,爸爸,0) 查找是鏈(1,3,0) 01(1,3,0)
// 周春海是誰的爸爸? 查找是鏈(周春海,爸爸,誰) 1 2 查找是鏈(1,5,3) 4 5 1 2 01(1,5,3) 4 5
// 周春海是周依言的什么? 查找是鏈(周春海,什么人,周依言)
// 周春海是周依言的爸爸? 確認是鏈(周春海,爸爸,周依言)
// 隨是周依言的爸爸? 查找有鏈(周依言,爸爸,誰)
//周依言的爸爸是誰? 查找有鏈(周依言,爸爸,誰)
// 周春海和周依言是什么關系? 查找是鏈(周春海,什么關系,周依言),查找是鏈(周依言,?周春海)
CString 回應句型集=句列表指針->獲取句型指針()->獲取回應句型();
CString 回應句子句型,臨時串;
int 可回應句子數量=回應句型集.Replace(_分號,_分號);
int i,臨時數,原句成分個數,回應句子成分個數;
句類* 句類游標,**原句數組;
CString *回應句子數組;
回應句子數組=new CString [可回應句子數量];
if(回應句型集==_空字符)
{
待回應數據隊列類 待回應操作;
句列表指針->設置所屬處理流程(句列表指針->獲取所屬處理流程()+1000);
待回應操作.添加待回應隊列(句列表指針,_應答格式);
傳參指針->發送數據隊列根指針->發送數據(句列表指針->獲取環境指針()->獲取套接字(),_應答格式+句列表指針->獲取主鍵值()+_空格+句列表指針->獲取原話());
return;
}
原句成分個數=句列表指針->獲取句類根指針()->獲取節點個數(句列表指針->獲取句類根指針());
原句數組=new 句類* [原句成分個數+1];
句類游標=句列表指針->獲取句類根指針()->獲取下一個節點();
for( i=1;i<原句成分個數;i++)
{
原句數組[i]=句類游標;
句類游標=句類游標->獲取下一個節點();
}
// _T(" 0x哦 1 2 00是類確認1,0,0,; 明白; 知道了;"); _T("1 2 00是類確認1,0,0,")
i=1;
do {
回應句子句型=回應句型集.Left(回應句型集.FindOneOf(_分號));
回應句型集=回應句型集.Right(回應句型集.GetLength()-回應句型集.FindOneOf(_分號)-1);
回應句子成分個數=回應句子句型.Replace(_空格,_空格);
do{
臨時串=回應句子句型.Left(回應句子句型.FindOneOf(_空格));
回應句子句型=回應句子句型.Right(回應句子句型.GetLength()-回應句子句型.FindOneOf(_空格)-1);
if (臨時串.Left(1)==_T("0"))
{
if(臨時串.Left(3)==_T("000"))
{
回應句子數組[i]=回應句子數組[i]+臨時串.Right(臨時串.GetLength()-3);
continue;
}
int j, 參數個數=臨時串.Replace(_逗號,_逗號);
CString 函數名=臨時串.Left(3),參數串;
臨時串=臨時串.Right(臨時串.GetLength()-3);
//回應句子數組[i]=回應句子數組[i].Right(回應句子數組[i].GetLength()-3);
句類** 句類參數數組;
句類參數數組=new 句類* [參數個數];
j=0;
do{
參數串=臨時串.Left(臨時串.FindOneOf(_逗號));
臨時串=臨時串.Right(臨時串.GetLength()-臨時串.FindOneOf(_逗號)-1);
句類參數數組[j]=原句數組[_ttoi(參數串)];
}while (j<參數個數);
switch(_ttoi(函數名))
{
case 0:
break;
case 1:
是類 是操作;
回應句子數組[i]=回應句子數組[i]+是操作.查找是鏈(句類參數數組[0],句類參數數組[1],句類參數數組[2]);
break;
}
delete [] 句類參數數組;
}else{
int j=_ttoi(臨時串);
回應句子數組[i]=回應句子數組[i]+原句數組[j]->獲取詞指針()->獲取主鍵值();
}
}while(回應句子句型.GetLength()>1);
}while(回應句型集.Replace(_分號,_分號)<1);
傳參指針->發送數據隊列根指針->發送數據(句列表指針->獲取環境指針()->獲取套接字(),回應句子數組[rand()%可回應句子數量]);
delete [] 回應句子數組;
delete [] 原句數組;
}
轉載于:https://www.cnblogs.com/carl2380/archive/2011/12/30/2307630.html
總結
- 上一篇: (笔记)堆和栈的区别-两种不同的数据结构
- 下一篇: 用回溯法找出n个自然数中取r个数的全排列