張云琪
(南京中醫(yī)藥大學中醫(yī)藥文獻研究所 江蘇省南京市 210023)
肝病是指發(fā)生在肝臟的病變,是臨床的常見病,中醫(yī)在肝病治療方面有明顯的療效?!吨嗅t(yī)臨床病證大典肝病篇》(以下簡稱“病證大典”)擬整理歸納歷代中醫(yī)藥經典文獻中與肝病相關的論述,便于廣大師生和中醫(yī)醫(yī)療工作者總結學習肝病臨證經驗。但是中醫(yī)藥經典文獻數據量大,從中尋找相關的肝病數據比較困難。本文利用J2EE設計和開發(fā)了一個肝病中醫(yī)文獻抽取解析及數據協(xié)同化管理軟件,該軟件利用模式匹配技術,對中醫(yī)藥經典文獻中的文獻資料進行抽取和解析,能把與肝病有關的病名、病因、病機、病證、治法、用方、用藥、醫(yī)話醫(yī)案等相關數據自動提取出來,提高了“病證大典”的數據采集效率。同時,如果依次設置“病證大典”出版文字段落的樣式,重復性工作很多,且容易出現錯漏,不易檢查。本軟件通過Spire.Doc組件批量設置格式,然后把相關數據導出,直接得到排版好的Word文檔,為編寫工作提供了很大的便利。
假設有子串P,字符串T,現在要從T中找到所有與P相同的子串索引,這就是模式匹配。考慮到模式匹配在實際使用時的復雜性,結合中醫(yī)藥文獻的特點,必須選用合適的模式匹配算法,達成能夠自動、精確地抽取解析數據的目標。
Spire.Doc for Java是對Word文檔進行操作的Java組件。使用它可以將許多Word文檔任務(如創(chuàng)建文檔、編輯文檔等)集成到Java應用中,以實現預設定格式并對文檔批量化處理的功能。
該軟件旨在能從《中華醫(yī)典》收錄為主的中醫(yī)經典文獻中,抽取和解析出肝病相關的數據,以獲取規(guī)范化的病證記錄。經系統(tǒng)認證過的編者可以共同參與文檔的校正,實現協(xié)同化編輯。存儲校正后的規(guī)范化數據,根據排版要求自動生成符合樣式要求的Word文檔。此外,系統(tǒng)的穩(wěn)定性、安全性等需求也應得到保障,操作界面需簡潔友好。
本系統(tǒng)采用MVC(模型-視圖-控制)的框架來構建,提高了軟件的重用性和可維護性,有利于軟件工程化管理??傮w架構分為表現層、業(yè)務邏輯層、數據訪問層,如圖1所示。表現層利用JSP、JavaScript編寫用戶界面,收集用戶對于功能方面的請求,同時反饋結果。業(yè)務邏輯層管理用戶的基本信息和權限,處理數據抽取解析、協(xié)同管理、規(guī)范化導出等業(yè)務邏輯。數據訪問層根據業(yè)務邏輯層處理后的結果,用MyBatis框架和MySQL對相應的病名、病因、病機、病證、治法、用方、用藥、醫(yī)話醫(yī)案數據進行增、刪、改、查等操作,實現業(yè)務數據持久化。
圖1:軟件系統(tǒng)架構
肝病中醫(yī)文獻抽取解析及數據協(xié)同化管理軟件將用戶分為2種角色:系統(tǒng)管理員和編輯員,系統(tǒng)主要包括用戶管理、數據解析、數據協(xié)同化管理、文字段落樣式批量設置導出這4個功能模塊,如圖2所示。
圖2:軟件功能模塊
2.3.1 用戶管理功能
用戶管理是系統(tǒng)管理員對其他非管理員用戶(編輯員)相關信息進行維護的功能,包括管理他們的基本信息和編輯權限的授權。基本信息指用戶名、密碼、姓名、單位、聯(lián)系方式等,編輯權限是指編輯員是否可以參與本次編輯。
2.3.2 數據抽取解析功能
數據抽取解析功能是指:根據前期收集和制定的《肝病關鍵詞目錄集》,以存儲的第五版《中華醫(yī)典》數據為主,從中抽取出與肝病有關的論述,包括病名、病因、病機、病證、治法、用方、用藥、醫(yī)話醫(yī)案等記錄,解析出每條論述的文獻出處書名、文獻出處卷名、有無引用文獻和具體論述內容,同時根據出處書名找到對應的成書年代,以便于后續(xù)“病證大典”的編寫。
2.3.3 數據協(xié)同化管理功能
病證數據協(xié)同化管理主要是指:多位有編輯權限的編輯員可同時對抽取和解析出的肝病文獻數據進行二次校驗,包括查詢、修訂、刪除、增加等。編輯員在對抽取解析后的數據進行校勘時,可以選擇查看解析后的全部數據,也可以通過查詢關鍵詞找到其中的某一條數據。如果編輯員發(fā)現某條解析結果中存在錯誤內容,可以修改該條數據后選擇保存;若發(fā)現某條抽取解析出的數據與肝病無關,則可選擇刪除此數據;若發(fā)現抽取結果中存在遺漏某條數據的現象,則可選擇自行增加數據并選擇保存。經過編輯員校對后確認無誤后的數據將被存儲至數據庫中。
2.3.4 文字段落樣式批量設置導出功能
系統(tǒng)管理員預先設定好符合“病證大典”排版要求的文字和段落樣式,待病證數據規(guī)范化工作全部完成后,管理員選擇一鍵導出至Word,系統(tǒng)即可自動生成符合出版排版要求的文檔。
根據從《中華醫(yī)典》收錄的經典文獻中抽取解析出肝病相關的數據內容,設計病證數據庫,包括病證分類表、文獻詳情表、病證草稿表和病證詳情表。
2.4.1 病證分類表
根據前期收集制定的《肝病關鍵詞目錄集》,將關鍵詞按照病名、病因、病機、病證、治法、用方、用藥、醫(yī)話醫(yī)案進行第一級別的分類,之后再往下細分出第二級別:按發(fā)病部位命名、按發(fā)病特點命名、按臟腑經絡命名等。依據此制定出病證分類表,包含以下屬性:一級分類、二級分類、肝病關鍵詞。
2.4.2 文獻詳情表
各文獻的名稱和成書年代等基本信息都是固定的,因此需要制定統(tǒng)一規(guī)范的文獻詳情表。這樣在記錄病證相關論述的文獻出處時,可以直接引用文獻詳情表中的數據,能夠避免數據錯漏的問題,也可以減少存儲時的數據冗余。結合功能需求和文獻抽取情況,設計文獻詳情表屬性如下:文獻序號、文獻名稱、成書年代起點、成書年代終點。
2.4.3 病證草稿表和病證詳情表
為了充分收錄典籍中關于肝病的論述,結合病證分類表和文獻詳情表設計了病證草稿表和病證詳情表。病證草稿表用于存儲系統(tǒng)從中醫(yī)經典文獻中抽取出的數據,這些數據未被編輯員校對確認過,是軟件初步解析的結果。病證詳情表用于存儲編輯員??焙蟮牟∽C數據,是準確的、規(guī)范化的數據。兩個表都包含以下屬性:一級標題、二級標題、三級標題、四級標題、文獻出處書名、文獻出處卷名、文獻引用、論述內容、成書年代起點、成書年代終點等。病證詳情表的設計和部分數據如表1所示。
表1:病證詳情表設計和部分數據存儲
利用BootStrap框架,結合JSP、CSS和JavaScript設計本系統(tǒng)的UI。界面設計簡潔,操作簡單易上手。首頁即顯示系統(tǒng)的四大功能,用戶可通過點擊首頁上的相關功能分區(qū),直接使用該功能,如圖3所示。
圖3:軟件首頁
首先,利用文獻學的研究方法,收集、篩選、修訂肝病相關的關鍵詞數據集。再針對肝病關鍵詞集進行分類,制定成《肝病關鍵詞目錄集》。
數據解析開始時,有權限的編輯員進入數據解析功能模塊,選擇上傳《肝病關鍵詞目錄集》作為字典集。系統(tǒng)會通過樸素算法、KMP匹配算法、BM匹配算法等模式匹配技術,從《中華醫(yī)典》收錄的部分中醫(yī)經典文獻數據中,初步提取和解析出一些相關的論述,這些數據是未被編輯員確認過的草稿數據,將暫存于初步解析的草稿數據庫中,不會存入最終的病證數據庫里。
進入數據協(xié)同化管理功能模塊后,多名身份認證成功的編輯員可將提取結果與原始文檔數據進行校對。在校勘時,編輯員可以查看到解析后的全部草稿數據,也可以通過查詢關鍵詞找到想要校對的具體某一條數據。點擊某條待確認的草稿數據后,該條數據會進入可編輯狀態(tài)。若當前整條論述不相關,編輯員可直接在頁面點擊“刪除”按鈕,會從病證草稿表中刪掉整條數據,不會存入最終的病證詳情表;若發(fā)現抽取結果中遺漏了某條數據,則可點擊“新增”按鈕,在頁面填寫數據,再選擇保存,新增數據會直接存入病證詳情表;若抽取的數據有部分錯誤,編輯員可在當前頁面進行修改,修改完成之后點擊“保存”按鈕,該條數據會存儲至最終的病證詳情表中,如圖4所示。
圖4:數據協(xié)同化管理界面
同時根據病證數據庫中存儲的校對后的規(guī)范化數據,系統(tǒng)不斷更新修訂《肝病關鍵詞目錄集》,之后再對《中華醫(yī)典》收錄的部分數據進行模式匹配,編輯員再次協(xié)同化管理校對新抽取解析出的數據,如此過程循環(huán)下去,直至生成全部符合規(guī)范要求的結構化數據。整體流程如圖5所示。
圖5:數據抽取及規(guī)范化流程
系統(tǒng)管理員根據出版文字段落的排版要求,在軟件中為數據庫的相應字段預先設定好格式。待全部數據規(guī)范化過程整體完成后,系統(tǒng)讀取數據庫中的數據,利用Spire.Doc組件,將讀出的數據按照設定好的格式依次寫入Word中,完成文字段落樣式的批量設置導出。比如需要設定文字字號為20,則系統(tǒng)會調用Spire.Doc中getCharacterFormat()下的函數setFontSize()并賦上字號參數20,代碼為:getCharacterFormat().setFontSize(20);如需要設定文字樣式為加粗,則調用Spire.Doc中的setBold()樣式加粗函數并附上參數true,代碼為:getCharacterFormat().setBold(true)。
在軟件投入使用前,選取部分肝病相關的經典文獻作為測試數據,使用基本路徑測試法、等價類劃分法等軟件測試方法,對系統(tǒng)的界面、功能、性能、兼容性和易用性等各個方面進行了多次測試,運行效果良好。投入使用后,根據用戶對數據的校驗情況和在具體使用過程中的反饋結果,不斷完善和優(yōu)化系統(tǒng)界面和功能,保證了軟件的安全性、可靠性、穩(wěn)定性、健壯性等,也提高了數據抽取和解析的準確性和效率,便于開展“病證大典”的編寫工作。
原本在開展編寫工作的時候,需要在大量中醫(yī)經典文獻中手動檢索關鍵詞,人工一條條篩選,工作繁瑣且效率低下。軟件使用模式匹配技術獲取數據,配合用戶反饋結果不斷修正抽取結果,使得數據提取速率和編寫工作效率大大提高。
本系統(tǒng)可以自動抽取數據,多位編輯員也可同時在線、共同管理文獻數據,這種自動化和協(xié)同化的工作模式,減輕了團隊的工作量,加強了團隊的合作性。設定好格式一鍵導出文本的模式,也使編輯不需要再做大量重復性工作。這種不同于傳統(tǒng)編書方式的新模式,不僅適用于“病證大典”的編寫,還可應用于其他編輯工作中,是對智慧編輯模式的一次很好的探索。
本文利用J2EE設計和開發(fā)的肝病中醫(yī)文獻抽取解析及數據協(xié)同化管理軟件,通過模式匹配技術抽取和解析了中醫(yī)經典文獻中關于肝病的論述,結合數據協(xié)同化管理,實現了肝病病證數據的規(guī)范化管理和存儲。同時可以設定文字段落格式,一鍵導出到Word,方便書籍的編輯排版。軟件運行后性能表現穩(wěn)定,數據抽取解析與協(xié)同管理效果良好,能有效幫助《中醫(yī)臨床病證大典肝病篇》的編寫。后續(xù)通過修改字典集和格式設定參數等,該軟件還可以應用到其他書籍的編寫過程中,具有很好的發(fā)展前景。