第3章图书类目自动标引系统
21世纪以来,随着信息资源量的不断增长,世界各地的图书馆普遍使用大量数字资源进行数字化建设,如何对数字资源进行加工整理成为数字化图书馆建设的重要方向之一。为了使数字资源像纸质文献一样能够被快速根据类别进行检索,数字资源也需要进行标引。
无论是纸质资源还是数字资源,其分类都不是与生俱来的,图书文献的标引人员需要经过培训,即使是经验丰富的图书标引人员也要根据纸质资源或数字资源的主要内容,参照《中图分类法》的分类规则进行分类标引。目前数字资源在图书馆馆藏资源中所占的比例已经越来越大,数字资源的标引工作也变得越来越重要,如何在数字资源种类和规模都在迅速增长的情况下仍然兼顾标引的质量和速度,是任何一个数字化图书馆都不可忽视的重要项目。
3.1业务背景分析
目前对于图书馆收录的数字资源,大部分图书馆仍然在采取人工分类的方式对数字资源进行标引,这种方法需要经验非常丰富的标引人员耗费大量时间才能完成。因此数字资源的自动标引方法不仅可以节省人力和财力,而且还能够大大提高数字资源标引的速度,缩短资源上架周期,被读者更好地利用,有利于知识的传播。而目前图书馆所能够使用的数字资源自动标引系统均较为陈旧,其算法依赖词表和知识库的构建,且并未使用近年来机器学习和自然语言处理领域的最新成果。这些系统的标引准确率低下,且对于部分数字资源需要人工参与进行协助分类或者检验,并不能从真正意义上解放人力资源,达不到自动标引的要求。而近年来快速发展的基于机器学习和自然语言处理的算法,并没有在数字资源标引系统上有效应用。
3.2数据提取
这里将使用某市图书馆提供的F经济大类馆藏数字资源作为语料素材。数字资源的文献标题、期刊或会议名称、作者、单位、时间、文献摘要和作者给出的关键词组成了全部数字资源的索引数据库部分,而数字资源的全文则以二进制大文件的形式单独进行存储。
由于多数字段空值比例较高,从中选择部分字段作为机器标引的输入特征,经过筛选,选择标题、出版社、关键词、摘要作为后续分类标引的依据,如图3.1所示。
图3.1待标引文献数据示例
图书馆提供的初始数据库文件为Access数据库,文件类型为mdb,一共有74万的样本数量。首先安装Access数据驱动以及pyobdc工具包,连接Access数据库并将数据导出为csv文件。 在Windows系统上运行以下代码。
import pyodbc
print([x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')])
如果看到一个空列表,那么正在运行64位Python,并且需要安装64位版本的ACE驱动程序。如果只看到['Microsoft Access Driver (*.mdb)']并且需要使用.accdb文件,那么需要安装32位版本的ACE驱动程序。
数据提取部分的代码见extract.py,其中没有抽取原本数据库中全部的字段,只使用了对于分类最重要的几个字段,即正文地址、target 、title 、abstract、keyword。
import pyodbc
import csv
path = 'D:\\PycharmProjects\\data\\'
cnxn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accd b)};DBQ=' + path + 'F大类08到18年数据.mdb')
crsr = cnxn.cursor()
for table_info in crsr.tables(tableType='TABLE'):
print(table_info.table_name)
rows = crsr.execute("SELECT Fulltext_store_path, attribute_string_14, attribute_string_1, a ttribute_string_13, attribute_text_1 FROM F数据")
csv_writer = csv.writer(open('F08_18.csv', 'w', newline='', encoding='utf8'))
for row in rows:
list = []
for item in row:
if item != None:
list.append(item)
else:
list.append('')
csv_writer.writerow(list)
其中,首先读取所有表的名称,然后再执行SQL游标查询(crsr.execute),逐行读取并将其写到文本文件中(csv.writer)。
如果是苹果操作系统,需要通过Homebrew安装unixodbc,安装方法为brew install unixodbc,然后安装mdbtools(brew install mdbtools),使用命令“mdbexport F大类08到18年数据.mdb 'F0818数据'>output_file.csv”即可导出为csv格式。