宋麗梅,高海平
(東北大學 圖書館,遼寧 沈陽 110819)
根據教育部高等學校圖書情報工作指導委員會《普通高等學校圖書館評估指標》的要求,普通高等學校圖書館文獻資源建設方面需要達到每個學生平均100 冊圖書,中外文圖書年更新率達到新書品種與館藏種數之比為3%及以上[1]。 不斷增長的圖書總量和有限的館舍空間面積使得大多數高校圖書館存在書多空間少、倒架工作頻繁、圖書易亂架且難尋找等現象。 隨著圖書館空間再造的進行,高校圖書館的藏書空間被再一次劃分出去,分館的建立以及密集書架的配置雖然在一定程度上解決了圖書多、空間少的問題,但如何更有效地利用現有空間合理管理圖書,為圖書提供科學的定位、排架,依然是所有圖書館面臨的實際問題。
國內現有的圖書定位排架方法主要有兩種。
(1)基于RFID 技術的圖書定位排架。 根據不同的實現技術,可以分為動態定位模式和靜態定位模式[2]。 其中,動態定位模式需要對現有的書架進行改裝或更換,成本過高,所以一直沒有得到廣泛應用;目前,絕大多數圖書館采取的是靜態定位模式,它可通過全書定位法、首書定位法及鄰居定位法等方法定位圖書[3],這種模式下的圖書定位準確率會隨著使用時間和書架調整變得越來越低,用戶體驗感降低[4],重新定位圖書又會耗時耗力。 總結RFID 在國內使用的具體情況可以看出,RFID 技術在定位圖書方面初次定位準確率很高,能很好地發現“藏匿”的圖書,也利于圖書的盤點,但隨著時間的推移及新書的增加,其定位的準確度會迅速下降,重新定位需要大量的人力物力。
(2)利用軟件建立虛擬排架系統進行圖書的定位排架。 這種方法主要利用索書號對比的方式,對數據庫中的圖書進行虛擬排架,并將圖書所在的地理位置通過前臺網頁展示給讀者,便于讀者查找圖書[5-7]。 早期的系統是通過圖書條碼進行定位的[8],通過人工掃描的方式將單元書架的首末圖書條形碼輸入系統,系統進行索書號的對比,將處于首末圖書索書號區間內的圖書定位至此書架中。 有部分圖書館也利用系統對密集書庫進行管理,如北京大學圖書館昌平儲存館密集書庫管理系統[9]。 為了增加用戶體驗度,很多圖書館會結合Flash 或網頁技術,將圖書的書架定位信息通過生動直觀的圖形、動畫等形式展現給讀者[10-11]。 通過數據庫的方式進行圖書定位排架,具有實用性強、投入資金少的特點,但從系統的設計來看,大部分的系統都是從邏輯計算角度實現圖書的排架,并未將圖書的增加、剔舊、流通等因素考慮進去,不利于書架的合理運用。 為保證系統與現實的排架一一對應,需要進行多次的串架工作。
對比上述兩種圖書定位排架方法的優缺點,結合圖書館的經費、圖書數量及實際需求,筆者認為,對于藏書量較大、館藏空間不足且經費有限的圖書館,設計一個基于數據分析的圖書定位排架系統具有一定必要性。
根據圖書館圖書定位排架原則,系統需要實現以下功能:從圖書館角度,系統能夠合理安排各類圖書的位置,盡量避免串架、倒架的發生;從讀者角度,能夠通過查詢功能查找到圖書所在的位置;此外,圖書的物理位置與邏輯位置要求一致。 為了盡可能地科學利用館藏空間,采用數據分析的方法,將各類圖書的首書分配至固定的架位,其余圖書與首書的索書號進行對比,根據圖書的厚度及架位的長度確定待排架圖書的位置,并將該書的位置信息通過網頁的形式傳遞給讀者,實現圖書的定位排架功能。
圖書索書號又稱排架分類號,是館員排架和讀者查找圖書的依據。 圖書定位排架系統需要將圖書按照索書號進行排序,簡單按照ASCII 碼對圖書的索書號進行字符大小排序,會因索書號構成中的種次號、分類號中“.”“-”等特殊符號,使虛擬的排列次序與實體圖書的排列次序有較大出入。 此時,需要對索書號進行預處理,處理目的是使實體圖書與虛擬排架系統的排列順序一一對應。 將索書號按照符號“/”分隔成若干個子字符串(通常是2 ~3個區間),然后將第一區間字符串中的字符“-”替換成“&”,這種替換主要是為了使第一段字符串能夠按照計算機排序。然后將所有的數據依照第一區間字符串、第二區間字符串、第三區間字符串、條形碼進行排序,這樣書目列表的順序就是圖書在實際上架過程中的順序。
圖書的厚度直接影響到一層書架圖書的數量,在具體操作過程中,對每本圖書進行厚度的測量是不可行的。 考慮到數據的可獲取性及精準度,采用抽樣的方法對紙張的厚度進行估測,并通過提取ALEPH 系統中的215 載體形態項圖書頁碼字段,計算每層書架能擺放的圖書總量。
2.2.1 紙張厚度的確定
根據實際情況,為了合理地取得紙張厚度值,采取抽樣調查的方式,隨機抽取精裝圖書、平裝圖書各100 本,提取每本書的書內頁碼(不包括封面),測量每本書的厚度。 采取進位制精確至毫米,利用公式:每張紙的厚度=圖書厚度/(頁數/2)(精度確定為小數點后4 位), 最后算得每張紙厚度大約為0.031 mm。
2.2.2 系統圖書頁碼的提取與處理
為了獲得每本圖書的頁碼,使用ALEPH 系統的服務功能,分兩個步驟完成。
步驟1:先形成一個檢索記錄集。 在編目模塊中,選擇中文文獻庫,運行“服務”—“檢索記錄”—“檢索編目記錄ret-01”先檢索出需要的數據,填寫輸出文件名,選擇要導出的編目記錄系統號,提交任務,得到一個檢索結果集。 根據實際情況,選擇具體的檢索字段。
步驟2:利用print-08 輸出結果集,在任務管理器“批處理日志”中,查看本步驟是否執行成功,成功后進行下一步操作。 在“輸入文件”中填寫步驟1 中得到的結果集名稱,在“輸出文件”中填寫想要保存成的文件名,可以加上字母與輸入文件名進行區分。 在“報表格式”中選擇“作者|題名|出版社|頁碼”,提交任務。 待任務完成后,在“任務管理器”—“文件列表”中可以看到執行后的文件,將該文件下載到本地即可。
由于系統提取的頁碼格式不統一,且存在書前頁、正文頁碼、書后頁碼及圖版頁碼等形式,因此將所有的頁碼相加作為最后的書頁數量較為合理。 為了方便程序計算圖書的總頁碼,需要預先將羅馬數字轉換為對應的阿拉伯數字。 對于只標注冊數的數據,需要人工標注,以備后期利用網絡或實體書查找圖書的頁碼信息。
2.2.3 館舍容書量的計算
館舍容量的測定指架位的總長度。 判斷一個圖書館能容納圖書數量的多少,主要看放置圖書的書架規制和數量。 這是一個相對穩定的數據,根據各館的實際情況很容易獲得。 以高校圖書館書架為例,書架通常分為A,B 兩面,每面有6 層的單元書架,若干書架合理排序進行空間布置。 對相同規格的書架進行測量,能很容易算出圖書館總架位的長度。
2.2.4 圖書動態數據管理
圖書排架的難點在于圖書的數量是動態變化的。如果圖書館的館藏空間足夠大,或者剔舊工作完美進行,那么按照圖書館學的理論,圖書館書架的滿架率在70%左右,數值太大不利于找書,增加新書時倒架的頻率過高,數值太低則浪費書架的藏書空間。 在圖書館空間比較緊缺的情況下,需要考慮圖書的動態數據,如藏書量、借閱量、增長量及剔舊量。 借閱量主要受借閱周期、借閱頻率、借閱時長影響;增長量是計算某個小類圖書的年平均增長量。 結合圖書的厚度數據,利用公式(L藏書量+L增長量-L借閱量-L剔舊量)/L館藏容量可以計算出每類圖書占據的書架長度比例,進而確定一定空間內架位首書的位置,確保避免頻繁地串架、倒架。
2.2.5 圖書位置信息顯示
將圖書館中所有的書架按照館藏地、樓層、書架排號、面信息、架信息、層信息及位信息劃分為一個基本的單元,圖書的位置信息可顯示為“2 排A 面3 架6層3 位”。 在程序實現過程中,需要定位每類圖書的首書位置,再將已擺放圖書的總厚度與書架的寬度對比,當總厚度超過書架的寬度時,圖書轉向下一層開始擺放。 此外,當分類號改變時,圖書也需要轉向下一層開始擺放,部分程序代碼如圖1 所示。

圖1 部分程序代碼
根據系統分析及相關數據運行要求,抽取圖書館部分數據作為實驗數據,進行代碼的初步運行,檢測本系統的可操作性。 實驗過程中采用SQL 數據庫,利用intelij idea 作為開發工具,Spring,SpringMVC,MyBatis 作為框架版本,tomcat8.5 作為應用服務器開發了一個適用于Windows 系統的圖書定位排架系統,并采用HTML5,CSS 和JS 相結合的方式將圖書的定位排架信息以網頁的形式展現給讀者,整個系統主要包括系統數據庫、后臺數據處理模塊、后臺數據維護模塊和前臺網頁檢索與展示模塊。
選取SQL 作為系統數據庫,將實驗數據按照館藏地的不同分別創建不同的表單,分別為:hnsk,hnkj,nhsk,nhkj。 4個表單中的字段信息有:條碼號、題名、著者、ISBN、出版社、出版年、館藏地、索書號、頁碼。將這4個表單導入數據庫中,利用java 語言將索書號進行重新排序,計算每本圖書的長度,根據架位比例確定個別架位的首書,對比形成另外一個館藏地信息表單。 表單中包含的字段信息有:條碼、題名、館藏地、排、面、架、層、位,此表單中的圖書位置信息將以網頁的形式提供給讀者。 當新書到館后,通過更新基礎表單的方式,實時更新圖書的位置信息。
SSM(Spring +SpringMVC +MyBatis) 框 架 集 由Spring,MyBatis 兩個開源框架整合而成(SpringMVC是Spring 中的部分內容),常作為數據源較簡單的Web 項目的框架。 在本系統的開發過程中,利用了SSM 框架搭建平臺。
其中,Spring 在配置文件中可以指定使用特定的參數去調用實體類的構造方法來實例化對象;SpringMVC 在項目中攔截用戶請求,它的核心Servlet即DispatcherServlet 承擔中介或前臺的職責,將用戶請求通過HandlerMapping 去匹配Controller,Controller就是具體對應請求所執行的操作。 SpringMVC 相當于SSH 框架中的struts。 mybatis 是對jdbc 的封裝,它讓數據庫底層操作變得透明。 MyBatis 的操作都是圍繞一個sqlSessionFactory 實例展開的。 MyBatis 通過配置文件關聯到各實體類的Mapper 文件,Mapper 文件中配置了每個類對數據庫所需進行的sql 語句映射。 在每次與數據庫交互時,通過sqlSessionFactory拿到一個sqlSession,再執行sql 命令。
在具體的實現過程中,頁面發送請求給控制器,控制器調用業務層處理邏輯,邏輯層向持久層發送請求,持久層與數據庫交互,后將結果返回給業務層,業務層將處理邏輯發送給控制器,控制器再調用視圖展現數據(見圖2)。

圖2 操作流程
在前臺網頁制作過程中,采用HTML5,CSS 和JS相結合的方式,制作了一個簡單的查詢頁面,網頁包含的信息有圖書館常用LOGO、讀者查詢窗口。 讀者可通過題名、條碼、索書號等多種形式查找單冊圖書。根據讀者的檢索需求,系統通過查詢數據庫,可以調取相應圖書的信息,并顯示具體的架位信息(見圖3),讀者根據系統提供的架位信息獲取指定圖書的地理位置。

圖3 圖書架位查詢結果
基于數據分析的圖書定位排架系統,對讀者和圖書館員來說,具有現實意義。 圖書館員增強了圖書管控能力,按照圖書的主題和厚度進行合理布局,減少倒架工作的發生。 此外,能宏觀地了解各類別圖書的數量發展情況,以及空間需求情況,在大規模的圖書搬遷過程中,系統可以為圖書館上架提供一定的依據;對于讀者來說,可以準確獲取圖書的所在地,快速、準確地找到目標圖書。