搜索并替换ALMA记录中的主题字段。
almar的Python项目详细描述
almar·
almar(以前的lokar)是一个用于批量编辑和删除受控 书目中的分类和主题标题字段(084/648/650/651/655) 使用alma api的alma中的记录。使用Python2.7和Python3.5+进行测试。
它将使用sru服务来搜索记录、获取和修改marcxml 记录并使用alma bibs api将修改后的记录写回alma。
该脚本仅适用于在$2
中定义了词汇表代码的字段。
因为alma sru服务没有为特定的
词汇表,almar开始时使用alma.subjects
+
alma.authority\u词汇表
索引。这将返回具有主题的所有记录
给定术语的字段A和给定词汇的主题字段B
代码,但其中a不一定等于b,因此almar过滤结果
列出以查找A实际上与B相同的记录。
安装和配置
- 运行pip install-e.安装almar及其依赖项。
- 创建配置文件。almar将首先在
当前目录,然后是
lokar.yml
(旧版),最后是.almar.yml
在您的主目录中。 < > > - 将此处的"插入MARC词汇代码"替换为 你的词汇表(2美元的值)。脚本将此值用作筛选器, 以确保只编辑指定词汇表中的主题字段。
- 用alma实例的api键替换此处的insert api key。如果 您已连接到网络区域,可能应该使用网络区域密钥。 否则编辑将作为本地编辑存储在机构区域中。
- 可选:将API U地区更改为"NA"(北美)或"AP"(亚太)。
- 将
在此处插入sru url
替换为指向sru终结点的url。再次:使用 如果连接到网络区域,则为网络区域终结点。比比赛 机构,使用https://bibsys-k.alma.exlibrisgroup.com/view/sru/47bibsys\u network
< > > almar-h
显示命令和常规命令行选项的列表almar replace-h
显示"replace"子命令的帮助- 对于包含多个单词的术语,必须添加引号(单引号或双引号) 就像上面的例子一样。对于单字术语,这是可选的。
- 在搜索中,第一个字母不区分大小写。如果你搜索"旧术语",两者 将替换"旧术语"和"旧术语"(但不替换"旧术语"。
almar remove'a a a:bbb'
删除发生的$aaa$x bbb
almar将"a a a:bbb"替换为"ccc:ddd"
将"aaa$x bbb"替换为"ccc$x ddd"almar将"a a a:bbb""ccc"替换为
$aaa$x bbb
(替换子字段$a
并删除子字段$x
)almar用
$a bbb$x$ccc
替换$a aaa
(替换子字段$a
并添加子字段$x
)
下面是一个最小的配置文件:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
注意:在上面的文件中,我们配置了一个称为"prod"的alma环境。
可以添加多个环境(例如沙箱和
并使用-e
命令行选项在它们之间切换。
下面是一个示例:
---
default_vocabulary: noubomn
vocabularies:
- marc_code: noubomn
id_service: http://data.ub.uio.no/microservices/authorize.php?vocabulary=realfagstermer&term={term}&tag={tag}
default_env: nz_prod
env:
- name: nz_sandbox
api_key: API KEY HERE
api_region: eu
sru_url: https://sandbox-eu.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
- name: nz_prod
api_key: API KEY HERE
api_region: eu
sru_url: https://bibsys-k.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
有关所有配置选项,请参阅 配置选项
用法
在使用该工具之前,请确保已设置词汇代码(词汇表.marc_代码
)
对于要在配置文件中使用的词汇表。
该工具将只对具有匹配的$2
值的字段进行更改
配置文件中的词汇表.marc_代码设置。
获取帮助:
替换主题标题
将650个字段中的"term"替换为"new term":
almar replace '650 Term' 'New term'
或者,由于650被定义为默认字段,您也可以使用速记:
almar replace 'Term' 'New term'
要使用650字段以外的任何其他字段,字段号必须明确:
almar replace '655 Term' 'New term'`
支持的字段有0846485651和655。
先用干运行进行测试
要查看对每个目录记录所做的更改,请添加--diffs
标志。组合的
使用--dry_run
标志(或-d
),您将看到将要进行的更改
不接触任何记录的记录:
almar replace --diffs --dry_run 'Term' 'New term'
这样,您就可以很容易地了解该工具的工作原理。
将主题移动到另一个MARC标记
将主题标题从650移动到651:
almar replace '650 Term' '651 Term'
或者您可以使用速记
almar replace '650 Term' '651'
如果这个词本身是一样的。您还可以在中移动和更改标题 一次操作:
almar replace '650 Term' '651 New term'
删除主题标题
删除所有具有$a term
或$x term
:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
0
或者,因为650是默认字段,所以速记:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
1
列出文档
如果只需要一个文档列表而不做任何更改,请使用almar list
:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
2
可选标题:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
3
更复杂的编辑
对于更复杂的编辑,例如将两个主题标题替换为一个,
使用--rem
和--add
选项删除和添加主题标题。
例如,将物理
和历史
(655)替换为单个主题物理历史
:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
4
请注意,只有将要删除的两个主题(即--rem
主题)的全部的记录才会被修改。
支持任意数量的--rem
和--add
选项。
交互式编辑
如果需要将一个概念分成两个或多个概念,可以使用 交互模式。 示例:将"kretser"替换为"integrerete kretser" 在某些文档上,但在另一个文档上有"elektriske kretser",请运行:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
5
对于每份记录,almar将打印标题和主题,并询问您 要在记录中包括的两个标题中的哪一个。使用箭头键和空格键 要选中其中一个或另一个,同时选中或不选中标题,请按回车键 确认选择并保存记录。
使用自定义文档集
默认情况下,almar
将检查从下面返回的所有文档
cql查询:alma.subjects="{term}"和alma.authority\u vocabulary="{vocabulary}"
,
但是您可以使用--cql
参数指定一个不同的查询
希望使用文档的子集。例如,
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
6
变量{term}
和{vocabulary}
可以在查询字符串中使用。
注释
标识符
如果配置了
ID查找服务URL
(id用户设备
)在配置文件中。服务应该接受
带有参数词汇表
、术语
和标记
的get请求,并返回
匹配概念作为json对象的标识符。见
此页
有关详细信息。
对主题字符串的支持有限
当前支持四种字符串操作:
注意:只有冒号前后有空格(:
)时,才将术语识别为字符串。
更复杂的替换
为了进行更复杂的替换,我们可以使用高级marc语法,其中
每个参数都是一个完整的marc字段,使用double$
s作为子字段分隔符。
我们先列出主题为"高级合成资源管理器"的文档 在我们的默认词汇表中,使用简单的语法:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
7
要使用高级语法获得相同的列表,我们将编写:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
8
注意,引号封装了整个marc字段。我们已经明确 指定了词汇。这意味着我们可以进行词汇间的替换。 将术语移到"裸"词汇表:
---
default_vocabulary: INSERT MARC VOCABULARY CODE HERE
vocabularies:
- marc_code: INSERT MARC VOCABULARY CODE HERE
default_env: prod
env:
- name: prod
api_key: INSERT API KEY HERE
api_region: eu
sru_url: INSERT SRU URL HERE
9
在同一过程中,我们还更改了marc标记和字段指示符。 我们还可以在过程中包含更多子字段:
---
default_vocabulary: noubomn
vocabularies:
- marc_code: noubomn
id_service: http://data.ub.uio.no/microservices/authorize.php?vocabulary=realfagstermer&term={term}&tag={tag}
default_env: nz_prod
env:
- name: nz_sandbox
api_key: API KEY HERE
api_region: eu
sru_url: https://sandbox-eu.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
- name: nz_prod
api_key: API KEY HERE
api_region: eu
sru_url: https://bibsys-k.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
0
注意,与简单的搜索和替换不同,子字段的顺序在匹配时并不重要。
不过,除了$0
和$9
之外,额外的子字段确实很重要。匹配任何值(包括无值)
对于某些子字段,使用值{any_value}
。例子:
---
default_vocabulary: noubomn
vocabularies:
- marc_code: noubomn
id_service: http://data.ub.uio.no/microservices/authorize.php?vocabulary=realfagstermer&term={term}&tag={tag}
default_env: nz_prod
env:
- name: nz_sandbox
api_key: API KEY HERE
api_region: eu
sru_url: https://sandbox-eu.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
- name: nz_prod
api_key: API KEY HERE
api_region: eu
sru_url: https://bibsys-k.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
1
将其用作python库
---
default_vocabulary: noubomn
vocabularies:
- marc_code: noubomn
id_service: http://data.ub.uio.no/microservices/authorize.php?vocabulary=realfagstermer&term={term}&tag={tag}
default_env: nz_prod
env:
- name: nz_sandbox
api_key: API KEY HERE
api_region: eu
sru_url: https://sandbox-eu.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
- name: nz_prod
api_key: API KEY HERE
api_region: eu
sru_url: https://bibsys-k.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
2
开发
运行测试:
---
default_vocabulary: noubomn
vocabularies:
- marc_code: noubomn
id_service: http://data.ub.uio.no/microservices/authorize.php?vocabulary=realfagstermer&term={term}&tag={tag}
default_env: nz_prod
env:
- name: nz_sandbox
api_key: API KEY HERE
api_region: eu
sru_url: https://sandbox-eu.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
- name: nz_prod
api_key: API KEY HERE
api_region: eu
sru_url: https://bibsys-k.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
3