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

求高效字串分析算法。(如将'中山三路15号B座1501房',返回其中的 '中山三路'和15 两值

尚未結案
Dot.com
一般會員


發表:19
回覆:18
積分:7
註冊:2003-07-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-03 22:37:54 IP:218.15.xxx.xxx 未訂閱
如何返回'中山三路15号B座1501房'或如'中山三路西区15号B座1501房'这样的地址字串 的 路名( '中山三路')和 号数(15) 两值,希望前辈们指明一下高效处理的方法或思路。谢谢。
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-04 22:11:20 IP:61.221.xxx.xxx 未訂閱
引言: 如何返回'中山三路15号B座1501房'或如'中山三路西区15号B座1501房'这样的地址字串 的 路名( '中山三路')和 号数(15) 两值,希望前辈们指明一下高效处理的方法或思路。谢谢。
Dot.com 你好:
(1)小弟淺見,我認為應該是沒有很好的方法吧(畢竟地址的格式太多了)
( >
    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-05 23:20:03 IP:61.66.xxx.xxx 未訂閱
引言: 如何返回'中山三路15号B座1501房'或如'中山三路西区15号B座1501房'这样的地址字串 的 路名( '中山三路')和 号数(15) 两值,希望前辈们指明一下高效处理的方法或思路。谢谢。
如RaynorPao兄說的這非常的難, 因為你談的是一個人工智慧分析法 我之前也有類似的需求, 後來自已去改了一些, 你參考下面的元件, 或許 對你有幫助 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31033 你的做法就是要先區分出地址中特殊字詞有那些, 如縣,市,路,街,區,號... 然後用迴圈來截斷這些片語放在StringList中, 再去分析比對, 方向是這樣 其他必須靠你自個兒努力了!
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-09 10:13:53 IP:218.1.xxx.xxx 未訂閱
视你的需要,如果纯粹以字符的组合来区分,可以用TParser,就像分析DFM文件一样:
procedure TForm1.Button1Click(Sender: TObject);
var
  Parser:TParser;
  SS:TStringStream;
  P0:integer;
  procedure _CheckWideSymbol;
  begin
    if P0<>-1 then
    begin
      Memo1.Lines.Add(Copy(SS.DataString,P0+1,Parser.SourcePos-P0));
      P0:=-1;
    end;
  end;
begin
  SS:=TStringStream.Create('中山三路15号B座1501房');
  try
    SS.Position:=0;
    Parser:=TParser.Create(SS);
    try
      P0:=-1;
      while Parser.Token<>toEof do
      begin
        case Parser.Token of
          toSymbol:
            begin
              _CheckWideSymbol;
              Memo1.Lines.Add(Parser.TokenString);
            end;
          toInteger:
            begin
              _CheckWideSymbol;
              Memo1.Lines.Add(Parser.TokenString);
            end;
          else if P0=-1 then P0:=Parser.SourcePos;
        end;
        Parser.NextToken;
      end;
      _CheckWideSymbol;
    finally
      Parser.Free;
    end;
  finally
    SS.Free;
  end;
end;
结果为: 中山三路 15 号 B 座 1501 房 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听 發表人 - mustapha.wang 於 2003/07/09 10:28:29 發表人 - mustapha.wang 於 2003/07/09 10:30:58
------
江上何人初见月,江月何年初照人
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-09 11:59:40 IP:61.66.xxx.xxx 未訂閱
對不起, 借Dot.com 的版面請問一下mustapha.wang兄    我實作您的程式碼, 轉出來的結果是這樣, 不知那裡有問題,  ps:程式碼是完全copy下去run的, 沒有改任何code(除中山三路的字符)    
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-10 16:28:56 IP:218.1.xxx.xxx 未訂閱
引言: 對不起, 借Dot.com 的版面請問一下mustapha.wang兄 我實作您的程式碼, 轉出來的結果是這樣, 不知那裡有問題, ps:程式碼是完全copy下去run的, 沒有改任何code(除中山三路的字符)
换成big5码确实结果不同,我看看了看这个字串的ASCII码为: 164 164 164 山1 115 山2 ASCAII "s" 164 三1 84 三2 184 244 49 53 184 185 66 174 121 49 53 48 49 169 208 我记得汉字编码的字节最高为是1,即要大于128,难道只针对GB2312码吗? Big5码的莫些汉字的byte小于128(如山字的第2个Byte),TParser会认为是Symbol开始了,故有此问题。 交流就是好(三通吧), src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10543105&CC=235795"> 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-10 17:05:48 IP:218.1.xxx.xxx 未訂閱
http://thunder.prohosting.com/~linuxlib/books/zxfaq.htm#recog 汉字GB和BIG5都为双字节编码, GB编码的第一字节在0xa1到0xf7之间, 第二字节在0xa1到0xfe之间. BIG5编码的第一字节在0xa1到0xf9之间, 第二字节有两个区域, 第一区域在0x40和0x7e之间, 第二区域在 0xa1和0xfe之间.(注意第二字节的高位可能是零)     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
系統時間:2024-05-18 15:32:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!