程序輔導(dǎo):字符串識(shí)別算法

字號(hào):

最近,一個(gè)項(xiàng)目,做一個(gè)工具,代替原來(lái)的人工識(shí)別文檔的工作,被安排研究字符串識(shí)別算法, 歷經(jīng)7天, 已經(jīng)實(shí)現(xiàn)改算法, 識(shí)別率相當(dāng)?shù)母?
    被分析字符串來(lái)自excel的一行. 按照業(yè)務(wù)邏輯來(lái)看,一行excel里面 只有兩中域 一種叫可變域,另一種叫非可變域, 研究發(fā)現(xiàn), 可變域(下面稱為FIELD)有著比較明顯的特點(diǎn),都是以特殊字符打頭,以某幾種方式存在,因?yàn)橐蕴厥庾址蝾^~~~~所以,算法來(lái)了!
    1.關(guān)鍵頭字觸發(fā)
    觸發(fā)什么呢? 暗示程序下面可能會(huì)有一個(gè)FIELD, 那么下面就開始看,是不是一個(gè)FIELD,我的實(shí)現(xiàn)辦法主要是:正則表達(dá)式匹配出滿足特征的字符,一個(gè)正則表達(dá)式子就解決問題了嗎?考試,大提示沒有~關(guān)于FIELD的設(shè)計(jì)思路在這里體現(xiàn)出來(lái)了!
    //’X’,’X’,’*’,’Y’,’M’,’D’,’H’,’Z’,’9’ //’X’ list_x.add("X+\\-X+"); list_x.add("X+"); //’X’ list_X2.add("(X )+X"); list_X2.add("(X )+"); //’Y’ list_Y.add("[Y]{4}[/][M]{2}[/][D]{2}"); list_Y.add("[Y]{4}"); //’*’ list_xx.add("(* ){3}.+(* ){3}"); //’H’ list_H.add("HH:MI:SS"); list_H.add("HH:MI"); //’M’ list_M.add("[M]{2}/[D]{2}"); list_M.add("[M]{2}"); //’D’ list_D.add("[D]{2}"); //’Z’ list_Z.add("[Z]{1,3},(ZZZ,)*[Z]{1,2}9"); list_Z.add("[Z]{1,3}9"); list_Z.add("[Z]{1,3}"); //’9’ list_9.add("9999");