本發(fā)明涉及一種日期提取方法,特別是針對(duì)電子單據(jù)的日期提取方法;本發(fā)明還涉及一種用于實(shí)現(xiàn)該提取方法的裝置。
背景技術(shù):
電子單據(jù)在企業(yè)信息化過(guò)程中逐步替代紙質(zhì)單據(jù),成為業(yè)務(wù)數(shù)據(jù)傳遞、業(yè)務(wù)審核的重要媒介。電子單據(jù)的錄入和審核,以及基于電子單據(jù)的數(shù)據(jù)分析是財(cái)務(wù)管理軟件的重要組成部分。用戶在應(yīng)用財(cái)務(wù)管理軟件的過(guò)程中積累了大量可供分析的電子單據(jù)數(shù)據(jù)。
用戶在使用財(cái)務(wù)管理軟件錄入電子單據(jù)時(shí),常常需要填寫(xiě)業(yè)務(wù)發(fā)生日期。在某些財(cái)務(wù)管理軟件中,用戶填寫(xiě)的業(yè)務(wù)發(fā)生日期是以文本方式記錄的,而不是以標(biāo)準(zhǔn)的日期格式記錄,這就導(dǎo)致用戶進(jìn)行數(shù)據(jù)分析時(shí),很難從文本中提取出日期,無(wú)法利用文本中的業(yè)務(wù)發(fā)生日期這一關(guān)鍵信息。
同時(shí),由于電子單據(jù)錄入的場(chǎng)景有其特殊性,比如日期表達(dá)形式多樣,日期不完整,比如僅含年月日三個(gè)數(shù)據(jù)中的一個(gè)或兩個(gè),又或者為常包含中文數(shù)字(如“九月”)等,這給日期識(shí)別和提取帶來(lái)了新的挑戰(zhàn)。
然而,現(xiàn)有針對(duì)文本的數(shù)據(jù)提取方法中,主要針對(duì)其他領(lǐng)域的文本提取,比如在搜索引擎使用,或者其他數(shù)據(jù)識(shí)別中使用。因此,現(xiàn)有提取日期的方法主要針對(duì)完整且格式規(guī)范的日期表達(dá)式,而對(duì)于不完整日期,比如:缺少年月日三個(gè)數(shù)據(jù)中的一個(gè)或兩個(gè),例如“8月1日”、中文數(shù)字日期,例如“九月”、相對(duì)日期,例如“上個(gè)月”、時(shí)間段例如“2014年8月到10月”,則缺乏識(shí)別能力。若直接根據(jù)現(xiàn)有的提取技術(shù)對(duì)上述文字進(jìn)行提取,只能提取出相應(yīng)的文字內(nèi)容,無(wú)法進(jìn)行智能識(shí)別其對(duì)應(yīng)的實(shí)際的日期。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供一種從文本中智能提取日期的方法及裝置。
本發(fā)明是通過(guò)以下的技術(shù)方案實(shí)現(xiàn)的:一種從文本中智能提取日期的方法,其包括以下步驟:
步驟1:獲取將要從中提取日期的文本和單據(jù)填寫(xiě)日期;
步驟2:對(duì)文本作預(yù)處理,將文本中出現(xiàn)的日期轉(zhuǎn)換為規(guī)范形式的日期;
步驟3:構(gòu)造正則表達(dá)式,并利用正則表達(dá)式對(duì)文本中的日期表達(dá)式進(jìn)行匹配,從中提取出符合正則表達(dá)式格式的日期表達(dá)式;
步驟4:針對(duì)不同格式的日期表達(dá)式,分別提取出其中的年、月、日數(shù)字;
步驟5:借助填單日期,補(bǔ)全文本中缺失的年份或月份數(shù)據(jù);
步驟6:將識(shí)別出的年、月、日數(shù)字組合成完整的日期,并以日期格式存儲(chǔ)。
作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟2中具體包括以下步驟:
步驟21:將“月份”、“號(hào)”分別用正則表達(dá)式匹配,匹配到之后轉(zhuǎn)換為“月”,“日”;
步驟22:根據(jù)文本中出現(xiàn)與填單日期具有關(guān)聯(lián)關(guān)系的日期表達(dá)形式,計(jì)算出對(duì)應(yīng)的日期;
步驟23:將中文表達(dá)的數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字。
作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟22中與填單日期相關(guān)聯(lián)的表達(dá)式包括:“本年”、“本年度”、“去年”、“上一年”、“明年”、“下一年”、“當(dāng)月”、“下個(gè)月”、“本月”,當(dāng)匹配到上述日期表達(dá)形式之后,結(jié)合填單日期計(jì)算出對(duì)應(yīng)日期。
作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟3中,當(dāng)根據(jù)正則表達(dá)式對(duì)對(duì)文本中日期匹配成功后,提取匹配到的日期表達(dá)字段,并將該匹配到的字段刪除。
作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟5中,在補(bǔ)全缺失的年份和月份數(shù)據(jù)時(shí),其補(bǔ)全日期的依據(jù)包括根據(jù)取填單日期所在年份和月份,和/或根據(jù)與取填單日期具備關(guān)聯(lián)關(guān)系的年份或月份。
本發(fā)明還提供了一種從文本中智能提取日期的裝置,其包括:
獲取模塊,用于獲取將要從中提取日期的文本和單據(jù)填寫(xiě)日期;
預(yù)處理模塊,用于將文本中出現(xiàn)的日期轉(zhuǎn)換為規(guī)范形式的日期;
匹配模塊,用于構(gòu)造正則表達(dá)式,并利用正則表達(dá)式對(duì)文本中的日期表達(dá)式進(jìn)行匹配,從中提取出符合正則表達(dá)式格式的日期表達(dá)式;
提取模塊,用于針對(duì)不同格式的日期表達(dá)式,分別提取出其中的年、月、日數(shù)字;
日期補(bǔ)全模塊,用于借助填單日期,補(bǔ)全文本中缺失的年份或月份數(shù)據(jù);
儲(chǔ)存模塊,用于將識(shí)別出的年、月、日數(shù)字組合成完整的日期,并以日期格式存儲(chǔ)。
作為本發(fā)明的進(jìn)一步改進(jìn),所述預(yù)處理模塊包括:
第一預(yù)處理子模塊,用于將“月份”、“號(hào)”分別用正則表達(dá)式匹配,匹配到之后轉(zhuǎn)換為“月”,“日”;
第二預(yù)處理子模塊,用于根據(jù)文本中出現(xiàn)與填單日期具有關(guān)聯(lián)關(guān)系的日期表達(dá)形式,計(jì)算出對(duì)應(yīng)的日期;
第三預(yù)處理子模塊,用于將中文表達(dá)的數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字。
作為本發(fā)明的進(jìn)一步改進(jìn),所述第二預(yù)處理子模塊中與填單日期相關(guān)聯(lián)的表達(dá)式包括:“本年”、“本年度”、“去年”、“上一年”、“明年”、“下一年”、“當(dāng)月”、“下個(gè)月”、“本月”,當(dāng)匹配到上述日期表達(dá)形式之后,結(jié)合填單日期計(jì)算出對(duì)應(yīng)日期。
作為本發(fā)明的進(jìn)一步改進(jìn),所述匹配模塊根據(jù)正則表達(dá)式對(duì)對(duì)文本中日期匹配成功后,提取匹配到的日期表達(dá)字段,并將該匹配到的字段刪除。
作為本發(fā)明的進(jìn)一步改進(jìn),所述日期補(bǔ)全模塊在補(bǔ)全缺失的年份和月份數(shù)據(jù)時(shí),其補(bǔ)全日期的依據(jù)包括根據(jù)取填單日期所在年份和月份,和/或根據(jù)與取填單日期具備關(guān)聯(lián)關(guān)系的年份或月份。
相比于現(xiàn)有技術(shù),具有以下有益效果:
1、本發(fā)明將以文本形式存儲(chǔ)在支出說(shuō)明中的業(yè)務(wù)發(fā)生日期,智能提取并轉(zhuǎn)換成可分析的日期格式。在此基礎(chǔ)上,可以對(duì)報(bào)銷單據(jù)按月份分類匯總,并作進(jìn)一步的財(cái)務(wù)支出分析,從而實(shí)現(xiàn)報(bào)銷成本的有效管理和控制,節(jié)約企業(yè)支出,提高企業(yè)利潤(rùn)。
2、本發(fā)明支持多種常見(jiàn)日期表達(dá)方式的識(shí)別,具體包括:(1)中文數(shù)字(2)相對(duì)年月(3)“xx月”、“xx月份“、“xx日”、“xx號(hào)”等。(4)范圍日期。(5)無(wú)年月日等關(guān)鍵字的數(shù)字日期:“20120809”、“2012-08-09”、“2012.08-2012.09“、”2012\08\09-2012\08\21“等。
3、通過(guò)本發(fā)明,用戶填寫(xiě)電子單據(jù)時(shí),可以按照自己習(xí)慣填寫(xiě)文本格式的日期,而不必拘泥于日期格式或者浪費(fèi)精力在點(diǎn)擊日期輸入表上,從而節(jié)約用戶時(shí)間,提升用戶體驗(yàn)。
為了更好地理解和實(shí)施,下面結(jié)合附圖詳細(xì)說(shuō)明本發(fā)明。
附圖說(shuō)明
圖1是本發(fā)明的從文本中智能提取日期的方法的流程圖。
圖2是本實(shí)施例中用正則表達(dá)式匹配文本的流程圖。
圖3是本發(fā)明的從文本中智能提取日期的裝置的框圖。
具體實(shí)施方式
為了解決現(xiàn)有技術(shù)中無(wú)法針對(duì)電子單據(jù)進(jìn)行日期提取的問(wèn)題,本發(fā)明提供了一種能夠從文本中智能提取日期的方法及裝置。以下具體介紹本發(fā)明的優(yōu)選的具體實(shí)施方式。
本發(fā)明提供了一種從文本中智能提取日期的方法,其包括以下步驟:
步驟s1:獲取將要從中提取日期的文本和單據(jù)填寫(xiě)日期。
步驟s2:對(duì)文本作預(yù)處理,將文本中出現(xiàn)的日期轉(zhuǎn)換為規(guī)范形式的日期。
進(jìn)一步,在本實(shí)施例中對(duì)所述步驟2中具體包括以下步驟:
步驟21:將“月份”、“號(hào)”分別用正則表達(dá)式匹配,匹配到之后轉(zhuǎn)換為“月”,“日”。
步驟22:根據(jù)文本中出現(xiàn)與填單日期具有關(guān)聯(lián)關(guān)系的日期表達(dá)形式,計(jì)算出對(duì)應(yīng)的日期。
具體的,在本步驟中與填單日期相關(guān)聯(lián)的表達(dá)式包括:“本年”、“本年度”、“去年”、“上一年”、“明年”、“下一年”、“當(dāng)月”、“下個(gè)月”、“本月”,當(dāng)匹配到上述日 期表達(dá)形式之后,結(jié)合填單日期計(jì)算出對(duì)應(yīng)日期。比如填單日期為“2012年8月”,則“本年”、“去年”、“當(dāng)月”、“下個(gè)月”分別轉(zhuǎn)換為“2012年”、“2011年”、“8月”、“9月”。
步驟23:將中文表達(dá)的數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字。例如從“一”到“三十一”的數(shù)字分別轉(zhuǎn)換為“1”到“31”,“零”轉(zhuǎn)換為“0”。
步驟s3:構(gòu)造正則表達(dá)式,并利用正則表達(dá)式對(duì)文本中的日期表達(dá)式進(jìn)行匹配,從中提取出符合正則表達(dá)式格式的日期表達(dá)式;
進(jìn)一步在本步驟中,當(dāng)根據(jù)正則表達(dá)式對(duì)對(duì)文本中日期匹配成功后,提取匹配到的日期表達(dá)字段,并將該匹配到的字段刪除,以防止重復(fù)匹配。
請(qǐng)參閱圖2,其為本實(shí)施例中用正則表達(dá)式匹配文本的流程圖。假設(shè)用戶根據(jù)需要構(gòu)造了n種正則表達(dá)式,用各種日期格式對(duì)應(yīng)的正則表達(dá)式依次匹配預(yù)處理之后的文本,若第n個(gè)正則表達(dá)式匹配成功,則進(jìn)入第n個(gè)正則表達(dá)式對(duì)應(yīng)的處理流程,處理完成后用第n+1個(gè)正則表達(dá)式匹配文本;若第n個(gè)正則表達(dá)式未匹配成功,則繼續(xù)用第n+1個(gè)正則表達(dá)式匹配文本。
步驟s4:針對(duì)不同格式的日期表達(dá)式,分別提取出其中的年、月、日數(shù)字。由于每一種匹配文本所用的正則表達(dá)式,其格式都是固定的,比如““xxxx年xx月”,其第一個(gè)純數(shù)字即為年份,第二個(gè)純數(shù)字則為月份,因此對(duì)此日期進(jìn)行數(shù)字匹配,即可將匹配到的數(shù)字按順序依次識(shí)別為年份和月份。
步驟s5:借助填單日期,補(bǔ)全文本中缺失的年份或月份數(shù)據(jù)。
具體的,在本步驟中,在補(bǔ)全缺失的年份和月份數(shù)據(jù)時(shí),其補(bǔ)全日期的依據(jù)包括根據(jù)取填單日期所在年份和月份,和/或根據(jù)與取填單日期具備關(guān)聯(lián)關(guān)系的年份或月份。
檢查匹配到的日期是否完整,如果完整則直接生成規(guī)范格式的日期,如果不完整則智能補(bǔ)全日期后再生成規(guī)范格式日期。根據(jù)不同的應(yīng)用場(chǎng)景,完整日期的定義可以不同,在分析財(cái)務(wù)報(bào)銷單據(jù)時(shí),一般要求年份和月份,而不要求具體到某日,因此本發(fā)明以包含年份和月份作為日期完整的判斷標(biāo)準(zhǔn)。本發(fā)明的使用者可以自行決定具體采用何種規(guī)范格式,本例采用“xxxx年xx月xx日”的格式,例如“2012年03月21日”。若匹配到的日期字段中缺失年或月,本發(fā)明將結(jié)合填單日期進(jìn)行智能補(bǔ)充,例如填單日期為“2012年10月10日”,匹配到的日期表達(dá)式為“9月8日”,則日期智能補(bǔ)充后結(jié)果為“2012年9月8日”。
對(duì)不同單據(jù),用于補(bǔ)充的年份和月份數(shù)據(jù)可能取填單日期所在年份和月份,也可能取填單日期的上一年、下一年、上一個(gè)月、下一個(gè)月,具體取決于單據(jù)類型以及填單日期與待補(bǔ)充日期的關(guān)聯(lián)關(guān)系。對(duì)于年份,補(bǔ)充規(guī)則為:若月份值<=“制單月份值+1”,則取制單日期 年份作為業(yè)務(wù)發(fā)生年份,否則取“制單日期年份-1”作為業(yè)務(wù)發(fā)生年份。例如填單日期為“2012年10月10日”,匹配到的日期表達(dá)式為“9月8日”,則日期智能補(bǔ)充后結(jié)果為“2012年9月8日”;再如填單日期為“2012年1月10日”,匹配到的日期表達(dá)式為“11月8日”,則日期智能補(bǔ)充后結(jié)果為“2011年11月8日”。
步驟s6:將識(shí)別出的年、月、日數(shù)字組合成完整的日期,并以日期格式存儲(chǔ)。
在本步驟中,本發(fā)明結(jié)合數(shù)據(jù)分析的需求,將重復(fù)日期合并,并將合并后的結(jié)果日期全部按統(tǒng)一的規(guī)范格式存儲(chǔ)。
進(jìn)一步,以下對(duì)本發(fā)明采用的日期匹配正則表達(dá)式進(jìn)行簡(jiǎn)單介紹,本實(shí)施例中采用了17種正則表達(dá)式,分別如下:
(1)pattern_date(0)="((19)?9[5-9]|(20)?[0-4][0-9])[年\--\./\\](1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))日?([至到~~]|\-+|-+)((19)?9[5-9]|(20)?[0-4][0-9])[年\--\./\\](1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))(日|(?![\d\--\./\\]))"
簡(jiǎn)介:xxxx[年--/.]xx[月--/.]xx[日](-/---/至/到/~~)xxxx[年--/.]xx[月--/.]xx[日],也即是:該正則表達(dá)式中所匹配到的年可以是1995~2049,或者95~99,00~49。月可以是1~12,或01~09,日可以是01~09,1~9,10~31。比如:1995年1月1日~2010年1月1日。
(2)pattern_date(1)="((19)?9[5-9]|(20)?[0-4][0-9])[年\--\./\\](1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))日?([至到~~]|\-+|-+)(1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))(日|(?![\d\--\./\\]))"
簡(jiǎn)介:xxxx年xx月xx[日](-/---/至/到/~~)xx月xx[日]。這里的年可以是1995~2049,或者95~99,00~49。月可以是1~12,或01~09,日可以是01~09,1~9,10~31。比如:1995年1月1日~10月1日。
(3)pattern_date(2)="((19)?9[5-9]|(20)?[0-4][0-9])[年\--\./\\](1[012]|0?[1-9])月?([至到~~]|\-+|-+)((19)?9[5-9]|(20)?[0-4][0-9])[年\--\./\\](1[012]|0?[1-9])(月|(?![\d\--\./\\]))"
簡(jiǎn)介:xxxx年xx[月](-/---/至/到/~~)xxxx年xx[月];xxxx(-./\)xx(-/---/至/到/~~)xxxx(-./\)xx;注:這里會(huì)匹配“11-08~12-09”這種表達(dá)式,實(shí)際上由于當(dāng)前年份已是2015年,這種日期出現(xiàn)后更可能表示11月8日~12月9日,而非11年8月~12年9月,因此在程序內(nèi)將作特殊判斷。
(4)pattern_date(3)="((19)?9[5-9]|(20)?[0-4][0-9])[年\./\\](1[012]|0?[1-9])月?([至到~~]|\-+|-+)(1[012]|0?[1-9])(月|(?![\d\--\./\\]))|((19)?9[5-9]|(20)?[0-4][0-9])[\--](1[012]|0?[1-9])月?[至到~~](1[012]|0?[1-9])(月|(?![\d\--\./\\]))"
簡(jiǎn)介:xxxx年xx[月](-/---/至/到/~~)xx月;xxxx(-./\)xx(-/---/至/到/~~)xx;上邊用 "|"分成兩部分寫(xiě),主要是為了防止xx-xx-xx的情況被匹配;零寬斷言是為了防止類似12-07~12-21這種被匹配出12-07~12來(lái)。
(5)pattern_date(4)="((19)?9[5-9]|(20)?[0-4][0-9])[年\--\./\\](1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))日?([至到~~]|\-+|-+)(30|31|([12][0-9])|(0?[1-9]))(日|(?![月\d\--\./\\]))"
簡(jiǎn)介:xxxx年xx月xx[日](-/---/至/到/~~)xx[日];xxxx(-./\)xx(-./\)xx(-/---/至/到/~~)xx。比如:1999年1月1日~10日。
(6)pattern_date(5)="((19)?9[5-9]|(20)?[0-4][0-9])[年\--\./\\](1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))(日|(?![月\d\--\./\\]))"
簡(jiǎn)介:xxxx年xx月xx日;xxxx(-./\)xx(-./\)xx。比如:2000年1月1日,可以匹配到2000-1-1等表達(dá)式。
(7)pattern_date(6)="((19)?9[5-9]|(20)?[0-4][0-9])年((1[012]|0?[1-9])(月[、,,\.]?|[、,,\.]))*((1[012]|0?[1-9])月?[和與及])?(1[012]|0?[1-9])月"
簡(jiǎn)介:在有“月”的情況下,兩個(gè)月之間可以無(wú)分隔符[、,,\.],以匹配“xx年1月2月”。
(8)pattern_date(7)="(199[5-9]|20[0-4][0-9])[\--\./\\](1[012]|0?[1-9])(?![\d\--\./\\])"
簡(jiǎn)介:xxxx(-./\)xx。比如:2000-12,表示2000年12月
(9)pattern_date(8)="(199[5-9]|20[0-4][0-9])(1[012]|0[1-9])([至到~~]|\-+|-+)(199[5-9]|20[0-4][0-9])(1[012]|0[1-9])(?!\d)"
簡(jiǎn)介:yyyymm(-/---/至/到/~~)yyyymm
(10)pattern_date(9)="(199[5-9]|20[0-4][0-9])(1[012]|0[1-9])(30|31|([12][0-9])|(0[1-9]))(?!\d)|(199[5-9]|20[0-4][0-9])(1[012]|0[1-9])(?!\d)"
簡(jiǎn)介:yyyymmdd/yyyymm
(11)pattern_date(10)="(1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))日?([至到~~]|\-+|-+)(1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))(日|(?![月\d\--\./\\]))"
簡(jiǎn)介:xx[月--/.]xx[日](-/---/至/到/~~)xx[月--/.]xx[日],月可以是1~12,或01~09,日可以是01~09,1~9,10~31
(12)pattern_date(11)="(1[012]|0?[1-9])[月\--\./\\](30|31|([12][0-9])|(0?[1-9]))日?([至到~~]|\-+|-+)(30|31|([12][0-9])|(0?[1-9]))(日|(?![月\d\--\./\\]))"
簡(jiǎn)介:xx月xx[日](-/---/至/到/~~)xx[日];xx(-./\)xx(-/---/至/到/~~)xx
(13)pattern_date(12)="(1[012]|0?[1-9])月?([至到~~]|\-+|-+)(1[012]|0?[1-9])月"
簡(jiǎn)介:xx[月](-/---/至/到/~~)xx月,月可以是1~12,或01~09
(14)pattern_date(13)="(30|31|([12][0-9])|(0?[1-9]))日?([至到~~]|\-+|-+)(30|31|([12][0-9])|(0?[1-9]))日"
簡(jiǎn)介:xx[日](-/---/至/到/~~)xx日
(15)pattern_date(14)="((19)?9[5-9]|(20)?[0-4][0-9])年?([至到~~]|\-+|-+)((19)?9[5-9]|(20)?[0-4][0-9])年"
簡(jiǎn)介:xxxx[年](-/---/至/到/~~)xxxx年
(16)pattern_date(15)="\b((1[012]|0?[1-9])月?[、,,\.])*((1[012]|0?[1-9])月?[和與及])?(1[012]|0?[1-9])月"
簡(jiǎn)介:(xx[月](、,,.和與及)){0,11}xx月,包括了xx月的形式;為匹配"12月1月"及“12月1日”這種情況,不加零寬先行斷言。
(17)pattern_date(16)="((19)?9[5-9]|(20)?[0-4][0-9])年"
簡(jiǎn)介:xxxx年以及xx年
相比于現(xiàn)有技術(shù),具有以下有益效果:
1、本發(fā)明將以文本形式存儲(chǔ)在支出說(shuō)明中的業(yè)務(wù)發(fā)生日期,智能提取并轉(zhuǎn)換成可分析的日期格式。在此基礎(chǔ)上,可以對(duì)報(bào)銷單據(jù)按月份分類匯總,并作進(jìn)一步的財(cái)務(wù)支出分析,從而實(shí)現(xiàn)報(bào)銷成本的有效管理和控制,節(jié)約企業(yè)支出,提高企業(yè)利潤(rùn)。
2、本發(fā)明支持多種常見(jiàn)日期表達(dá)方式的識(shí)別,具體包括:(1)中文數(shù)字(2)相對(duì)年月(3)“xx月”、“xx月份“、“xx日”、“xx號(hào)”等。(4)范圍日期。(5)無(wú)年月日等關(guān)鍵字的數(shù)字日期:“20120809”、“2012-08-09”、“2012.08-2012.09“、”2012\08\09-2012\08\21“等。
3、通過(guò)本發(fā)明,用戶填寫(xiě)電子單據(jù)時(shí),可以按照自己習(xí)慣填寫(xiě)文本格式的日期,而不必拘泥于日期格式或者浪費(fèi)精力在點(diǎn)擊日期輸入表上,從而節(jié)約用戶時(shí)間,提升用戶體驗(yàn)。
另外請(qǐng)參閱圖3,其為本發(fā)明的從文本中智能提取日期的裝置的框圖。本發(fā)明還提供了一種從文本中智能提取日期的裝置,其包括:獲取模塊1、預(yù)處理模塊2、匹配模塊3、提取模塊4、日期補(bǔ)全模塊5和儲(chǔ)存模塊6。
所述獲取模塊1,用于獲取將要從中提取日期的文本和單據(jù)填寫(xiě)日期;
所述預(yù)處理模塊2,用于將文本中出現(xiàn)的日期轉(zhuǎn)換為規(guī)范形式的日期。
作為本發(fā)明的進(jìn)一步改進(jìn),所述預(yù)處理模塊2包括:
第一預(yù)處理子模塊21,用于將“月份”、“號(hào)”分別用正則表達(dá)式匹配,匹配到之后轉(zhuǎn)換為“月”,“日”。
第二預(yù)處理子模塊22,用于根據(jù)文本中出現(xiàn)與填單日期具有關(guān)聯(lián)關(guān)系的日期表達(dá)形式,計(jì)算出對(duì)應(yīng)的日期。進(jìn)一步,所述第二預(yù)處理子模塊中與填單日期相關(guān)聯(lián)的表達(dá)式包括:“本年”、“本年度”、“去年”、“上一年”、“明年”、“下一年”、“當(dāng)月”、“下個(gè)月”、“本月”,當(dāng)匹配到上述日期表達(dá)形式之后,結(jié)合填單日期計(jì)算出對(duì)應(yīng)日期。
第三預(yù)處理子模塊23,用于將中文表達(dá)的數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字。
所述匹配模塊3,用于構(gòu)造正則表達(dá)式,并利用正則表達(dá)式對(duì)文本中的日期表達(dá)式進(jìn)行匹配,從中提取出符合正則表達(dá)式格式的日期表達(dá)式。
進(jìn)一步,所述匹配模塊3根據(jù)正則表達(dá)式對(duì)對(duì)文本中日期匹配成功后,提取匹配到的日期表達(dá)字段,并將該匹配到的字段刪除。
所述提取模塊4,用于針對(duì)不同格式的日期表達(dá)式,分別提取出其中的年、月、日數(shù)字。
所述日期補(bǔ)全模塊5,用于借助填單日期,補(bǔ)全文本中缺失的年份或月份數(shù)據(jù);
進(jìn)一步,所述日期補(bǔ)全模塊5在補(bǔ)全缺失的年份和月份數(shù)據(jù)時(shí),其補(bǔ)全日期的依據(jù)包括根據(jù)取填單日期所在年份和月份,和/或根據(jù)與取填單日期具備關(guān)聯(lián)關(guān)系的年份或月份。
所述儲(chǔ)存模塊6,用于將識(shí)別出的年、月、日數(shù)字組合成完整的日期,并以日期格式存儲(chǔ)。
本發(fā)明并不局限于上述實(shí)施方式,如果對(duì)本發(fā)明的各種改動(dòng)或變形不脫離本發(fā)明的精神和范圍,倘若這些改動(dòng)和變形屬于本發(fā)明的權(quán)利要求和等同技術(shù)范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變形。