線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:778
推到 Plurk!
推到 Facebook!

急!!請問各位高手自動編碼的問題~

尚未結案
Angela
一般會員


發表:2
回覆:2
積分:0
註冊:2003-10-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-05 06:04:49 IP:61.231.xxx.xxx 未訂閱
目前正在寫一個自動編碼的功能: 輸入新產品名稱時,會抓出資料庫中每筆產品名稱進行比對,相似度最高 者就以該產品的分類碼做為新產品分類碼 ex: 新增:清新化妝水與資料庫中的潔面化粧水(分類碼:1ac) 比對後相似度為0.6--> 公式=2*[A交隻B]/(A B的長度) 此程式還是很多錯誤,可能我還有很多語法不太熟,請各位高手指點一下~~ 小妹感激不盡~~ 若有疑問可寄e-mail!! 阿笨留 void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString *old_name; AnsiString *id; char *add; add=DBEdit6->Text.c_str(); char *v,*cat; char *new_cat; v = new char [add.Length()]; for (int i=0; i < add.Length(); i ){ //將每一個字元丟入v陣列中 v[i] = add.SubString(i,1); } int len[ADOTable1->RecordCount 1]; int n,count,abc; //動態宣告陣列大小, 大小與資料筆數一致 old_name = new char[ADOTable1->RecordCount 1]; id=new char[ADOTable1->RecordCount 1]; for (int i =0;iRecordCount;i ) { old_name[i] = ADOTable1->FieldByName("product_name")->AsString; id[i] = ADOTable1->FieldByName("category_id")->AsString; len=strlen(add) old_name.length; //計算相似度 for(int j=0;j0 ){ count=count 1; old_name[i]=old_name[i].Delete(1,n); } }while(n==0) } end[i]=2*count/len; ADOTable1->Next(); } //相似度由大到小排序 for (i=0;iRecordCount-1;i ) { for (j=i 1;jRecordCount;j ) if (end[i]Text=new_cat; if (ADOTable1->State==dsEdit) { ADOQuery1->Post(); } }
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-06 13:50:17 IP:203.95.xxx.xxx 未訂閱
Hi, 請你發表文章時, 中間若有程式碼的話, 請使用 [ code ] [ / code ] 包住, 才容易讓人看得明白. 另外看了一下你的程式, 應該要使用 WideString 來進行比對比較理想, 不要使用 AnsiString, 或是 char * 來比對, 否則在中英文夾雜時, 會很難處理!
Angela
一般會員


發表:2
回覆:2
積分:0
註冊:2003-10-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-06 17:52:06 IP:61.231.xxx.xxx 未訂閱
請問是要所有的字串都設成WideString的型態嗎? 還有想要增加同義字的功能,但目前不知如何寫才好 (同義字不多,所以想設成陣列再去做比對) 真的非常謝謝你的回應~~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-06 18:08:11 IP:203.95.xxx.xxx 未訂閱
要比對的字設定為 WideString 即可, 我寫個小範例, 你放兩個 Edit 在 Form 上, 再放一個 Button , 後在該 Button 的 Click Event 中寫入:    
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  WideString s1, s2;
  s1 = Edit1->Text;
  s2 = Edit2->Text;      int i, j, iqual;
  double flike;
  iqual=0;
  for(i=1;i<=s1.Length();i  )
    for(j=1;j<=s2.Length();j  )
      if(s1[i]==s2[j])
        iqual  ;
  ShowMessage("s1 length=" IntToStr(s1.Length()) " s2 length=" IntToStr(s1.Length()) " same length=" IntToStr(iqual));
  flike = 2.0 * iqual / (s1.Length() s2.Length());
  ShowMessage(FloatToStr(flike));
}
即可算出在 Edit 中的兩個字串的相似度, 另外你可能還得建立同義字庫哦~
系統時間:2024-05-06 1:48:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!