本發(fā)明涉及一種文檔解析方法與裝置。
背景技術(shù):
現(xiàn)有的商業(yè)活動中常會出現(xiàn)文檔解析的需求,例如,招聘網(wǎng)站在錄入應(yīng)聘者上傳的簡歷時,由于簡歷內(nèi)容格式無統(tǒng)一規(guī)律,傳統(tǒng)方式需要人工把簡歷內(nèi)容逐項錄入,嚴(yán)重影響工作效率。而現(xiàn)有文檔解析技術(shù)的精確度又不高,一旦文檔內(nèi)容格式存在微小差異就可能導(dǎo)致整個解析結(jié)果都有問題。因此,有必要提出一種解析精度和解析效率兼?zhèn)涞奈臋n解析方法。
技術(shù)實現(xiàn)要素:
本發(fā)明目的在于提出一種文檔解析方法與裝置,以解決上述現(xiàn)有技術(shù)存在的文檔解析精度低的技術(shù)問題。
為此,本發(fā)明提出一種文檔解析方法,包括以下步驟:
S1、從原始文檔中提取文本內(nèi)容;
S2、根據(jù)預(yù)設(shè)的分段識別符對所述文本內(nèi)容進(jìn)行分段,將分段后的所述文本內(nèi)容放入原始內(nèi)容堆棧;
S3、依次取出所述原始內(nèi)容堆棧的棧點內(nèi)容,作為當(dāng)前棧點內(nèi)容;若所述當(dāng)前棧點內(nèi)容滿足某個匹配項對應(yīng)關(guān)鍵詞的匹配條件,稱當(dāng)前棧點為當(dāng)前匹配棧點,當(dāng)前棧點作為所述某個匹配項的匹配起點,所述當(dāng)前棧點內(nèi)容除去所述某個匹配項對應(yīng)關(guān)鍵詞后的內(nèi)容以及往下遍歷的棧點內(nèi)容作為所述某個匹配項的匹配內(nèi)容,直到遇到下一匹配棧點時,所述下一匹配棧點的上一棧點作為所述某個匹配項的匹配終點。
優(yōu)選地,步驟S2中所述分段識別符為根據(jù)所述文本內(nèi)容中特定的分隔符轉(zhuǎn)換得到;其中,所述分隔符包括回車符、空格、html標(biāo)簽中的一種或幾種。
優(yōu)選地,步驟S3中對所述原始內(nèi)容堆棧的棧點內(nèi)容進(jìn)行如下處理,包括以下步驟:
S31、從當(dāng)前棧底開始,依次取出所述原始內(nèi)容堆棧的棧點內(nèi)容,作為當(dāng)前棧點內(nèi)容;
S32、判斷所述當(dāng)前棧點內(nèi)容是否滿足關(guān)鍵詞的匹配條件,若滿足,執(zhí)行步驟S33,且執(zhí)行步驟S33后返回步驟S31,繼續(xù)提取下一棧點內(nèi)容;若不滿足,執(zhí)行步驟S34,且執(zhí)行步驟S34后返回步驟S31,繼續(xù)提取下一棧點內(nèi)容;
S33、判斷臨時堆棧是否為空,若是,則在所述臨時堆棧棧頂新建第一臨時棧點,將所述當(dāng)前棧點內(nèi)容移入所述第一臨時棧點;若否,則先在結(jié)果堆棧棧頂新建第一結(jié)果棧點,將臨時堆棧的棧頂內(nèi)容移出并移入所述第一結(jié)果棧點,再在臨時堆棧棧頂新建第二臨時棧點,將所述當(dāng)前棧點內(nèi)容移入所述第二臨時棧點;
S34、判斷臨時堆棧是否為空,若否,則將所述當(dāng)前棧點內(nèi)容移入臨時堆棧的棧頂棧點;
重復(fù)上述步驟S31~S34,直至原始內(nèi)容堆棧中所有棧點內(nèi)容處理完成。
優(yōu)選地,步驟S3中,通過將所述當(dāng)前棧點內(nèi)容與預(yù)設(shè)的關(guān)鍵詞庫進(jìn)行比較來判斷所述當(dāng)前棧點內(nèi)容是否滿足關(guān)鍵詞的匹配條件;所述關(guān)鍵詞庫包括與所述原始文檔匹配項相關(guān)的關(guān)鍵詞。
優(yōu)選地,所述關(guān)鍵詞庫中每一類關(guān)鍵詞具有對應(yīng)的關(guān)鍵詞類型,所述關(guān)鍵詞類型包括單棧匹配類、二棧匹配類、多棧匹配類、內(nèi)容匹配類和排除匹配類;
相應(yīng)地,步驟S3中對所述原始內(nèi)容堆棧的棧點內(nèi)容進(jìn)行的處理,包括以下步驟:
S31、從當(dāng)前棧底開始,依次取出所述原始內(nèi)容堆棧的棧點內(nèi)容,作為當(dāng)前棧點內(nèi)容;
S32、將所述當(dāng)前棧點內(nèi)容與關(guān)鍵詞庫進(jìn)行比較,判斷所述當(dāng)前棧點內(nèi)容是否滿足關(guān)鍵詞的匹配條件,若滿足,則返回所述當(dāng)前棧點內(nèi)容以及所述當(dāng)前棧點內(nèi)容包括的關(guān)鍵詞類型,執(zhí)行步驟S33,且執(zhí)行步驟S33后返回步驟S31,繼續(xù)提取下一棧點內(nèi)容;若不滿足,返回所述當(dāng)前棧點內(nèi)容,執(zhí)行步驟S34,且執(zhí)行步驟S34后返回步驟S31,繼續(xù)提取下一棧點內(nèi)容;
S33、包括以下步驟:
S331、如果返回的關(guān)鍵詞類型包括排除匹配類,則返回步驟S31,繼續(xù)提取 下一棧點內(nèi)容;
S332、如果返回的關(guān)鍵詞類型包括內(nèi)容匹配類,則在結(jié)果堆棧棧頂新建第二結(jié)果棧點,將所述當(dāng)前棧點內(nèi)容和所述內(nèi)容匹配類關(guān)鍵詞對應(yīng)的匹配項一起移入所述第二結(jié)果棧點;
S333、判斷臨時堆棧是否為空,若為空,執(zhí)行步驟S334,若不為空,執(zhí)行步驟S335;
S334、根據(jù)返回的關(guān)鍵詞類型進(jìn)行如下處理:
1)如果返回的關(guān)鍵詞類型包含單棧匹配類,則在結(jié)果堆棧棧頂新建第三結(jié)果棧點,將所述當(dāng)前棧點內(nèi)容和所述單棧匹配類關(guān)鍵詞對應(yīng)的匹配項一起移入所述第三結(jié)果棧點;
2)如果返回的關(guān)鍵詞類型包含二棧匹配類或多棧匹配類,則在臨時堆棧棧頂新建第三臨時棧點,將所述當(dāng)前棧點內(nèi)容移入所述第三臨時棧點;
S335、如果臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型是多棧匹配類且返回的關(guān)鍵詞類型包含單棧匹配類、二棧匹配類或內(nèi)容匹配類中的一種或幾種,執(zhí)行步驟S335-1;否則,執(zhí)行步驟S335-2;
S335-1、首先,將所述當(dāng)前棧點內(nèi)容移入臨時堆棧的棧頂棧點;然后,
如果返回的關(guān)鍵詞類型包含單棧匹配類,則在結(jié)果堆棧棧頂新建第四結(jié)果棧點,將所述當(dāng)前棧點內(nèi)容和所述單棧匹配類關(guān)鍵詞對應(yīng)的匹配項一起移入所述第四結(jié)果棧點;
如果返回的關(guān)鍵詞類型包含二棧匹配類或內(nèi)容匹配類中的一種或兩種,則在臨時堆棧棧頂新建第四臨時棧點,將所述當(dāng)前棧點內(nèi)容移入所述第四臨時棧點;
S335-2、在結(jié)果堆棧棧頂新建第五結(jié)果棧點,臨時堆棧的棧頂內(nèi)容移出后和臨時堆棧的棧頂內(nèi)容關(guān)鍵詞對應(yīng)的匹配項一起移入所述第五結(jié)果棧點,在臨時堆棧棧頂新建第五臨時棧點,將所述當(dāng)前棧點內(nèi)容移入所述第五臨時棧點;
S34、判斷臨時堆棧是否為空,若否,根據(jù)臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型進(jìn)行處理,包括以下情形:
1)若臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型是單棧匹配類或者包括的關(guān)鍵詞 類型是二棧匹配類且臨時堆棧棧頂?shù)脑貍€數(shù)不小于2時,判斷臨時堆棧棧頂下一個棧點內(nèi)容包括的關(guān)鍵詞類型是否為多棧匹配類,
若是,則將所述當(dāng)前棧點內(nèi)容移入臨時堆棧棧頂?shù)南乱粋€棧點;
2)若臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型是二棧匹配類且臨時堆棧棧頂?shù)脑貍€數(shù)小于2,則將所述當(dāng)前棧點內(nèi)容移入臨時堆棧的棧頂棧點;
3)若臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型是多棧匹配類,則將所述當(dāng)前棧點內(nèi)容移入臨時堆棧的棧頂棧點;
循環(huán)上述步驟S31~S34,直至原始內(nèi)容堆棧中所有棧點內(nèi)容處理完成。
優(yōu)選地,在步驟S3之后還包括步驟S4,對所述結(jié)果堆棧的棧點內(nèi)容進(jìn)行處理得到解析結(jié)果,包括以下步驟:從當(dāng)前棧底開始,依次取出所述結(jié)果堆棧的棧點內(nèi)容,作為當(dāng)前結(jié)果棧點內(nèi)容,對所述當(dāng)前結(jié)果棧點內(nèi)容進(jìn)行如下處理:
如果所述當(dāng)前結(jié)果棧點內(nèi)容包括的關(guān)鍵詞類型是單棧匹配類或二棧匹配類,則將所述當(dāng)前結(jié)果棧點內(nèi)容覆蓋對應(yīng)匹配項已獲取到的匹配內(nèi)容;
如果所述當(dāng)前結(jié)果棧點內(nèi)容包括的關(guān)鍵詞類型是多棧匹配類,則將所述當(dāng)前結(jié)果棧點內(nèi)容合并至對應(yīng)匹配項已獲取到的匹配內(nèi)容。
優(yōu)選地,在判斷所述當(dāng)前棧點內(nèi)容是否包含關(guān)鍵詞之前,還包括判斷所述當(dāng)前棧點內(nèi)容是否為姓名,包含以下步驟:
Sa、判斷所述當(dāng)前棧點內(nèi)容的字符個數(shù)是否不小于2且不大于4,若是,執(zhí)行步驟Sb;
Sb、若所述當(dāng)前棧點內(nèi)容的第1個字符或第1~2個字符存在于預(yù)設(shè)的姓氏庫中且不存在于預(yù)設(shè)的排除庫中,則判斷所述當(dāng)前棧點內(nèi)容為姓名。
優(yōu)選地,在步驟S1和步驟S2之間還包括步驟:對所述文本內(nèi)容進(jìn)行整理,包括以下方式中的一種或幾種:去除文本內(nèi)容中無關(guān)信息內(nèi)容;恢復(fù)文本內(nèi)容中被轉(zhuǎn)換過的字符;將文本內(nèi)容中滿足關(guān)鍵詞匹配條件的文字中的分隔符去掉。
優(yōu)選地,所述原始文檔為簡歷文檔。
本發(fā)明還提出一種文檔解析裝置,包括內(nèi)容提取模塊、內(nèi)容入棧模塊和內(nèi)容解析模塊;其中,
所述內(nèi)容提取模塊,用于從原始文檔中提取文本內(nèi)容;
所述內(nèi)容入棧模塊,用于根據(jù)分段識別符對所述文本內(nèi)容進(jìn)行分段,將分段 后的所述文本內(nèi)容放入原始內(nèi)容堆棧;
所述內(nèi)容解析模塊,用于依次取出所述原始內(nèi)容堆棧的棧點內(nèi)容,作為當(dāng)前棧點內(nèi)容;若所述當(dāng)前棧點內(nèi)容滿足某個匹配項對應(yīng)關(guān)鍵詞的匹配條件,稱當(dāng)前棧點為當(dāng)前匹配棧點,當(dāng)前棧點作為所述某個匹配項的匹配起點,所述當(dāng)前棧點內(nèi)容除去所述某個匹配項對應(yīng)關(guān)鍵詞后的內(nèi)容以及往下遍歷的棧點內(nèi)容作為所述某個匹配項的匹配內(nèi)容,直到遇到下一匹配棧點時,所述下一匹配棧點的上一棧點作為所述某個匹配項的匹配終點。
本發(fā)明提出的文檔解析方法和裝置從文本的閱讀思維以及文字結(jié)構(gòu)上尋找更加通用的內(nèi)容結(jié)構(gòu)規(guī)律,并且從適用于所有的文檔解析為出發(fā)點,在一定程度上解決了文檔解析的現(xiàn)有問題。以挖掘通用的內(nèi)容規(guī)律(不僅僅只是簡歷內(nèi)容規(guī)律,而是通用文檔內(nèi)容規(guī)律)為出發(fā)點,能適應(yīng)多種格式文檔的內(nèi)容解析,并且減少人工維護(hù)工作量,保證較高的文檔解析精確度。
附圖說明
圖1是本發(fā)明具體實施方式一的文檔解析流程圖。
具體實施方式
下面結(jié)合具體實施方式并對照附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。應(yīng)該強(qiáng)調(diào)的是,下述說明僅僅是示例性的,而不是為了限制本發(fā)明的范圍及其應(yīng)用。
實施例一:
本發(fā)明提出一種文檔解析方法,用于將包括若干匹配關(guān)系的原始文檔進(jìn)行解析,這里的匹配關(guān)系指原始文檔中某部分內(nèi)容為某個匹配項對應(yīng)的匹配內(nèi)容,參見圖1是本發(fā)明具體實施方式一的文檔解析流程圖,包括以下步驟:
S1、從原始文檔中提取文本內(nèi)容;
本發(fā)明的實施例不對原始文檔的格式進(jìn)行限制,可以是doc、docx、wps、txt、mht、html、htm、pdf中任一種或是其他常見格式類型,也不對提取得到的文本內(nèi)容格式進(jìn)行不限制,可以是html格式內(nèi)容、純文本內(nèi)容或base64位編碼內(nèi)容中任一種或是其他常見格式類型。
S2、根據(jù)預(yù)設(shè)的分段識別符對文本內(nèi)容進(jìn)行分段,將分段后的文本內(nèi)容放入 原始內(nèi)容堆棧,原始內(nèi)容堆棧的一個棧點存放一段內(nèi)容;其中,分段識別符根據(jù)文本內(nèi)容中特定的分隔符轉(zhuǎn)換得到。并且,初始化臨時堆棧和結(jié)果堆棧。
S3、依次取出原始內(nèi)容堆棧的棧點內(nèi)容,作為當(dāng)前棧點內(nèi)容;若當(dāng)前棧點內(nèi)容滿足某個匹配項對應(yīng)關(guān)鍵詞的匹配條件,稱當(dāng)前棧點為當(dāng)前匹配棧點,當(dāng)前棧點作為某個匹配項的匹配起點,當(dāng)前棧點內(nèi)容除去該某個匹配項對應(yīng)關(guān)鍵詞后的內(nèi)容以及往下遍歷的棧點內(nèi)容作為該某個匹配項的匹配內(nèi)容,直到遇到下一匹配棧點時,下一匹配棧點的上一棧點作為該某個匹配項的匹配終點;即將當(dāng)前棧點內(nèi)容去除該某個匹配項對應(yīng)關(guān)鍵詞后的內(nèi)容該與當(dāng)前匹配棧點至下一匹配棧點之間的內(nèi)容一起作為某個匹配項對應(yīng)的匹配內(nèi)容。其中,當(dāng)前匹配棧點的下一匹配棧點指的是當(dāng)前棧點之后第一個滿足另一個匹配項對應(yīng)關(guān)鍵詞匹配條件的棧點內(nèi)容。
具體地,包括以下步驟:
S31、從當(dāng)前棧底開始,依次取出原始內(nèi)容堆棧的棧點內(nèi)容,作為當(dāng)前棧點內(nèi)容;
S32、判斷當(dāng)前棧點內(nèi)容是否滿足關(guān)鍵詞的匹配條件,若滿足,執(zhí)行步驟S33,且執(zhí)行步驟S33后返回步驟S31,繼續(xù)提取下一棧點內(nèi)容;若不滿足,執(zhí)行步驟S34,且執(zhí)行步驟S34后返回步驟S31,繼續(xù)提取下一棧點內(nèi)容;
S33、判斷臨時堆棧是否為空,若是,則在臨時堆棧棧頂新建第一臨時棧點,將當(dāng)前棧點內(nèi)容移入該第一臨時棧點的內(nèi)容數(shù)組中;若否,則先在結(jié)果堆棧棧頂新建第一結(jié)果棧點,將臨時堆棧的棧頂內(nèi)容移出并移入該第一結(jié)果棧點的內(nèi)容數(shù)組中,再在臨時堆棧棧頂新建第二臨時棧點,將當(dāng)前棧點內(nèi)容移入該第二臨時棧點的內(nèi)容數(shù)組中;
S34、判斷臨時堆棧是否為空,若是,則認(rèn)為當(dāng)前棧點內(nèi)容為無效內(nèi)容,將當(dāng)前棧點內(nèi)容移入回收堆棧;若否,則將當(dāng)前棧點內(nèi)容移入臨時堆棧棧頂?shù)膬?nèi)容數(shù)組中;
重復(fù)上述步驟S31~S34,直至原始內(nèi)容堆棧中所有棧點內(nèi)容處理完成。
本發(fā)明提出的文檔解析方法與裝置從文本的閱讀思維以及文字結(jié)構(gòu)上尋找 到了更為通用的內(nèi)容結(jié)構(gòu)規(guī)律,以順序遍歷堆棧內(nèi)容為原則,可以兼容多種無固定內(nèi)容格式的文檔,很精準(zhǔn)地把內(nèi)容匹配到對應(yīng)的內(nèi)容項里。且本文檔解析方法是一個獨立的程序,不需要其他額外程序的支撐,減少人工維護(hù)工作量。
實施例二:
本發(fā)明還提出一種簡歷文檔解析方法,用于將包括若干匹配關(guān)系的原始文檔進(jìn)行解析,這里的匹配關(guān)系指原始文檔中某部分內(nèi)容為某匹配項對應(yīng)的匹配內(nèi)容,如簡歷文檔中的“姓名”、“性別”、“居住地”等為匹配項,“張三”、“男”、“深圳”分別為上述匹配項對應(yīng)的匹配內(nèi)容,包括以下步驟:
S1、從原始文檔中提取文本內(nèi)容;
本發(fā)明的實施例不對原始文檔的格式進(jìn)行限制,可以是doc、docx、wps、txt、mht、html、htm、pdf中任一種或是其他常見格式類型,也不對提取得到的文本內(nèi)容格式進(jìn)行不限制,可以是html格式內(nèi)容、純文本內(nèi)容或base64位編碼內(nèi)容中任一種或是其他常見格式類型。
S2、對文本內(nèi)容進(jìn)行整理,得到有效內(nèi)容;包括以下方式中的一種或幾種:
1)去除無關(guān)信息內(nèi)容,如html的style樣式代碼、js腳本代碼或其他編程語言代碼等;
2)恢復(fù)被轉(zhuǎn)換過的字符,如將“ ;”轉(zhuǎn)換為空格符,“";”轉(zhuǎn)換為“\”,“<;”轉(zhuǎn)換為“<”,“>;”轉(zhuǎn)換為“>”等;
3)將滿足關(guān)鍵詞匹配條件的文字中的分隔符去掉,如將“姓名”、“姓-名”中間的空格或者其他字符去掉轉(zhuǎn)換為“姓名”。
S3、給文本內(nèi)容添加分段識別符。在本發(fā)明的一個實施例中,將文本內(nèi)容中的回車符、空格、html標(biāo)簽等轉(zhuǎn)換為分段識別符。比如,文本內(nèi)容中有一行內(nèi)容為:“公司名稱:深圳市XX公司職位:開發(fā)工程師”,由于空格前后的內(nèi)容分別是一對完整的匹配關(guān)系,在本步驟中,將空格用自定義的分段標(biāo)識符如“##”代替,因此,該行內(nèi)容更改為:“公司名稱:深圳市XX公司##職位:開發(fā)工程師”。由于本方案的目的在于分割匹配關(guān)系,通過上述內(nèi)容分段方式,可以提高 文檔解析效率。
根據(jù)分段識別符對整理后的文本內(nèi)容進(jìn)行分段,將分段后的文本內(nèi)容放入原始內(nèi)容堆棧,原始內(nèi)容堆棧的一個棧點存放一段內(nèi)容。并且,初始化臨時堆棧、結(jié)果堆棧和回收堆棧。
S4、通過將當(dāng)前棧點內(nèi)容與預(yù)設(shè)的關(guān)鍵詞庫進(jìn)行比較,判斷當(dāng)前棧點內(nèi)容是否滿足關(guān)鍵詞的匹配條件。
上述關(guān)鍵詞庫列舉了與原始文檔匹配項相關(guān)的關(guān)鍵詞,如關(guān)鍵詞包括:性別、男、大學(xué)、年齡、工作經(jīng)歷、工作經(jīng)驗、年工作經(jīng)驗等。一個匹配項可以對應(yīng)多個關(guān)鍵詞,如匹配項“工作經(jīng)驗”對應(yīng)關(guān)鍵詞工作經(jīng)歷、工作經(jīng)驗,而匹配項“名字”對應(yīng)的關(guān)鍵詞:名字、姓名,這樣可以提高匹配效率。進(jìn)一步地,關(guān)鍵詞庫中的關(guān)鍵詞可以分為不同類型,每一類關(guān)鍵詞具有對應(yīng)的關(guān)鍵詞類型,本發(fā)明的實施例中,定義如下關(guān)鍵詞類型:單棧匹配類、二棧匹配類、多棧匹配類、內(nèi)容匹配類和排除匹配類。
其中,若當(dāng)前棧點內(nèi)容包含某個單棧匹配類的關(guān)鍵詞時,該當(dāng)前棧點內(nèi)容去除關(guān)鍵詞后的內(nèi)容即包含某個匹配項的匹配內(nèi)容。單棧匹配類又可分為:純文字單棧匹配類、正則單棧匹配類和數(shù)組型單棧匹配類等。當(dāng)當(dāng)前棧點內(nèi)容包含純文字單棧匹配類時,該當(dāng)前棧點內(nèi)容的至少部分內(nèi)容與某個匹配項對應(yīng)的關(guān)鍵詞是一致的,如,定義匹配項“工作年限”對應(yīng)的關(guān)鍵詞“年工作經(jīng)驗”為純文字單棧匹配類,若當(dāng)前棧點內(nèi)容包括“5年工作經(jīng)驗”,即可得到匹配項“工作年限”的匹配內(nèi)容“5”;若當(dāng)前棧點內(nèi)容滿足正則單棧匹配類關(guān)鍵詞的匹配條件時,該當(dāng)前棧點內(nèi)容與該正則單棧匹配類關(guān)鍵詞匹配的部分為某個匹配項對應(yīng)的匹配內(nèi)容,如,定義匹配項“手機(jī)號”的關(guān)鍵詞“/1[0-9]{10}|1[0-9]{2}\s[0-9]{4}\s[0-9]{4}/is”為正則單棧匹配類,如當(dāng)前棧點內(nèi)容包括“13732966916”,即可得到匹配項“手機(jī)號”的匹配內(nèi)容“13732966916”;數(shù)組型單棧匹配類表示匹配內(nèi)容是可完全羅列的,如,定義匹配項“性別”的關(guān)鍵詞“男”和“女”為數(shù)組型單棧匹配類,若當(dāng)前棧點內(nèi)容包括“女”,即可得到匹配項“性別”的匹配內(nèi)容“女”。
若當(dāng)前棧點內(nèi)容包含某個二棧匹配類關(guān)鍵詞時,若當(dāng)前棧點下一棧點內(nèi)容包含某個匹配項對應(yīng)的關(guān)鍵詞時,將當(dāng)前棧點內(nèi)容除去關(guān)鍵詞后的內(nèi)容作為該匹配項對應(yīng)的匹配內(nèi)容,若當(dāng)前棧點下一棧點內(nèi)容不包含任一個匹配項對應(yīng)的關(guān)鍵詞時,當(dāng)前棧點內(nèi)容除去關(guān)鍵詞后的內(nèi)容加上當(dāng)前棧點下一棧點的內(nèi)容為該匹配項對應(yīng)的匹配內(nèi)容,如定義“姓名”、“性別”、“籍貫”、“身高”、“政治面貌”、“婚姻狀況”等為二棧匹配類關(guān)鍵詞。
若當(dāng)前棧點內(nèi)容包含某個多棧匹配類的關(guān)鍵詞時,則在當(dāng)前棧點以下的棧點繼續(xù)尋找,直到某個棧點內(nèi)容包含另一個多棧匹配類的關(guān)鍵詞,則將該某個棧點上面的棧點至當(dāng)前棧點的內(nèi)容除去當(dāng)前棧點的關(guān)鍵詞后的內(nèi)容,作為該某個多棧匹配類關(guān)鍵詞對應(yīng)匹配項的匹配內(nèi)容,該匹配內(nèi)容中含有至少一個分段識別符,匹配內(nèi)容可以包含若干個其他的匹配項對應(yīng)的關(guān)鍵詞,如定義“工作經(jīng)驗”、“學(xué)習(xí)經(jīng)歷”為多棧匹配類關(guān)鍵詞。
內(nèi)容匹配類表示當(dāng)前棧點內(nèi)容去除關(guān)鍵詞后的內(nèi)容即包含某個匹配項的匹配內(nèi)容,與單棧匹配類不同的是,單棧匹配類可做為臨時堆棧棧頂棧點的結(jié)束條件,而內(nèi)容匹配類不作為臨時堆棧棧頂棧點結(jié)束的條件。如定義“/(.*?)(大學(xué)|學(xué)院)/is”為內(nèi)容匹配類關(guān)鍵詞。
排除匹配類的關(guān)鍵詞包含其他某個匹配項對應(yīng)的某個關(guān)鍵詞,當(dāng)前棧點內(nèi)容包含某個排除匹配類的關(guān)鍵詞,需將當(dāng)前棧點內(nèi)容視為無效內(nèi)容,在解析時不予處理,因為當(dāng)前棧點內(nèi)容可能會和其他某些匹配項沖突,如定義“不顯示職位月薪范圍”為排除匹配類關(guān)鍵詞,匹配項“月薪”對應(yīng)的關(guān)鍵詞為“月薪”,由于“不顯示職位月薪范圍”中帶有關(guān)鍵詞“月薪”,在處理時可能引起誤解析。
具體地,S4包括以下步驟:
S41、從當(dāng)前棧底開始,依次取出原始內(nèi)容堆棧的棧點內(nèi)容,作為當(dāng)前棧點內(nèi)容;
S42、將當(dāng)前棧點內(nèi)容與關(guān)鍵詞庫進(jìn)行比較,判斷當(dāng)前棧點內(nèi)容是否滿足關(guān)鍵詞的匹配條件,若滿足,則返回當(dāng)前棧點內(nèi)容以及當(dāng)前棧點內(nèi)容包括的關(guān)鍵詞類型,執(zhí)行步驟S43,且執(zhí)行步驟S43后返回步驟S41,繼續(xù)提取下一棧點內(nèi)容; 若不滿足,返回所述當(dāng)前棧點內(nèi)容,執(zhí)行步驟S44,且執(zhí)行步驟S44后返回步驟S41,繼續(xù)提取下一棧點內(nèi)容;
S43、包括以下步驟:
S431、如果返回的關(guān)鍵詞類型包括排除匹配類,則返回步驟S41,繼續(xù)提取下一棧點內(nèi)容;
S432、如果返回的關(guān)鍵詞類型包括內(nèi)容匹配類,則在結(jié)果堆棧棧頂新建第二結(jié)果棧點,將當(dāng)前棧點內(nèi)容和該內(nèi)容匹配類關(guān)鍵詞對應(yīng)的匹配項一起移入該第二結(jié)果棧點的內(nèi)容數(shù)組;
S433、判斷臨時堆棧是否為空,若為空,執(zhí)行步驟S434,若不為空,執(zhí)行步驟S435;
S434、根據(jù)返回的關(guān)鍵詞類型進(jìn)行如下處理:
1)如果返回的關(guān)鍵詞類型包含單棧匹配類,則在結(jié)果堆棧棧頂新建第三結(jié)果棧點,將當(dāng)前棧點內(nèi)容和該單棧匹配類關(guān)鍵詞對應(yīng)的匹配項一起移入該第三結(jié)果棧點的內(nèi)容數(shù)組;如當(dāng)前棧點內(nèi)容為“5年工作經(jīng)驗”,則將當(dāng)前棧點內(nèi)容和關(guān)鍵詞“年工作經(jīng)驗”對應(yīng)的匹配項“工作年限”一起移入該第三結(jié)果棧點的內(nèi)容數(shù)組;
2)如果返回的關(guān)鍵詞類型包含二棧匹配類或多棧匹配類,則在臨時堆棧棧頂新建第三臨時棧點,將當(dāng)前棧點內(nèi)容移入該第三臨時棧點的內(nèi)容數(shù)組;
S435、如果臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型是多棧匹配類且返回的關(guān)鍵詞類型包含單棧匹配類、二棧匹配類或內(nèi)容匹配類中的一種或幾種,執(zhí)行步驟S435-1;否則,執(zhí)行步驟S435-2;
S435-1、首先,將當(dāng)前棧點內(nèi)容移入臨時堆棧棧頂?shù)膬?nèi)容數(shù)組;然后,
如果返回的關(guān)鍵詞類型包含單棧匹配類,則在結(jié)果堆棧棧頂新建第四結(jié)果棧點,將當(dāng)前棧點內(nèi)容和該單棧匹配類關(guān)鍵詞對應(yīng)的匹配項一起移入該第四結(jié)果棧點的內(nèi)容數(shù)組;
如果返回的關(guān)鍵詞類型包含二棧匹配類或內(nèi)容匹配類中的一種或兩種,則在臨時堆棧棧頂新建第四臨時棧點,將當(dāng)前棧點內(nèi)容移入該第四臨時棧點的內(nèi)容數(shù) 組;
S435-2、在結(jié)果堆棧棧頂新建第五結(jié)果棧點,臨時堆棧的棧頂內(nèi)容移出后和臨時堆棧的棧頂內(nèi)容關(guān)鍵詞對應(yīng)的匹配項一起移入該第五結(jié)果棧點的內(nèi)容數(shù)組,在臨時堆棧棧頂新建第五臨時棧點,將當(dāng)前棧點內(nèi)容移入該第五臨時棧點的內(nèi)容數(shù)組;
S44、判斷臨時堆棧是否為空,若是,表明無法識別當(dāng)前棧點內(nèi)容所屬,則將當(dāng)前棧點內(nèi)容移入回收堆棧;若否,根據(jù)臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型進(jìn)行處理,包括以下情形:
1)若臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型是單棧匹配類或者二棧匹配類,且二棧匹配類對應(yīng)的內(nèi)容數(shù)組不小于2時,判斷臨時堆棧棧頂下一個棧點內(nèi)容包括的關(guān)鍵詞類型是否為多棧匹配類,
若是,則將當(dāng)前棧點內(nèi)容移入臨時堆棧棧頂?shù)南乱粋€棧點的內(nèi)容數(shù)組中,即將與臨時堆棧棧頂內(nèi)容無法匹配的當(dāng)前棧點內(nèi)容回溯到上一個多棧匹配類匹配項的匹配內(nèi)容中;
若否,則當(dāng)前棧點內(nèi)容為無效內(nèi)容,移入回收堆棧;
2)若臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型是二棧匹配類且對應(yīng)的內(nèi)容數(shù)組小于2,則將當(dāng)前棧點內(nèi)容移入臨時堆棧棧頂?shù)膬?nèi)容數(shù)組中,作為該二棧匹配類關(guān)鍵詞對應(yīng)匹配項的匹配內(nèi)容;
3)若臨時堆棧棧頂內(nèi)容包括的關(guān)鍵詞類型是多棧匹配類,則將當(dāng)前棧點內(nèi)容移入臨時堆棧棧頂?shù)膬?nèi)容數(shù)組中,作為該多棧匹配類關(guān)鍵詞對應(yīng)匹配項的新增匹配內(nèi)容;
循環(huán)上述步驟S41~S44,直至原始內(nèi)容堆棧中所有棧點內(nèi)容處理完成。
S5、對結(jié)果堆棧的棧點內(nèi)容進(jìn)行處理得到解析結(jié)果,包括以下步驟:從當(dāng)前棧底開始,依次取出結(jié)果堆棧的棧點內(nèi)容,作為當(dāng)前結(jié)果棧點內(nèi)容,對當(dāng)前結(jié)果棧點內(nèi)容進(jìn)行如下處理:
如果當(dāng)前結(jié)果棧點內(nèi)容包括的關(guān)鍵詞類型是單棧匹配類或二棧匹配類,則將當(dāng)前結(jié)果棧點內(nèi)容覆蓋對應(yīng)匹配項已獲取到的匹配內(nèi)容;
如果當(dāng)前結(jié)果棧點內(nèi)容包括的關(guān)鍵詞類型是多棧匹配類,則將當(dāng)前結(jié)果棧點 內(nèi)容合并至對應(yīng)匹配項已獲取到的匹配內(nèi)容。
舉例來說,原始堆棧中某棧點內(nèi)容為:“性別:男”,經(jīng)過解析,得到結(jié)果堆棧中包含有性別內(nèi)容的棧a)和棧b)分別為:
棧a):【sex】—>性別:男
棧b):【sex】—>男
對于棧a,結(jié)果堆棧會把“性別:”這個關(guān)鍵詞替換掉,最終變成:
棧a):【sex】—>男
這樣,棧a)和棧b)內(nèi)容相同,由于棧b)內(nèi)容比棧a)內(nèi)容后到,匹配項性別最終對應(yīng)的匹配內(nèi)容以棧b)為準(zhǔn)。
進(jìn)一步地,在步驟S42中將當(dāng)前棧點內(nèi)容與關(guān)鍵詞庫進(jìn)行比較前,還包括判斷當(dāng)前棧點內(nèi)容是否為姓名,包括以下步驟:
Sa、若當(dāng)前棧點內(nèi)容的字符個數(shù)是否不小于2且不大于4,若是,執(zhí)行步驟Sb;
Sb、判斷當(dāng)前棧點內(nèi)容的第1個字符或第1~2個字符是否存在于預(yù)設(shè)的姓氏庫中,若在預(yù)設(shè)的姓氏庫中,再判斷當(dāng)前棧點內(nèi)容是否存在于預(yù)設(shè)的排除庫中,若不存在于排除庫中,則判斷當(dāng)前棧點內(nèi)容為姓名,在結(jié)果堆棧棧頂新建第六結(jié)果棧點,將當(dāng)前棧點內(nèi)容和對應(yīng)的匹配項“姓名”一起移入該第六結(jié)果棧點的內(nèi)容數(shù)組。比如有人姓“簡”,但是簡歷就不是名字,“簡歷”就會在排除庫里面。
本發(fā)明提出的文檔解析方法大大提高了解析結(jié)果的精確率,多次實驗表明,本文檔解析方法的細(xì)分解析率可以達(dá)到90%以上,內(nèi)容解析準(zhǔn)確率85%以上,內(nèi)容丟失率為0%,幾乎不會出現(xiàn)因內(nèi)容解析不出來而導(dǎo)致內(nèi)容丟失的情況。且只需簡單設(shè)置和維護(hù)關(guān)鍵詞庫即可,無需專業(yè)的開發(fā)人才進(jìn)行維護(hù),大大減低維護(hù)成本。將本文檔解析方法應(yīng)用在簡歷解析領(lǐng)域時,用戶只需上傳簡歷文檔,系統(tǒng)即可智能地把簡歷文檔(word、htm、mht、pdf等非固定內(nèi)容格式的文檔)中姓名、居住地、工作經(jīng)驗、教育經(jīng)歷、技能等細(xì)分內(nèi)容分析出來,分析后的結(jié)果可錄入到人力資源的相關(guān)平臺或者系統(tǒng),以替代人工錄入,大大提升了工作效率和用戶體驗。
更進(jìn)一步地,還可以做批量文檔解析和系統(tǒng)導(dǎo)入,只需把大量的文檔打包成壓縮包,壓縮包內(nèi)也可以存在壓縮包。本文檔解析方法可自動對該壓縮包進(jìn)行解 壓、文檔遍歷、文檔解析、導(dǎo)入系統(tǒng)等一系列處理,大大提高了處理效率,降低了人工成本。
實施例三:
本發(fā)明提出一種文檔解析裝置,用于將具有特定格式的原始文檔進(jìn)行解析,這里的特定格式指包括匹配項和與匹配項對應(yīng)的匹配內(nèi)容,包括內(nèi)容提取模塊、內(nèi)容入棧模塊和內(nèi)容解析模塊;其中,
內(nèi)容提取模塊,用于從原始文檔中提取文本內(nèi)容;
內(nèi)容入棧模塊,用于根據(jù)分段識別符對文本內(nèi)容進(jìn)行分段,將分段后的文本內(nèi)容放入原始內(nèi)容堆棧,一個棧點存放一段內(nèi)容;
內(nèi)容解析模塊,用于依次取出原始內(nèi)容堆棧的棧點內(nèi)容,作為當(dāng)前棧點內(nèi)容;若當(dāng)前棧點內(nèi)容滿足某個匹配項對應(yīng)關(guān)鍵詞的匹配條件,稱當(dāng)前棧點為當(dāng)前匹配棧點,當(dāng)前棧點作為某個匹配項的匹配起點,當(dāng)前棧點內(nèi)容除去該某個匹配項對應(yīng)關(guān)鍵詞后的內(nèi)容以及往下遍歷的棧點內(nèi)容作為該某個匹配項的匹配內(nèi)容,直到遇到下一匹配棧點時,下一匹配棧點的上一棧點作為該某個匹配項的匹配終點。其中,當(dāng)前匹配棧點的下一匹配棧點指的是當(dāng)前棧點之后第一個滿足另一個匹配項對應(yīng)關(guān)鍵詞匹配條件的棧點內(nèi)容。
需要說明的是,上述裝置各模塊/單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構(gòu)思,其帶來的技術(shù)效果與本發(fā)明方法實施例相同,具體內(nèi)容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。
本領(lǐng)域技術(shù)人員將認(rèn)識到,對以上描述做出眾多變通是可能的,所以實施例僅是用來描述一個或多個特定實施方式。
盡管已經(jīng)描述和敘述了被看作本發(fā)明的示范實施例,本領(lǐng)域技術(shù)人員將會明白,可以對其作出各種改變和替換,而不會脫離本發(fā)明的精神。另外,可以做出許多修改以將特定情況適配到本發(fā)明的教義,而不會脫離在此描述的本發(fā)明中心概念。所以,本發(fā)明不受限于在此披露的特定實施例,但本發(fā)明可能還包括屬于本發(fā)明范圍的所有實施例及其等同物。