求高效字串分析算法。(如将'中山三路15号B座1501房',返回其中的 '中山三路'和15 两值 |
尚未結案
|
Dot.com
一般會員 發表:19 回覆:18 積分:7 註冊:2003-07-03 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 如何返回'中山三路15号B座1501房'或如'中山三路西区15号B座1501房'这样的地址字串 的 路名( '中山三路')和 号数(15) 两值,希望前辈们指明一下高效处理的方法或思路。谢谢。 Dot.com 你好: (1)小弟淺見,我認為應該是沒有很好的方法吧(畢竟地址的格式太多了) ( > > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 如何返回'中山三路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 發送簡訊給我 |
视你的需要,如果纯粹以字符的组合来区分,可以用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 發送簡訊給我 |
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
引言: 對不起, 借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 發送簡訊給我 |
http://thunder.prohosting.com/~linuxlib/books/zxfaq.htm#recog
汉字GB和BIG5都为双字节编码, GB编码的第一字节在0xa1到0xf7之间, 第二字节在0xa1到0xfe之间. BIG5编码的第一字节在0xa1到0xf9之间, 第二字节有两个区域, 第一区域在0x40和0x7e之间, 第二区域在 0xa1和0xfe之间.(注意第二字节的高位可能是零)
久病成良医--多试
千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |