[發明專利]一種基于文本行的文檔分段方法及裝置有效
| 申請號: | 201710616443.7 | 申請日: | 2017-07-26 |
| 公開(公告)號: | CN107391457B | 公開(公告)日: | 2020-10-27 |
| 發明(設計)人: | 林康;羅鷹;張鑫陽 | 申請(專利權)人: | 成都科來軟件有限公司 |
| 主分類號: | G06F40/10 | 分類號: | G06F40/10;G06F40/12 |
| 代理公司: | 成都九鼎天元知識產權代理有限公司 51214 | 代理人: | 徐靜 |
| 地址: | 610041 四川省成都市高新區*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 文本 文檔 分段 方法 裝置 | ||
1.一種基于文本行的文檔分段方法,其特征在于包括:
步驟1:對于由文本行構成的文檔格式進行數據解析,提取出頁面和文檔數據結構,每一文本行對應的文檔數據結構中提取該文本行信息;遍歷全文的每個包含文本行的文檔數據結構,根據這些文檔數據結構的文本行信息構成的文本行信息列表,分別計算出全文上下文和頁面上下文信息;
步驟2:依據每個頁面中的n個文本行信息列表,結合全文上下文和頁面上下文信息,對每個頁面,按照分段算法將其中的文本行單元進行分段;所述步驟2具體包括:
步驟21:跳過無內容的文本行單元;
步驟22:為每個文本行單元設置一個初值為0的段合并分數,流程結束時,若段合并分數大于0,則將該文本行單元與其前一個文本行單元進行合并;
步驟23:設置一個段合并緩存,在確定整個段落合并結束之前,將已確定要合并的文本行單元暫存在這個緩存中,并且將文本行的字體格式存入集合中;
步驟24:檢測到新的文本行的段合并分數小于等于0時,結束當前段落合并,清除段合并緩存,開始新的段落分段;所述段合并分數計算過程是:
步驟31:若當前行的字體格式存在于段合并緩存的字體格式集合之中,則段合并分數增加5;
步驟32:通過當前行距離頁面頂端的距離curr_line.gap_top判斷相鄰兩文本單元是否在同一行,若-1≤curr_line.gap_topmin(gap_top_avg-gap_top_std,8)
則相鄰兩文本單元在同一行,curr_line.merge_score+=10,執行步驟32;否則,相鄰兩文本單元不在同一行,執行步驟33;
步驟33:檢測文本間行距,若|curr_line.gap_top-prev_line.gap_top|gap_top_std,則文本行單元行距過大,則說明兩行很可能不屬于同一段落,curr_line.merge_score-=10,執行步驟34以及步驟35;否則,curr_line.merge_score值不變,執行步驟34;
步驟34:從merge_buffer中遍歷上一行,找到最前端的文本行單元prev_line_start;判斷兩行的左縮進是否一致,若:
-5≤prev_line_start.gap_left-curr_line.gap_leftgap_left_avg-gap_left_std
則縮進一致,curr_line.merge_score+=1,否則curr_line.merge_score-=1;
步驟35:字數檢查,依據是同一段落的文本中,下一行的字數不會明顯多于前一行,即若curr_line.line_len-prev_line.line_len2*len_std,則curr_line.merge_score-=5;否則curr_line.merge_score數值不變;
其中,gap_top_avg表示相鄰文本行之間的行距的平均值;gap_top_std表示相鄰文本行之間的行距的標準差;curr_line.merge_score指的是當前文本行單元的段合并分數;prev_line.gap_top指的是前一文本行單元與相鄰文本行單元之間的行距;merge_buffer指的是段合并緩存;prev_line_start.gap_left指的是前一文本行單元與相鄰文本行之間的縮進差;curr_line.gap_left指的是當前文本行單元與相鄰文本行之間的縮進差;gap_left_avg指的是相鄰文本行之間的縮進差的平均值;gap_left_std指的是相鄰文本行之間的縮進差的標準差;curr_line.line_len指的是當前文本行單元字數;len_std指的是文本行的字數的標準差;prev_line.line_len指的是前一文本行單元字數。
2.一種基于文本行的文檔分段裝置,其特征在于包括:
文本行信息獲取模塊:提取出頁面和文檔數據結構,從每一文本行對應的文檔數據結構中提取該文本行信息;遍歷全文的每個包含文本行的文檔數據結構,根據這些文檔數據結構的文本行信息構成的文本行信息列表,分別計算出全文上下文和頁面上下文信息;
分段合并模塊:依據文本行信息獲取模塊取得的每個頁面中的n個文本行信息列表,結合上下文信息,對每個頁面,按照分段算法將其中的文本行單元進行分段;
所述分段合并模塊具體包括:
無內容單元處理模塊:跳過無內容的文本行單元;
文本行單元合并模塊:首先設置一個段合并緩存,在確定整個段落合并結束之前,將已確定要合并的文本行單元暫存在這個緩存中,并且將文本行的字體格式存入集合中;然后為每個文本行單元設置一個初值為0的段合并分數,流程結束時,若新文本行的段合并分數大于0,則將該文本行單元與其前一個文本行單元進行合并,并將該文本行單元放入段合并緩存中;若檢測到新的文本行的段合并分數小于等于0時,結束當前段落合并,清除段合并緩存,開始新的段落分段;
所述段合并分數計算過程是:
字體格式判斷模塊:若curr_line.line_font存在于集合font_set之中,則curr_line.merge_score+=5;
同行文本行單元判斷模塊:通過curr_line.gap_top判斷相鄰兩文本單元是否在同一行,若-1≤curr_line.gap_topmin(gap_top_avg-gap_top_std,8),
則相鄰兩文本單元在同一行,curr_line.merge_score+=10,執行同行文本行單元判斷模塊;否則,相鄰兩文本單元不在同一行,執行同段落文本行單元判斷模塊;其中curr_line.gap_top指的是當前文本行單元與相鄰文本行單元之間的行距;
同段落文本行單元判斷模塊:檢測文本間行距,若|curr_line.gap_top-prev_line.gap_top|gap_top_std,則文本行單元行距過大,則說明兩行很可能不屬于同一段落,curr_line.merge_score-=10,執行文本行單元縮進判斷模塊以及字體檢查模塊;否則,curr_line.merge_score值不變,執行文本行單元縮進判斷模塊;
文本行單元縮進判斷模塊:從merge_buffer中遍歷上一行,找到最前端的文本塊prev_line_start;判斷兩文本單元的左縮進是否一致,若:
-5≤prev_line_start.gap_left-curr_line.gap_leftgap_left_avg-gap_left_std
則縮進一致,curr_line.merge_score+=1,否則curr_line.merge_score-=1;
字體檢查模塊:字數檢查,依據是同一段落的文本中,下一行的字數不會明顯多于前一行,即若curr_line.line_len-prev_line.line_len2*len_std,則curr_line.merge_score-=5;否則curr_line.merge_score數值不變;prev_line.line_len指的是前一文本行單元字數;
其中,gap_top_avg表示相鄰文本行之間的行距的平均值;gap_top_std表示相鄰文本行之間的行距的標準差;curr_line.merge_score指的是當前文本行單元的段合并分數;prev_line.gap_top指的是前一文本行單元與相鄰文本行單元之間的行距;merge_buffer指的是段合并緩存;prev_line_start.gap_left指的是前一文本行單元與相鄰文本行之間的縮進差;curr_line.gap_left指的是當前文本行單元與相鄰文本行之間的縮進差;gap_left_avg指的是相鄰文本行之間的縮進差的平均值;gap_left_std指的是相鄰文本行之間的縮進差的標準差;curr_line.line_len指的是當前文本行單元字數;len_std指的是文本行的字數的標準差;curr_line.line_font指的是當前文本行單元的字體格式;font_set表示集合。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于成都科來軟件有限公司,未經成都科來軟件有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710616443.7/1.html,轉載請聲明來源鉆瓜專利網。





