欢迎您来到 数字平台。 您尚未登录。[登录] [注册新用户]
当前位置: 论坛首页 / 栏目 产品与服务 / 文章 420

点击:55973[回复顶层] [树状] [详细]
[回复留言] [回复(需要先登录)] [引用(需要先登录)]精品第 1 楼
文章id: 420
查重导入数据发生“误杀”现象

作者: Harry


今天参照“数字平台系统的二次开发体验(一)——数据导入批查重方案”试验了一边倒入一边查重。

{

方案照做之后,有的人(我就是)可能出现“找不到cfgs/dup”错误,解决办法如下:

1.打开dp2内核管理——dp2manager;

2.右键单击服务器节点,在弹出菜单中选择“在下级创建目录或文件”,创建目录名为cfgs;

3.右键单击cfgs目录,在弹出菜单中选择“在下级创建目录或文件”,创建文件名为dup;

4.右键单击dup,在弹出菜单中选择“编辑配置文件”;

5.输入内容如下:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <project name="编目查重" comment="编目查重">
        <database name="你的书目库名" threshold="100">
            <accessPoint name="责任者" weight="50" searchStyle="" />
            <accessPoint name="ISBN" weight="80" searchStyle="" />
            <accessPoint name="题名" weight="20" searchStyle="" />
        </database>
    </project>
    <default origin="你的书目库名" project="编目查重" />
</root>

}

 

 

试验导入了一些数据,功能看起来是正常的,但是仔细检查之后,发现有些书目被“误杀”了,没有重复的却被当成重复书目舍弃了。如下图(右边是查重导入后的)。

如上图左边的1-5,责任者相同,而题名、ISBN不同,被当成重复的,2-5全被舍弃了。

6,7,题名、责任者相同,ISBN不同,200$h不同,被当成重复的,7被舍弃了。

如上两条书目是一套丛书中的不同单册,题名、ISBN均不相同,仅责任者相同,得分也不过50,怎么会被判重了呢,查重过程中我发现有的得分会有200多,而dup中责任者+题名+ISBN才150分,所以可能除了dup文件中设置的查重点,系统内还会有其他查重点,其他重复点得分值加上责任者的分值,可能就超过阀值了。

如上两条书目,题名、责任者相同,ISBN不同,200$h不同,被判重(判断错误),看到这里,我觉得算法中忽略了200$h的权重。

以上两条书目:题名、责任者相同,ISBN,200$h不同,被判不重(判断正确),这下我糊涂了,到底是忽略了200$h的权重还是没有呢?

谢老师,以上的结果让我产生了两点怀疑:

1.是不是我的软件配置有问题,我觉得应该不是,如果没配置好,软件应该不能正常查重。软件查重功能正常,而且大部分结果正确。

2.加权查重算法有问题。

如果是查重算法的问题,那它很难通过重新分配权值来解决,而是加权查重这种算法本身的问题了。就拿200$h来说,该分配给他多重的权值呢,可能一套书题名、责任者、ISBN完全相同,就是分卷不同,他们不能被判重,200$h这一项就超过了题名+责任者+ISBN,而如果给200$h分配了很高的权值,那么两套不同书而200$h相同的书,就有可能被判重了。

加权查重极有可能产生“人多势众”的结果,多个弱权重的加在一起超过了那个掌握真理的少数“人”;

加权查重也有可能产生“以权谋私”的结果,过大的单一掌权者说了算,就损害整体利益了。

拿第一组例子来说,题名不同的书有可能是重吗?应该不算是重吧!但是加权就可能给他判重。

ISBN相同,一定就相同吗?一套书的不同册共用ISBN,就不能判重,一个ISBN给80分,随便加上根稻草,就超过阀值了。

如此组合起来,恐怕结果是n多种,通过预设权值能解决吗?很难吧。是否可以通过多重机制判重呢,可能您已经做了,就是我不知道罢了。

如果不是我的问题的话,这样的查重结果很难令人接受。

如果是我的问题,造成了查重结果出错,麻烦老师指正。

我用的ISO文件一并传上来。

测试.iso

另外,重复数据我选择了保存成gb2312格式,可是打开一看却是UTF8的。



发表时间: 2009-02-27 17:48:21
最后修改时间: 2009-02-27 18:32:55
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 2 楼
文章id: 421
请正确理解加权计算



加权计算查重法,是我们系统有别于其它系统的一个亮点。

既然加权,并不是你理解的一个查重依据就只有你设置的那个权值,比如你说的“查重过程中我发现有的得分会有200多,而dup中责任者+题名+ISBN才150分”。事实上,MARC字段是可重复的,如果你有两个责任者字段一样,一个算50分,两个就有100分了,既然你的阈值设置为100,符合条件,程序当然就提示为重了。

加权查重,也可以说是模糊查重,体现了一种受控的相似度计算。按你所说,同一个ISBN号不一定重,这是事实。但是,除了记录复制,严格意义上说是不容易找到相同的记录的——多个无关字段、多个空格字符、不同的著录细节都会产生“不一样”的记录的。

所以,程序只能根据用户的好恶,由用户来确定记录相似度,这个相似度的定义,全靠用户根据业务要求与经验来调整了——起码,ISBN号相同的,一定有些嫌疑,而即使ISBN号不一样,同一个著者、同一个书名的书,相似度也是很大的。

批查重功能仅是一种提高效率的参考功能,它不能完全替代人工的判断——如果怕错杀,你完全可以将批查重后生成的所谓“重”的数据导入到一个临时库中,再逐条浏览并逐条查重来对照数据嘛。何况,对于重的数据,在业务中也并不是视若无物——也可以对重的记录进行补订或追加订购吧?

有点佩服你的认真与执着:图书馆系统作为一个复杂的、专业的系统,很少有人如你这样,纯因个人研究爱好而钻研这么仔细并寻求这么细的技术支持的。



发表时间: 2009-02-28 01:35:46
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 3 楼
文章id: 422
当求甚解

作者: Harry


既然要把dp2的加权查重法做成一个亮点,那就应该把它做完善,怎么能让用户(不包括我)再手动检查一边呢,这样的得过且过怎么能把这个系统做好呢,孤芳自赏往往就是掩耳盗铃,我话说直了点,望老师勿恼。

我一个不相关的人,花了整整一个下午测试、抓图、写文发上来,不能往我的热心上浇冷水吧。

一个责任者重复就给50分,两个就是100分,这个不好吧,是不是一个责任者重复给50分,第二责任者不重复恢复为0分更符合逻辑呢?!而第二责任者重复继续保持50分,还是60分,还是70分呢?这就难了,权值应当分配给子字段呢?还是当分配给子字段中的各个元素呢,各个元素又当分配多少值呢?看来这需要一个数学家来分析一下了。

问题还是加权查重法本身的问题,或者说加权法是不是适合做查重的问题,望老师深究。



发表时间: 2009-02-28 09:03:23
最后修改时间: 2009-02-28 09:08:46
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 4 楼
文章id: 423
回复: 查重导入数据发生“误杀”现象

作者: xietao


以下是引用 Harry 于 2009-2-27 17:48:21 发表的文字:

今天参照“数字平台系统的二次开发体验(一)——数据导入批查重方案”试验了一边倒入一边查重。

{

方案照做之后,有的人(我就是)可能出现“找不到cfgs/dup”错误,解决办法如下:

1.打开dp2内核管理——dp2manager;

2.右键单击服务器节点,在弹出菜单中选择“在下级创建目录或文件”,创建目录名为cfgs;

3.右键单击cfgs目录,在弹出菜单中选择“在下级创建目录或文件”,创建文件名为dup;

4.右键单击dup,在弹出菜单中选择“编辑配置文件”;

5.输入内容如下:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <project name="编目查重" comment="编目查重">
        <database name="你的书目库名" threshold="100">
            <accessPoint name="责任者" weight="50" searchStyle="" />
            <accessPoint name="ISBN" weight="80" searchStyle="" />
            <accessPoint name="题名" weight="20" searchStyle="" />
        </database>
    </project>
    <default origin="你的书目库名" project="编目查重" />
</root>

}

 

 

试验导入了一些数据,功能看起来是正常的,但是仔细检查之后,发现有些书目被“误杀”了,没有重复的却被当成重复书目舍弃了。如下图(右边是查重导入后的)。

如上图左边的1-5,责任者相同,而题名、ISBN不同,被当成重复的,2-5全被舍弃了。

6,7,题名、责任者相同,ISBN不同,200$h不同,被当成重复的,7被舍弃了。

如上两条书目是一套丛书中的不同单册,题名、ISBN均不相同,仅责任者相同,得分也不过50,怎么会被判重了呢,查重过程中我发现有的得分会有200多,而dup中责任者+题名+ISBN才150分,所以可能除了dup文件中设置的查重点,系统内还会有其他查重点,其他重复点得分值加上责任者的分值,可能就超过阀值了。

如上两条书目,题名、责任者相同,ISBN不同,200$h不同,被判重(判断错误),看到这里,我觉得算法中忽略了200$h的权重。

以上两条书目:题名、责任者相同,ISBN,200$h不同,被判不重(判断正确),这下我糊涂了,到底是忽略了200$h的权重还是没有呢?

谢老师,以上的结果让我产生了两点怀疑:

1.是不是我的软件配置有问题,我觉得应该不是,如果没配置好,软件应该不能正常查重。软件查重功能正常,而且大部分结果正确。

2.加权查重算法有问题。

如果是查重算法的问题,那它很难通过重新分配权值来解决,而是加权查重这种算法本身的问题了。就拿200$h来说,该分配给他多重的权值呢,可能一套书题名、责任者、ISBN完全相同,就是分卷不同,他们不能被判重,200$h这一项就超过了题名+责任者+ISBN,而如果给200$h分配了很高的权值,那么两套不同书而200$h相同的书,就有可能被判重了。

加权查重极有可能产生“人多势众”的结果,多个弱权重的加在一起超过了那个掌握真理的少数“人”;

加权查重也有可能产生“以权谋私”的结果,过大的单一掌权者说了算,就损害整体利益了。

拿第一组例子来说,题名不同的书有可能是重吗?应该不算是重吧!但是加权就可能给他判重。

ISBN相同,一定就相同吗?一套书的不同册共用ISBN,就不能判重,一个ISBN给80分,随便加上根稻草,就超过阀值了。

如此组合起来,恐怕结果是n多种,通过预设权值能解决吗?很难吧。是否可以通过多重机制判重呢,可能您已经做了,就是我不知道罢了。

如果不是我的问题的话,这样的查重结果很难令人接受。

如果是我的问题,造成了查重结果出错,麻烦老师指正。

我用的ISO文件一并传上来。

测试.iso

另外,重复数据我选择了保存成gb2312格式,可是打开一看却是UTF8的。

 
首先感谢您对我们产品如此精心地研究。这够得上知音的水平,这里赞扬一句。
 
需要说明的是,您使用的dp2batch中一边导入一边查重的“方案”,这是属于内核层面的东西。所谓内核层面,就是rmsws内核,加上dp2manager/dp2batch/dp2rms几个前端。这些东西早在图书馆集成系统以前就开发出来了,是所谓数字资源管理系统的部件。
 
当年开发这个层面的查重功能的时候,心里有些矛盾,因为当时并没有图书馆系统。所以,有些把MARC“强加”到里面的意思,有点感到别扭。内核层面,XML数据处理是天经地义的东西,而MARC则是有点不靠谱了。好比一个专业面粉厂,做包子总是副业了。不过从产品角度倒是不必这么较真,因为东西堆起来可以用就行,用户才不太关系什么层次不层次的。
 
内核cfgs/dup配置文件,就是有些别扭的。因为在内核层次,只能这么去设计和安放。而后来有了图书馆应用服务器后,新开发了一套查重机制,配置参数就放在应用服务器数据目录的library.xml中了,这就顺当多了。
 
dp2batch里面通过C#脚本操纵的查重窗,和dp2rms里面的查重窗是一个东西。所以,建议你一般情况下并不要真通过dp2batch一边转入一边查重来进行测验,而是仅仅把数据全部转入某个数据库(不查重地全部转入),而后用dp2rms,把每一条数据装入详细窗,然后用菜单“功能/查重”进行查重研判。在查重窗命中记录列表的每行上面,如果你把鼠标移动到“权值和”这一列,则会飞出一个tips窗口,显示权值的构成情况,非常方便。我今天就是这样进行研判的,而没有用dp2batch的一边转入一边查重方案 -- 我手边没有这个方案。
 
(建议不必用dp2catalog -- 这个属于后面层次的环境,而直接用dp2rms加上查重窗口进行操作就可以了。查重窗口是MDI子窗口,而不是模式对话框,可以保留它并且换到其它窗口,操作非常方便)
 
您说“是不是我的软件配置有问题,我觉得应该不是,如果没配置好,软件应该不能正常查重。软件查重功能正常,而且大部分结果正确”,用我上面说的dp2rms里面查重窗加上tips小窗口就应该容易做出明确判断。而不要用批处理的结果来猜测,那样太间接和模糊了。
 
我研究了“连环谜宫”这一记录。按照你的查重配置参数,命中三个120分,一个100分。原因确如您说的那样,这些记录之间,作者成套重复,但是题名却不一样,出现高分的原因,就是给作者的权重50太高。我没有修改您的阈值100分,而仅仅把作者的权重修改为20,查重结果就非常“合理”了。原来超过阈值的三个,现在就是60分了。
 
我修改后的权重配置如下:
        <database name="中文图书" threshold="100">
            <accessPoint name="责任者" weight="20" searchStyle="" />
            <accessPoint name="ISBN" weight="80" searchStyle="" />
            <accessPoint name="题名" weight="20" searchStyle="" />
        </database>
 
我们来分析一下:就算责任者和题名都一样,如果ISBN不一样,还是仅仅40分,不能超过阈值。如果发生匹配的作者不止一个,例如两个、三个,也都不能超过阈值。我这样配还算合理吧?
 
用我的例子,我证明了目前这套加权体系算法还是好用的。用您的例子,证明了这套加权算法有不合理之处。那么,我们两个的说法,哪个对呢?哪个都对。我们的说法涉及到不同层面,互相不矛盾。
 
我的例子,表明了设计权重要有不少讲究。这等于暗示,如果权重设计“不合理”,则会出现非常“不讲理”的结果。
 
如果需要做出一个总结,就是,因为这种算法很简单,那么在权重设计上动一点脑筋,还是值得的。因为它简单,简单就是金不换。
 
感谢您给出的这么简单而明晰的例子,证明了作者多次命中后的可能结果。您也给出了改进的方向,就是抑制同一检索途径多次命中后的分数。我不好意思夸您“聪明”,因为这个改进方向是如此直白和简单,我怕夸奖了您以后您反而不高兴。不过这个思路还是您提出的,我不敢掠美,这点大家都可以看到。
 
目前这个加权配置体系,我觉得有两个地方可以做文章。我提前说一下,只看出一个地方的,就不如我了,提前表扬一下自己。
 
第一个地方,是weight属性。记得在我设计读者借阅权限参数的时候,要定义续借的借期。续借还可能好多次。我就这样定义,连同第一次借阅:60day,30day,15day,...。用意很直白。现在,可以类似地改进weight定义:50,20,1,0,...。随着命中的次数越多,加权的分数越来越低。
 
第二个地方,是searchStyle属性,已有的用途是放匹配方式精确一致还是前方一致等的,现在扩展一个新的style,例如可以叫做“only_first_hit”什么的,让程序知道,除了第一次命中,以后的命中都不加分。
 
当然,第二个地方的配置,相当于第一个地方的配置的极端情况:50,0,...。
 
从这里看出,我们采用了XML来描述配置参数的时候,获得了空前的扩展空间,设计过程不再成为一种烦恼。有时候形式对内容的束缚和影响还是很大的。
 
总结一下:今天我首先提出了在现有体系下规避问题的办法;然后提出了改进体系的方案。
 
关于“保存成gb2312格式,可是打开一看却是UTF8的”,我这里暂时还没法操作,等过两天回答您。


发表时间: 2009-02-28 17:28:36
最后修改时间: 2009-02-28 17:54:22



[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 5 楼
文章id: 424
回复: 当求甚解

作者: xietao


==========

以下是引用 Harry 于 2009-2-28 9:03:23 发表的文字:

既然要把dp2的加权查重法做成一个亮点,那就应该把它做完善,怎么能让用户(不包括我)再手动检查一边呢,这样的得过且过怎么能把这个系统做好呢,孤芳自赏往往就是掩耳盗铃,我话说直了点,望老师勿恼。

我一个不相关的人,花了整整一个下午测试、抓图、写文发上来,不能往我的热心上浇冷水吧。

一个责任者重复就给50分,两个就是100分,这个不好吧,是不是一个责任者重复给50分,第二责任者不重复恢复为0分更符合逻辑呢?!而第二责任者重复继续保持50分,还是60分,还是70分呢?这就难了,权值应当分配给子字段呢?还是当分配给子字段中的各个元素呢,各个元素又当分配多少值呢?看来这需要一个数学家来分析一下了。

问题还是加权查重法本身的问题,或者说加权法是不是适合做查重的问题,望老师深究。

==========

现在的体系虽然不完善,但是改进起来却很容易,所谓9个馍馍和第10个馍馍的关系。

关于算法不可相信,需要用户手动操作的思想,这是我们一贯的看法。不过不影响我们把现有的东西努力做到尽善尽美。两方面不矛盾。

您测试和写文的方式很好,我们自己就是这么认真工作的,今后有机会您会逐步了解到。夸您就是夸我们自己,我们都是认真的人,毛主席说了,世界上怕就怕认真二字,认真起来,能量会很大的,会做出原来意想不到的成绩,我们叫“超水平发挥”。

刚才我在楼上说了,您的思路很好,简单又明了。

关于权值分配给子字段,这个说法有些模糊。因为权值本来是和“检索途径”相关的,一个检索途径就是一个最小的单元,无法再小。而一个检索途径,可以仅仅由一个子字段构成,也可以由多个子字段(甚至包括不同字段内的子字段)构成,都是可以的,所以,隔着检索途径的外壳说,权值当然有时候是对应某个子字段,有时候是对应一组子字段了 --- 间接地对应上。既然概念有区隔,那么我们乐得少死一点脑细胞,从宏观搭桥思考就可以了。

我在楼上说过了,目前这个加权算法(改进前)还是可用的,不如您说的那样不堪。好比普通汽车通过正常的司机控制,还不至于撞人,虽然汽车还没有配备自动避撞系统。但是算法的缺点是明显的,尤其是用您提供的例子突出了这个缺点后。这好比汽车要加装自动避撞系统,只要可行,我不反对。装了避撞系统后,眼睛不好的司机开着也安全了。

类似的事情很多。我们提供了MARC编辑器后,有的用户把数据编得井井有条,而另外的用户就把数据编得乱七八糟。其实目前的软件绝大部分还是要老老实实停留在一个“工具”的位置,用户的使用方式方法起到了化腐朽为神奇的作用,用户的因素、人因素还是很重要的。就目前这个加权算法来说,就是这样,我们可以多花一点精力来探讨如何把权重配得更完善一些,也是一种生活方式。在它不完美的情况下,也是可以用的,有个怎么用的问题。并且,在有缺点的时候就用得好的,往往在缺点消失后更能用得好,努力也不是白费的。



发表时间: 2009-02-28 17:47:10



[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 6 楼
文章id: 425
不能完全解决问题

作者: Harry


谢老师,rms里面查重的我还没试验,单对batch这里,您的设置还是不能完全解决问题,比如以下两种情况:

1.一套书共用ISBN,比如金庸的《鹿鼎记》,出版商把它做成五本,ISBN(80)、题名(20)、作者(20)都一样,加起来就120了,重了。200$h不一样,就不能算重!这种情况十分普遍,上下册共用ISBN的太多了。

2.一本书有很多作者,有很多超过五六个的,论文这种情况就很普遍了(一个导师写篇文章恨不得把他的学生全带上,论文不做MARC,但是电子化收录是有,查重也要用到),200字段一般只著录三个,而702字段却要全部著录上,这个老师领导他的学生写的第二篇论文就极有可能不能被系统收录,加权算法把它判重了,哪怕一个学生重复就给10分权重。

MARC书目里面影响因素太多,更改设置可能对这批书有效,换一批就无效了。真的要用加权算法,那恐怕真的要一位数学家仔细研究MARC后设置一个比较好的权重分配体系,这样就不像您说的是一种简单的查重实现方法了。

是否可以参考人判断一本书是否重复的思维模式呢。

人在判断两个复杂事物,比如书目,是否相同的时候,肯定不会给一个点设置分值,然后边比较边在脑子里加分。在逐点比较的时候,人会每比较一个点就做出一次综合判断:要么相似则继续比较;要么得出结论不相似,退出;人的判断往往最准确,这就是一种是非关系,计算机就用0、1就可以模拟了。

设置key=0(不重复)

1、先比较ISBN,相同则key=1,继续;(否则,key=0,退出,判不重,ISBN不同的书不可能重复,至少我询问的有经验的编目员说不可能,除非著录错误)

说明:ISBN相同的未必就重,200$h未必相同。

2、比较200$h,重复key=1,继续;(否则,key=0,判不重)

说明:到这里200$h重了未必就重,可能是再版书,再版书有可能用前一版的ISBN(这样可能给出版商省钱吧)。

3、比较205字段或200$e,重复key=1,继续;(否则key=0,判不重)

按说,到此应该结束了,但是为了防止盗版书盗用别人ISBN(200$h和205及200$e均为空),再继续比较。

4、题名重复,key=1,(不重复,key=0,退出)

5、第一责任者(很重要,只比较第一责任者,第二责任者参考价值不大)也一样,key=1,那重复可能性太大了;(若不重复,key=0,退出)

6、再看看出版社,出版社也一样,key=1。(否则key=1,退出)

7、再比较出版年(不比较月份,很多Marc不著录月份),相同ke=1,(否则key=0,退出)

结束,key=1 重复,key=0不重复。

可能不是很严谨,就是表达一个意思,这样的算法很简单,也不太容易犯错,给老师参考。



发表时间: 2009-02-28 18:51:24
最后修改时间: 2009-02-28 19:11:51
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 7 楼
文章id: 426
回复: 不能完全解决问题

作者: xietao


==========

以下是引用 Harry 于 2009-2-28 18:51:24 发表的文字:

谢老师,rms里面查重的我还没试验,单对batch这里,您的设置还是不能完全解决问题,比如以下两种情况:

1.一套书共用ISBN,比如金庸的《鹿鼎记》,出版商把它做成五本,ISBN(80)、题名(20)、作者(20)都一样,加起来就120了,重了。200$h不一样,就不能算重!这种情况十分普遍,上下册共用ISBN的太多了。

2.一本书有很多作者,有很多超过五六个的,论文这种情况就很普遍了(一个导师写篇文章恨不得把他的学生全带上,论文不做MARC,但是电子化收录是有,查重也要用到),200字段一般只著录三个,而702字段却要全部著录上,这个老师领导他的学生写的第二篇论文就极有可能不能被系统收录,加权算法把它判重了,哪怕一个学生重复就给10分权重。

MARC书目里面影响因素太多,更改设置可能对这批书有效,换一批就无效了。真的要用加权算法,那恐怕真的要一位数学家仔细研究MARC后设置一个比较好的权重分配体系,这样就不像您说的是一种简单的查重实现方法了。

是否可以参考人判断一本书是否重复的思维模式呢。

人在判断两个复杂事物,比如书目,是否相同的时候,肯定不会给一个点设置分值,然后边比较边在脑子里加分。在逐点比较的时候,人会每比较一个点就做出一次综合判断:要么相似则继续比较;要么得出结论不相似,退出;人的判断往往最准确,这就是一种是非关系,计算机就用0、1就可以模拟了。

设置key=0(不重复)

1、先比较ISBN,相同则key=1,继续;(否则,key=0,退出,判不重,ISBN不同的书不可能重复,至少我询问的有经验的编目员说不可能,除非著录错误)

说明:ISBN相同的未必就重,200$h未必相同。

2、比较200$h,重复key=1,继续;(否则,key=0,判不重)

说明:到这里200$h重了未必就重,可能是再版书,再版书有可能用前一版的ISBN(这样可能给出版商省钱吧)。

3、比较205字段或200$e,重复key=1,继续;(否则key=0,判不重)

按说,到此应该结束了,但是为了防止盗版书盗用别人ISBN(200$h和205及200$e均为空),再继续比较。

4、题名重复,key=1,(不重复,key=0,退出)

5、第一责任者(很重要,只比较第一责任者,第二责任者参考价值不大)也一样,key=1,那重复可能性太大了;(若不重复,key=0,退出)

6、再看看出版社,出版社也一样,key=1。(否则key=1,退出)

7、再比较出版年(不比较月份,很多Marc不著录月份),相同ke=1,(否则key=0,退出)

结束,key=1 重复,key=0不重复。

可能不是很严谨,就是表达一个意思,这样的算法很简单,也不太容易犯错,给老师参考。

==========

> 1.一套书共用ISBN,比如金庸的《鹿鼎记》,出版商把它做成五本,ISBN(80)、题名(20)、作者(20)都一样,加起来就120了,重了。200$h不一样,就不能算重!这种情况十分普遍,上下册共用ISBN的太多了。

上次没有来得及说200$h的事情。200$h按照一般惯例是不进入检索点的。道理很简单,和页码不进入检索点一样。

因此,在目前这个查重体系下,200$h不能参与运算。为查重而增加一个200$h的检索点,我觉得不值。

目前这个查重算法,有一个很好的思想,就是尽量利用现有的编目检索点。编目检索点是为了通用,为了大部分用途而设立的,不一定是为了查重的某种特殊需要而设立。

当然,不是检索点的200$h内容,可以在已经(通过其他检索点)命中的结果集中参与进一步的过滤(或者称为二次检索)运算。

另外,上下册应当怎样著录?原则上是尽量著录在一条编目记录中。我接触编目多年,有很多资深的编目员朋友,这点常识我还是有的。至于,许多单位把上下册分开著录,往往是因为每册有单独的价格或者ISBN号(这后者属于不正常的情况),在一些不合格的编目软件产品中,过分强调畸形的全部信息相同才能算一种的概念,而册信息单薄、没有价格例外等措施,这样操作是可以理解的,但是违背编目的基本思想。

现在dp2系统则很强调种的聚集、册的例外信息描述,册记录面有单独的价格字段,单独的卷期册字段,上述分开著录的办法可以休矣。正因为册信息里面能容纳不同,所以种能够“和”,和而不同。所以,在200$h不同的记录之间算不算重,我和你恰恰有相反的结论。从编目员的角度,如果要著录下册,而套录到了上册的数据,这已经算达到目的了,稍微修改一点就可以用(而且是一条上下册通用的书目记录)。这怎么就不算命中呢?你给我个理由先!

在极端情况下,如果编目员非要给一套丛书仅作一个编目记录的“综合著录记录”跟随所有册记录,dp2系统也能游刃有余。

我再举一个例子,探讨一点所谓编目意识。如果两种编目记录,完全是同样一种书,在所谓“一边查重一边转入”过程中,后面一条记录因为前面已经有了,就没有转入。这是一种正常的行为么?不见得正常。举例来说,如果第二条记录的编目质量较高,特别是有高质量的主题词和分类号字段内容,那实际上应该用第二条覆盖第一条才对。否则就成了武大郎开店,高的反而进不去了。

这里面,实际上包含了一个评估两条已经重了的记录的质量的课题,或者说,即便在手工操作下,有一个取长补短的字段合并课题,不是谁覆盖谁,而是两条记录各自抽取一些内容然后合并。手工操作下,这问题很好解决,人来判断就可以了;而迷信软件自动去操作,就像现在的机器翻译课题一样,是一个非常难的问题,实用化程度很低。dp2系统在这个方面,小心地平衡各种因素,今后还将提供一些技术进步和新设施。不过要谨慎,这里面水很深,不可小瞧。

鉴于您现在的身份,在图书公司工作,基于给用户提供立竿见影的低质量的服务(抱歉,我说了实话),管它什么数据,弄个软件三七二十一合并了给用户就行了,数据来源本身是盗版,负责合并的人更没有专业知识,也没有那个海量处理的精力。主要目的是卖书赚钱,数据是团体客户要数据,书店本不喜欢弄什么数据,无奈用户提出了要求,不得不随便弄一点。从这个角度,江汇泉的“畏难”情绪并不是一种低级的情绪,而是我们长期素养的一种体现。对这类急功近利的需求,我们多数时候退了几步,给出了一定空间,而不去硬来,这恰恰是一种成熟的态度。

所谓各自的角度不同,自然态度不同。我目前倒是乐于接受外来的新鲜思路,对于图书公司的实用化的追求也抱有积极配合的态度。但是我们不能丢了西瓜捡芝麻,而要向您曾说过的 -- 继承,继承的基础上发展,理论水平不降低,然后提高实践水平。这方面确实需要实际用户的推动,包括来自图书公司的推动。有项目做才是硬道理!公司不是研究机构,需要实际的推动才行。

> 2.一本书有很多作者,有很多超过五六个的,论文这种情况就很普遍了(一个导师写篇文章恨不得把他的学生全带上,论文不做MARC,但是电子化收录是有,查重也要用到),200字段一般只著录三个,而702字段却要全部著录上,这个老师领导他的学生写的第二篇论文就极有可能不能被系统收录,加权算法把它判重了,哪怕一个学生重复就给10分权重。

这个问题难不倒我。如果从要维护现有的权重体系的角度,我会给题名99分,著者1分。题名和一个著者重复,100分,够阈值了吧?而要题名不同而著者相同达到阈值,岂不是要100个著者相同才行?如果我把阈值改为1000分,题名999,著者1分呢?那就再多的著者也不怕了。不要低估了这套加权体系的灵活空间。

搞软件开发的玩的就是智商和逻辑推理。请重视一下我说出的话:现有的体系空间很大,你能找出不利的理由,我能找出有利的理由。你不妨多从两方面都想一下。反对以前,给出分量足一点的案例。当然,这属于设计、思辨层面的攻防模拟,不属于真刀真枪的开发行为。但是常思考、善思考总是没有坏处的。

而如果从改进这个体系的角度,我把楼上的新思路实现了就可以了,重复著者再也不会成为烦恼,过两天您看看新版本再说吧。我觉得我已经太周到了,两边都讲到了。讨论也应该有进步,不应该还停留在前两天没有改进方案时候的情绪中。

> MARC书目里面影响因素太多,更改设置可能对这批书有效,换一批就无效了。真的要用加权算法,那恐怕真的要一位数学家仔细研究MARC后设置一个比较好的权重分配体系,这样就不像您说的是一种简单的查重实现方法了。

不是这样的。一种权重体系,完全可以设计成对大部分情况都有效。检验的方法很简单,让软件查重,然后人工核对甄别。依靠统计数据,逐渐提高配置方案的表现和质量。这是一个体力活。只是我们目前没有太多精力做这样的事情。

我们提出的加权体系提供了一个很好的平台,但是没有能力给出一个非常好的权重分数例子。这好比word给出了排版的完全自由,但是可能没有预先携带某些现成的模板,容易造成用户对它的可能空间的轻看。我觉得我们这配置体系已经不错了,您完全可以稍微研究一下,弄出较好的分数方案,算是各出一半力气,得个好结局。您现在是破坏性思维模式,力图要证明它不好。其实如果反过来,您力图要证明它好,很快就会找到很好的分数方案。应用性的领域,倾向性是很重要的,所谓理论思维不要走极端。

“要一位数学家仔细研究MARC后设置一个比较好的权重分配体系”,这有点夸张了。稍微积累一点经验,多一点样本数据测试,就可以弄好的。要不然我们打赌,您出钱,我找人给你马上弄?实践领域,最怕来真的。一来真的,原先的顾虑的那些就都没有了。好比我那一段潜心核对著者号码表数据,找出每一个错误,我自就是一个校对员,有什么干不了的呢!一个星期很快就弄完了,不用求什么打字员数据录入员。

~~~

感谢您提出的判断流程。

我这里给您讲讲我开发生涯多年来悟出的一些门道。从产品角度,您已经看到产品了,和我看到的基本一样。但是从结构上,从思路上,我的眼睛和思路是X光机,透视看到的图像和角度可能和您感觉的差异很大,甚至面目全非。

加权查重的体系,可贵就可贵在它是一个彻底对称和自构的方案,特别符合计算机的基本算法的原则。不要轻看它,即便是找到了少量反对的案例。

打个比方,乐高的基本拼插部件,仅仅是少数几个基本形状。通过拼接,可以构造出复杂的形状。当然,也存在一些预先就是复杂形状预制件,但是这些预制件的可重用性不强,或者说生产的批量不够大。也好比我们砌墙的砖头,都是一个形状。有人问,我要一百米的墙怎么办?砌到一百米就行了,不必要造一块一百米长的专用砖头。

当然,这样的方法有时候会有缺点,比如乐高的基本部件虽然可以拼接为复杂形状,但是容易坑坑洼洼的,一看就是拼起来的,不如专用部件形状那么贴切。

从我的角度,如果属于对称和自构的方案,有少量缺点,但是实践表明缺点不足以否定对称和自构的强大优点,那我就还是用对称和自构的简单方案,而尽量不用专用的方案。这里面有成本因素、可维护因素等多方面的考量。

您提出的判断流程,仅仅是对特定的图书类型的一种判断流程,不是通用的。和上述权置体系不在一个层面。如果我要实现,比方说在现有的查重窗上加上C#脚本代码实现(为一个特定的二次开发方案),我在软件一次开发固件方面要做的事情仅仅是提供一些函数,而具体的流程和相关代码永远是一个一个具体的案例,属于用户的部分,而不是属于我们这个平台系统的部分。也就是说,虽然我们的系统对中文图书库缺省提供的题名和责任者的检索点,但是本质上来说我们什么也没有提供,题名和责任者仅仅是那个具体的配置文件的事儿,还到不了系统层次。从系统层次,它仅仅看到一个一个抽象的字段,并不偏爱其中任何一个,不在一次开发代码里面固化任何一个。

也好比我们做裁缝,永远是客人来了量体裁衣,而不是做大批成衣、均码。我们准备的只能是布料,客人来了以前,我们没法预知他的身高的胖瘦。

从我们的体系结构讲,什么东西要进入一次开发的代码,那是非常严格的。您看看,连上述的题名和责任者有关信息都是进不了一次开发代码的,永远在外围配置体系中。所以,您提出的思路,只能在二次开发中实现(即便可能是由我们来编写)。从目前来讲,还没有推广的必要,仅仅作为您自己的、或者您单位的特定做法。

而加权体系可以进入一次开发的代码。当然,具体的分数方案进不了一次开发的代码。

如果您把自己提出的方案改变为一个通用的算法(而具体几步的流程可以作为一个案例来表述),那另当别论。Microsoft最近一两年增加了一些流程灵活定义处理的通用设施,这方面也有可能在将来作出一些努力,有实现的可能。

~~~

最后要说一点,编目领域关于查重和去重,乃至记录合并,有不少误区,包括许多专业人员都存在认识误区。

我这里给你出一个思考题:编目数据查重不良,也就是说时有重复,会对图书馆业务系统带来什么具体的负面的影响?这个题目没有标准答案,但是我的答案肯定会让别人感到一定程度的意外,而且随着年头变长,我的答案有不断变简单的倾向。



发表时间: 2009-02-28 21:58:07
最后修改时间: 2009-02-28 22:32:27



[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 8 楼
文章id: 427
难以深入

作者: Harry


由于我是一个“非专业”的计算机专业毕业生,水平有限,以及对dp2的了解还不够深,有些问题可能很难深入下去,看来要做您的知音,还需要时间啊。

现在我就问题论问题说一下吧,一边倒入一边查重是针对江老师写的“二次开发体验”来试验的,试验结果不令人满意,以这个结果来否定加权算法应该说还不充分,但是用来否定加权法在Marc导入查重方面的应用已经很充分了。

dp2的核心rmsws,如果我猜的没错的话,应该翻译为Resource Management System Web Service,名字就能看出您要做一个很通用的东西,加权法被放入您所说的一次开发,应该是针对于通用数据检索的,作为数据检索应用,用加权法判断数据的“相似”度,应该是一种很好的办法,就像是用google搜出来的很多结果,有相关的,也有不那么相关的,权值高的最相关,权值低的不相关,作为用户来说,找到了能找到的最相关的数据,即便有一些不相关的结果,我不看就是了,对软件的评价不会降低,就像是如果用dp2套录书目数据,搜出多个结果,我只用其中最相关的一条就好了,对软件也不会提出异议。

但是反过来,如果用这种方法排除数据就不那么恰当了。假设,仅仅是假设啊,我自己的数据库,想要排除一批数据,装上google引擎进行搜索,如果产生了很多不相关结果都删除了,那不就造成了数据丢失了吗?!这样我肯定要破口大骂了。一边导入一边查重的应用就类似于很多数据被无辜排除了。

这个地方是不是不要那么高的自动化呢,出现重复数据的时候给用户一个手动决定的机会,就像是搜索引擎会给一个结果list,而不是帮你打开相关页面。基本的工作软件做好了,决定权在用户,这样的机制您觉得怎么样呢?这应该是软件设计方面的问题,而不是核心算法的问题了。

不知不觉间,好像我已经妥协了;但我好像也提出了一个很有意思的话题(这是学您啊,有点喜欢“自吹”,哈哈。),要进行最不相关的检索应该用什么方法呢?当然这个问题也看不到有什么实际应用,说说算了。

顺便说一句,我不工作于图书公司,更不提供低质量的服务,当今社会谁不是眼红脖子粗地竞争,客户不提的东西都想帮人家做好,客户的要求就更不敢怠慢了,我们(肯定不止我们)做事情都是精益求精,千万不要小看了别人的敬业精神。

另外,为客户着想,与客户仔细沟通,发觉客户需求,尽量满足客户的要求才是商道;把自己的精美设计理念强加给客户,“你不懂就是农民,就不配用我们产品”的想法,是只有书呆子才会干的事,就是低“商商”的表现。什么是标准,客户的话就是标准,他说让你上下册分开著录,就得分开著录;你要坚持所谓的标准,不愿意干,那好啊,排队等着的多着呢,我们面对的就是这样的市场,残酷的让人无法坚持真理。...唉,说过了不再说闲话的,晕。

另外,这两天我在看您的rmsws,很感兴趣,我猜的没错的话他既包含web service接口,也包含数据库逻辑层,安装后也只有1M多,会有多么强大的功能呢?我很想详细地了解一下,可惜您只提供了API,却未提供相关说明,能否提供相关文档,不知道您是否欢迎基于rmsws的二次开发,也不知道我的要求是否过分。您既然做的是“数字平台”,那肯定欢迎人在上面跳舞吧?



发表时间: 2009-03-01 13:43:40
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 9 楼
文章id: 428
回复: 难以深入

作者: xietao


==========

以下是引用 Harry 于 2009-3-1 13:43:40 发表的文字:

由于我是一个“非专业”的计算机专业毕业生,水平有限,以及对dp2的了解还不够深,有些问题可能很难深入下去,看来要做您的知音,还需要时间啊。

现在我就问题论问题说一下吧,一边倒入一边查重是针对江老师写的“二次开发体验”来试验的,试验结果不令人满意,以这个结果来否定加权算法应该说还不充分,但是用来否定加权法在Marc导入查重方面的应用已经很充分了。

dp2的核心rmsws,如果我猜的没错的话,应该翻译为Resource Management System Web Service,名字就能看出您要做一个很通用的东西,加权法被放入您所说的一次开发,应该是针对于通用数据检索的,作为数据检索应用,用加权法判断数据的“相似”度,应该是一种很好的办法,就像是用google搜出来的很多结果,有相关的,也有不那么相关的,权值高的最相关,权值低的不相关,作为用户来说,找到了能找到的最相关的数据,即便有一些不相关的结果,我不看就是了,对软件的评价不会降低,就像是如果用dp2套录书目数据,搜出多个结果,我只用其中最相关的一条就好了,对软件也不会提出异议。

但是反过来,如果用这种方法排除数据就不那么恰当了。假设,仅仅是假设啊,我自己的数据库,想要排除一批数据,装上google引擎进行搜索,如果产生了很多不相关结果都删除了,那不就造成了数据丢失了吗?!这样我肯定要破口大骂了。一边导入一边查重的应用就类似于很多数据被无辜排除了。

这个地方是不是不要那么高的自动化呢,出现重复数据的时候给用户一个手动决定的机会,就像是搜索引擎会给一个结果list,而不是帮你打开相关页面。基本的工作软件做好了,决定权在用户,这样的机制您觉得怎么样呢?这应该是软件设计方面的问题,而不是核心算法的问题了。

不知不觉间,好像我已经妥协了;但我好像也提出了一个很有意思的话题(这是学您啊,有点喜欢“自吹”,哈哈。),要进行最不相关的检索应该用什么方法呢?当然这个问题也看不到有什么实际应用,说说算了。

顺便说一句,我不工作于图书公司,更不提供低质量的服务,当今社会谁不是眼红脖子粗地竞争,客户不提的东西都想帮人家做好,客户的要求就更不敢怠慢了,我们(肯定不止我们)做事情都是精益求精,千万不要小看了别人的敬业精神。

另外,为客户着想,与客户仔细沟通,发觉客户需求,尽量满足客户的要求才是商道;把自己的精美设计理念强加给客户,“你不懂就是农民,就不配用我们产品”的想法,是只有书呆子才会干的事,就是低“商商”的表现。什么是标准,客户的话就是标准,他说让你上下册分开著录,就得分开著录;你要坚持所谓的标准,不愿意干,那好啊,排队等着的多着呢,我们面对的就是这样的市场,残酷的让人无法坚持真理。...唉,说过了不再说闲话的,晕。

另外,这两天我在看您的rmsws,很感兴趣,我猜的没错的话他既包含web service接口,也包含数据库逻辑层,安装后也只有1M多,会有多么强大的功能呢?我很想详细地了解一下,可惜您只提供了API,却未提供相关说明,能否提供相关文档,不知道您是否欢迎基于rmsws的二次开发,也不知道我的要求是否过分。您既然做的是“数字平台”,那肯定欢迎人在上面跳舞吧?

==========

> 现在我就问题论问题说一下吧,一边倒入一边查重是针对江老师写的“二次开发体验”来试验的,试验结果不令人满意,以这个结果来否定加权算法应该说还不充分,但是用来否定加权法在Marc导入查重方面的应用已经很充分了。

一边导入一边查重的dp2batch的方案,我们主要是为了特殊需求的用户准备的。楼上我已经说了,在发现两条数据基本重复的前提下,这个批处理流程没法进行数据的质量判断,没法进行合并,而是简单放弃转入后面的“重”的记录,这样处理有很多问题。虽然有很多问题,但是这种处理办法有用户喜欢,我们没办法拒绝。

而我们主要推荐的利用外部数据源的方式,很简单,就是让用户开辟一个专门的数据库,比如叫做“源书目库”,然后将所有的外部数据装入,根本不要什么批查重。当编目人员需要的时候,他会去检索这个源书目库,检索命中多条也没有关系,他自会作出选择和判断。这个模式早就有了,不是什么新玩意。

而dp2rms里面的查重窗,主要提供给“实时”操作用。也就是说,什么时候编目员觉得想要查重了,在当前记录上触发查重功能,然后查重窗列出一个查重的命中结果列表。列表中也会有阈值方面的参考信息,但是仅仅供编目员参考,而不是强迫说什么一定算重、什么一定不算重。因为这是事件驱动的操作模式,很灵活,并不需要我们开发者规定一个用户的操作顺序。说白了查重窗就是一个带有阈值的普通检索窗而已。

这个查重窗的一个副业,才是被批处理程序中二次开发方案的脚本调用。在批处理的脚本调用的时候,江汇泉给出的这个例子,显然很简单,是看了阈值相关情况就决定“是”还是“否”。但是脚本程序可以编写得很复杂,功能很丰富。也就是说,您在楼上提出的设想,在脚本程序中完全可以实现。这就是我们平台的威力。当然,值得不值得这么去做,或者做一次给您看看让您高兴高兴,那就要看相关条件是否具备了。

否定加权算法的作用和价值和正确性,您说的这些都不够。楼上说了,您有本事去弄个大型的试验,要有试验结果才行。哪有随便找出一点例外,就说这个算法不行?而且您的例外也被我破解了,修改了一点参数,就变得不例外了。我觉得您目前否定不了这个算法的什么。

> dp2的核心rmsws...加权法被放入您所说的一次开发,应该是针对于通用数据检索的,作为数据检索应用...

加权算法不是rmsws这一层的。而是在它上面(外面)一层的东西。在dp2rms里面实现的,明明就是一个“前端”的模块,而不在WebService中。

而图书馆应用服务器也实现了类似的加权检索评估算法,虽然它处在图书馆应用服务器的WebService内,但是相对于内核rmsws来说,却又是典型的Client层。

> ...但是反过来,如果用这种方法排除数据就不那么恰当了...

上面刚刚给您讲过了,一边转入一边查重是一个无关紧要的、用户选用的二次开发方案。用户完全可以不用。您不用夸张。

外来数据的导入主要数据是提供选用。重了也根本不是问题,只要能查出来加以利用就可以。凡是脑筋正常的人,都不会对要参考的外部数据进行查重、过滤。过滤个什么劲呢?

就好比您去图书馆办一个借书证,规定说这个证可以借100万册的范围中的多少本,可以您却非闹着要把可选范围降低为10万册。不可思议。

至于要用一边查重一边导入的方式来创建图书馆“正式数据”,这是相当不严肃的,我们不会推荐用户这么去用。(正确的方法是,用户需要一条一条手动从源数据库中检索、确认、修改合并、保存) 说实在话,这个方案完全是一个鸡肋,找不到什么恰当的场合来用它。我要写文章,都不会写这个话题。江汇泉有点偏爱这个模块,可能是因为他接触的用户多,有些用户比较看重这个而已。

> ...这个地方是不是不要那么高的自动化呢,出现重复数据的时候给用户一个手动决定的机会,就像是搜索引擎会给一个结果list,而不是帮你打开相关页面。基本的工作软件做好了,决定权在用户,这样的机制您觉得怎么样呢?这应该是软件设计方面的问题,而不是核心算法的问题了。

dp2rms里面的详细窗和查重窗结合起来的模式,正是这个意思。您不去用用感受感受,却好像在这里得到了一个“新”想法似的。查重窗设计为一个标准的MDI子窗口,和详细窗平等,可以随时互相切换着操作,正是为了提供事件驱动的灵活操作模式,目的是想要用户通过一切可用的设施来决定和编辑,软件仅仅提供一个操作环境,并不施加什么明显的流程。

我们很早就把这种模式,叫做“实时”操作模式。相对于“批处理”的明显流程循环的模式。

> 顺便说一句,我不工作于图书公司,更不提供低质量的服务,当今社会谁不是眼红脖子粗地竞争,客户不提的东西都想帮人家做好,客户的要求就更不敢怠慢了,我们(肯定不止我们)做事情都是精益求精,千万不要小看了别人的敬业精神。

我的意思是,凡是对一边查重一边转入的所谓“爽”方式感兴趣的人,都是一种类似的思维模式和喜好。您一上来就剖析这个东西,不能不说透露出了您的某些口味。当然,也有可能是资料和选择范围不足,或者某种偶然性造成的。

> ...把自己的精美设计理念强加给客户,“你不懂就是农民,就不配用我们产品”的想法,是只有书呆子才会干的事,就是低“商商”的表现...

说这个话要看场合。如果对一般用户,不说也罢。对您这样的高级人士,我还是觉得说实话最好:我觉得设计就是某种强加,用户是不知道自己要什么的。当然,你的产品出来以后,他们看了,会知道自己喜欢不喜欢,合适不合适。但是他们没法在产品出来前预先知道。这就是制造者和用户的本质区别。

设计产品,当然需要很高的智商。而一般性评价产品,不需要太高的智商,因为这里面口味喜好的成分很大,口味本身无对错。但是,如果在公司里面谋职,要解剖一个产品给出“建设性”的意见,要对智商的要求太高太高了。当然,我声明,这并不是对一般用户的要求。

> ...什么是标准,客户的话就是标准,他说让你上下册分开著录,就得分开著录;你要坚持所谓的标准,不愿意干,那好啊,排队等着的多着呢,我们面对的就是这样的市场,残酷的让人无法坚持真理...

客户的话不是标准,不能随便讨好用户。讨好是要遭报应的,特别是,一群用户和另一群用户的口味并不相同,您要讨好那边呢?

就著录的事情而言,我们现在做到是您随便著录。例如上下册在一起,或者上下册不在一起。都能做到。当然这也是拜MARC的灵活性所赐,软件在这里只要不去干预这种先天的灵活性就可以了,并不需要做什么伟大的创造。

但是,作为一个有作为的公司,必定要有自己的学术观点和形象。哪种方式著录不标准,不好,我们见到了会指出来,会推荐专家咨询,甚至会办培训班。我们绝对不会看到人家著录有问题还夸,那岂不是太不厚道了?

从我们和用户打交道的经验来看,这方面的提醒非常重要。用户一方面通过这些感知到公司这群人的分量,另外也要求软件基本的、缺省的配置,应当是正统的,充满标准和规范的,以便给起步的用户一个正面的引导。

把话说开一些。如果真的出现特别不规矩的用户,强行要把我们的产品往不标准、不通用的方向去引,我们通常会拒绝。丢失点生意不算什么,眼光要长远。退货也不怕,用户觉得不好用,就可以退货。

> ...rmsws,...我猜的没错的话他既包含web service接口,也包含数据库逻辑层...

rmsws的作用是提供一个“逻辑数据库”层。享用rmsws的开发人员,觉得这个逻辑数据库的设施很完备,能够很简单就定义检索点,记录里面可以携带下属的资源记录,有一个XML格式的检索语言,繁琐的事情都给管好了。

实际上如果没有这一层,开发人员势必要到处写很多重复的代码,直接和关系数据库打交道,那样是很痛苦的。也可以简单理解为,rmsws就是要消除令人烦恼的数据库接口代码,给出一个十年二十年稳定不变的开发接口。

因为开发接口统一,所以也形成了rmsws下面挂接的关系数据库底层可以多种,而不影响上层外部调用代码的格局,对产品跨平台、做大做强很有意义。

您现在用的这个bbs系统,就是我们为了检验这个rmsws能力而编写的一个应用。帖子全部都用XML格式存储在rmsws中。帖子里面可以携带图片等资源。每个记录删除的时候,下属的图像资源等就被删除了。记录备份的时候,可以连带下属的图像资源一起备份 -- dp2batch的.dp2back格式,一种可以存储XML和二进制资源的格式。

> ...我很想详细地了解一下,可惜您只提供了API,却未提供相关说明,能否提供相关文档,不知道您是否欢迎基于rmsws的二次开发,也不知道我的要求是否过分...

您说的是WebService的WSDL文件,是的,无论如何声称WebService的都要提供这个接口,主要给机器探索接口用。记得您说您也是因为这个对我们的产品感兴趣的。

我们现在人力很紧张,在图书馆应用服务器dp2libraryws WebService方面,勉强挤时间写了一个API的说明,一直没有精力写rmsws的API的文档。在公司内部用,口传心授,倒也无妨,只是没有文档,外部的人就没法用。

实际上我们有一个用户单位在用应用服务器的WebService接口搞一些开发,这不算二次开发了,可能叫1.5次开发合适一些。不过他们也没有直接用rmsws层的WebService。

如果您感兴趣,我可以花一些功夫来整理这些文档,并且公司里面也可以抽出部分人力来进行配套的服务,例如写一点示范代码,示范样例,解答一些基本的问题。

但是现在比较脆弱的是,您和我们的关系相当脆弱,没有正规的商业合作关系。这倒也不是说钱不钱的问题,而是说在这种状况下,双方的心理都比较脆弱,弄不好一点小事情、小问题就弄得合作不愉快了,互相指责了起来,这就有违我们做事情的初衷了。

我比较喜欢从负面看问题,先了解问题的潜在风险,您知道,这也是大部分程序员的个性,写程序看一个函数的返回值的时候还喜欢先判断if -1怎么样呢,把不正常的情况放在前面判断,而把正常的情况放在后面判断。这种生活方式的好处是,把甜的水果放在后面吃,感觉生活越来越甜,好受一些。

所以,我们不如简单明确一点,互相做一点基本的承诺:您保证对我们的开发环境和资料的版权的尊重,并且保证对我们的劳动抱有一种帮助性的、积极评价的基本姿态,而我们这方保证把事情善始善终,告一个段落,形成一点有用的成果。

我自己的时间弹性很大,有兴趣的事情可以多做,没有兴趣的事情可以少做。当然,这是说客户订单以外的部分。客户的订单永远排第一,要保证饯行对客户的承诺。我觉得这样一种相对松散自由的风格,对中小公司来说是一件好事情。我们不能在没有变成大公司的时候,提前用大公司的呆板来束缚自己,那样很傻。我们的现有的企业文化,其中包含的创造力和竞争力,一种天真执着的精神,都是基于这样一种自发的自然的土气的风格,我们明白这一点。

数字平台这个名字确如您理解的那样,除了在图书馆行业有了一个应用产品,我们内心的最大价值还是要通用的平台产品。这个公司的名字很牛气,为什么这么说,您去工商局注册就知道,数字,平台,两个都是禁止词,可是我们公司的名字就是用两个禁止词构成的,如果不是我们这样的创始人去操办,其他人绝对办不下这么牛气的名字。其中的诀窍就不好意思说了,算提供一个遐想的空间。



发表时间: 2009-03-01 21:25:34



[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 10 楼
文章id: 432
有新改进

作者: xietao


楼上谈到的设想,已经兑现在dp2rms最新版本中。参见:

http://dp2003.com/dp2bbs/article.aspx?board=@__2&id=431



发表时间: 2009-03-02 21:26:37



页 1 / 2 |< 1 2 > >|
 

在线用户
(无) 
当前栏目在线用户数 0, 总在线用户数 0