图书分类

在Y图书馆做志愿者, 肯定要了解一下索书号的东西. 虽然这个东西并没有一个非常严谨的说法(这个时候不仅感慨, 人脑对于描述不严谨的规则的接受能力竟然是如此的强大. 也许可能这就是专家系统失败的原因和神经网络发展的原因吧? 啊, 扯偏了. ), 但是查查资料, 综合观察观察, 还是感觉能够有一些的逻辑和规则的.

Library Classification Theory

杜威十进制图书分类法

The Dewey Decimal Classification (DDC), colloquially known as the Dewey Decimal System, is a proprietary library classification system which allows new books to be added to a library in their appropriate location based on subject. It was first published in the United States by Melvil Dewey in 1876.
Source: Wikipedia

据说并不是所有国家采用的图书馆分类方法都是相同的, 并且就算是所谓的杜威十进制图书分类法也经过了22次大改版. 于是就会出现许许多多的形式. (参考: 知乎用户tvwuZ7的回答)

哈尔滨市图书馆的分类方法

不过杜威分类法还是和我所在的Y图书馆的有一些区别, 所以为何不妨看看国内的图书馆的分类案例呢?

在专业领域, 我们不称之为”图书编号”, 而是”图书编目”, 是对文献(信息资源)的分类与整理, 按照国家的标准(各国而异, 我国公共图书馆采用《中国图书馆分类法(第五版)》)进行分类(注意, 这是分类号), 再结合自身馆情分配种次号(各馆种次号采用标准不一), 两者共同组成索书号, 从而形成每个馆的馆藏目录体系.
来源: 知乎 哈尔滨市图书馆

虽然还是有一些不同的, 但是这个时候就可以尝试物理学中的实验精神了(乐, 想起了Z老师在物理学院群中的一句: “就算做其他领域, 也要保持物理思维. “. 以及一堆大水车立刻响应号召, 纷纷表示将来要着手书写《作为观念的物理学》, 《作为物理学的观念》, 《物理学观念的作为》, 《观念物理学的作为》等等. ), 用实验去验证理论, 重新修正理论. 嗯.

以手冢治虫的《我是漫画家》一书为例: K833.135/S2333(注: 我改了书的索书号, 防止你猜出来, 虽然改得很假. 嘛, 无所谓. )其中K表达大类分类, 类似的还有I文学类分类. 而之后的数字都满足字典序进行比较, 0-9A-Z这样的顺序.

Y图书馆的图书分类, 以及…

欸, 具体的规则记不清楚了, 含含混混地先写一个简单的匹配规则. 之后会继续细化和完善的. (一个尝试正则表达式的时候了. )

$index_regexp = /\A
  (?<category>[A-Z])               # 大类分类
  (?<category-divide>[0-9]{3})     # 初步细分
  (?<category-subdivide>\.[0-9]+)? # 进一步细分
  \/                               # 分隔号
  (?<item-number>[0-9]+)           # 种次号
  (?<item-subnumber>-[0-9]+)?      # 进一步细分
\Z/x

(等待进一步观察和研究. )

索书号之间通过比较大小(类似字典序)的方式来判断索书号的大小, 并以此来进行排序. 之所以说是一种字典序, 是因为在编号中085会比125要大. 所以判断方式是按位的比较方法. 而分隔符., -, /这些符号, 则对比较的位数进行了一个隔断, 用以更加细致的判断和区分.

于是一个简单的比较方法如下:

# compare "I123.666/233", "K555/244"
def greater?(a_index, b_index)
  a_match = chop_match(a_index)
  b_match = chop_match(b_index)
  (cmp = -> (a, b) {
    cmp_a = a.first || ""
    cmp_b = b.first || ""
    cmp_a != cmp_b ? cmp_a > cmp_b : cmp[a.drop(1), b.drop(1)]
  })[a_match, b_match]
end

def chop_match(index)
  $index_regexp.match(index).to_a.drop(1)
end

以及, 查询

如果是一种计算机的想法的话, 我觉得用二分法的查找方式其实非常的方便. 但是并不是这样的, 倒不如说可以将其看作是一种视角有限查询方式. (感觉可以将这样的东西应用到大数据的感觉, 不过感觉可能也并不是这样的. 就是每次只读取一部分数据, 根据少部分的数据来计算自己所在的位置和用于查询数据. )

(不过这么说来也可以将这个看作是一种图灵机, 把自己看作是一个读写头, 然后根据读到的所在位置上的书的索引号来判断自己的位置, 决定下一次的移动方向. )

移动

面对书架: 向右向下递增, 向左向上递减, 改变朝向(转身180度)递减. 于是不仅让人想到攻壳机动队SAC中笑面男的那间图书馆, 里面的图书管理机器人真的超级炫酷. 不过需要解决的问题是图书的索书号的索引识别(因为很多书因为大小问题会被挡住, 索书号并不一定能够看见, 不过可以被合理的规划解决. ), 然后是机械部分的夹取, 因为书不太方便拿. (不过这个真的超级酷的啊. )

(要是能够做到这些就好了. 那样的话, 估计图书馆也会有很多人来参观, 毕竟机器人在某种程度上来说观赏性也很强. )