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

点击:57558[回复顶层] [树状] [详细]
[回复留言] [回复(需要先登录)] [引用(需要先登录)]精品第 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 > >|
 

在线用户
访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客
当前栏目在线用户数 39, 总在线用户数 42