搜索和替换Alma记录中的主题字段。
项目描述
Almar · 
Almar(原名Lokar)是一个用于批量编辑和删除Alma书目记录中的受控分类和主题字段(084/648/650/651/655)的脚本来使用Alma API。经过Python 2.7和Python 3.5+测试。
它将使用SRU服务来搜索记录,获取并修改MARCXML记录,并使用Alma Bibs API将修改后的记录写回Alma。
该脚本仅适用于具有在 $2
中定义的词汇代码的字段。由于Alma SRU服务不提供特定词汇的搜索索引,因此almar首先使用 alma.subjects
+ alma.authority_vocabulary
索引进行搜索。这返回所有具有主题字段A的给定术语和主题字段B的给定词汇代码的记录,但A不一定等于B,因此almar筛选结果列表以找到A实际上是B的记录。
安装和配置
- 运行
pip install -e .
来安装almar
和其依赖项。 - 创建配置文件。Almar首先在当前目录中查找
almar.yml
,然后是lokar.yml
(旧版)和最后在您的家目录中查找.almar.yml
。
以下是一个起始的简化配置文件
---
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
- 将
INSERT MARC VOCABULARY CODE HERE
替换为您词汇的词汇代码($2
值)。脚本使用此值作为过滤器,以确保它只编辑指定词汇的主题字段。 - 将
INSERT API KEY HERE
替换为您的 Alma 实例的 API 密钥。如果您连接到网络区域,您可能需要使用网络区域密钥。否则,编辑将作为本地编辑存储在机构区域。 - 可选:将 api_region 更改为 'na'(北美)或 'ap'(亚太地区)。
- 将
INSERT SRU URL HERE
替换为您 SRU 终端的 URL。再次提醒:如果您连接到网络区域,请使用网络区域端点。对于 Bibsys 机构,使用https://bibsys-k.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK
注意:在上面的文件中,我们配置了一个名为 "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
有关所有配置选项,请参阅 配置选项。
用法
在配置文件中设置您要使用的词汇代码(vocabulary.marc_code
)之前,请确保您已设置。该工具只会更改配置文件中设置的 vocabulary.marc_code
代码匹配的 $2
值的字段。
获取帮助
almar -h
显示命令列表和通用命令行选项almar replace -h
显示 "replace" 子命令的帮助信息
替换主题标题
在 650 字段中将 "Term" 替换为 "New term"
almar replace '650 Term' 'New term'
或者,由于 650 被定义为默认字段,您也可以使用简写
almar replace 'Term' 'New term'
要处理除 650 字段之外的其他字段,必须明确字段编号
almar replace '655 Term' 'New term'`
支持的字段是 084、648、650、651 和 655。
先进行测试运行
要查看对每个编目记录所做的更改,请添加 --diffs
标志。与 --dry_run
标志(或 -d
)结合使用时,您将看到将对记录进行的更改,而不会实际更改任何记录
almar replace --diffs --dry_run 'Term' 'New term'
这样,您可以轻松地了解该工具的工作方式。
将主题移动到另一个 MARC 标签
将 650 字段中的主题标题从 650 移动到 651
almar replace '650 Term' '651 Term'
或者您也可以使用简写
almar replace '650 Term' '651'
如果术语本身相同。您还可以在一次操作中移动和更改标题
almar replace '650 Term' '651 New term'
删除主题标题
删除具有 $a Term
或 $x Term
的所有 650 字段
almar remove '650 Term'
或者,由于 650 是默认字段,简写
almar remove 'Term'
列出文档
如果只想列出文档而不进行任何更改,请使用 almar list
almar list '650 Term'
可选:包括标题
almar list '650 Term' --titles
更复杂的编辑
对于更复杂的编辑,例如将两个主题标题替换为一个,请使用 --rem
和 --add
选项来删除和添加主题标题。例如,要将 Physics
AND History
(655)替换为一个主题 History of physics
almar --rem 'Physics' --rem '655 History' --add 'History of physics'
请注意,只有具有两个要删除的主题(--rem
主题)的记录才会被修改。支持任意数量的 --rem
和 --add
选项。
交互式编辑
如果您需要将一个概念拆分为两个或多个概念,请使用交互模式。例如:在某个文档上用 "Integrerte kretser" 替换 "Kretser",但在其他文档上用 "Elektriske kretser",运行
almar interactive 'Kretser' 'Integrerte kretser' 'Elektriske kretser'
对于每条记录,Almar 将打印标题和主题标题,并询问您要在记录中包含哪个标题。使用箭头键和空格键检查一个或多个标题,然后按 Enter 键确认选择并保存记录。
与自定义文档集一起工作
默认情况下,almar
将检查以下CQL查询返回的所有文档:alma.subjects = "{term}" AND alma.authority_vocabulary = "{vocabulary}"
,但你可以使用 --cql
参数指定不同的查询,如果你只想处理文档子集。例如,
lokar --cql 'alma.all_for_ui = "999707921404702201"' --diffs replace 'Some subject' 'Some other subject'
可以在查询字符串中使用变量 {term}
和 {vocabulary}
。
注意
- 对于由多个单词组成的术语,必须在术语周围添加引号(单引号或双引号),如上面的示例所示。对于单词术语,这是可选的。
- 在搜索中,第一个字母的大小写不敏感。如果你搜索“旧术语”,则“旧术语”和“Old term”都将被替换(但“old Term”不会)。
标识符
如果你在配置文件中配置了 ID查找服务URL (id_service
),则标识符 ($0
) 将被添加/更新。该服务应接受带有参数 vocabulary
、term
和 tag
的GET请求,并以JSON对象的形式返回匹配概念的确认标识符。有关更多详细信息,请参阅 此页面。
有关使用 Skosmos 的示例服务,请参阅 代码 和 演示。
对主题字符串的支持有限
目前支持四种字符串操作
almar remove 'Aaa : Bbb'
删除$a Aaa $x Bbb
的出现almar replace 'Aaa : Bbb' 'Ccc : Ddd'
将$a Aaa $x Bbb
替换为$a Ccc $x Ddd
almar replace 'Aaa : Bbb' 'Ccc'
将$a Aaa $x Bbb
替换为$a Ccc
(替换子字段$a
并删除子字段$x
)almar replace 'Aaa' 'Bbb : Ccc'
将$a Aaa
替换为$a Bbb $x $Ccc
(替换子字段$a
并添加子字段$x
)
注意:只有当冒号(:
)前后有空格时,术语才被视为字符串。
更复杂的替换
要执行更复杂的替换,我们可以使用高级MARC语法,其中每个参数都是一个使用双 $
作为子字段分隔符的完整MARC字段。
让我们首先列出具有“高级合成探索”主题的默认词汇表中的文档,使用简单语法
almar list 'Advanced Composition Explorer'
要使用高级语法获取相同的列表,我们将编写
almar list '650 #7 $$a Advanced Composition Explorer $$2 noubomn'
请注意,引号封装了整个MARC字段。并且我们已明确指定了词汇表。这意味着我们可以进行跨词汇表的替换。要将术语移动到“裸”词汇表
almar replace '650 #7 $$a Advanced Composition Explorer $$2 noubomn' '610 27 $$a The Advanced Composition Explorer $$2 noubomn'
我们还在同一过程中更改了MARC标签和字段指示符。我们还可以在此过程中包含更多子字段
almar replace '650 #7 $$a Advanced Composition Explorer $$2 noubomn' '610 27 $$a The Advanced Composition Explorer $$2 noubomn $$0 (NO-TrBIB)99023187'
注意:与简单的搜索和替换不同,匹配时子字段的顺序无关紧要。然而,除了 $0
和 $9
以外,额外的子字段很重要。要匹配某些子字段的任何值(包括没有值),请使用值 {ANY_VALUE}
。示例
almar list --subjects '650 #7 $$a Sekvenseringsmetoder $$x {ANY_VALUE} $$2 noubomn'
作为Python库使用
from almar import SruClient, Alma
api_region = 'eu'
api_key = 'SECRET'
sru_url = 'https://sandbox-eu.alma.exlibrisgroup.com/view/sru/47BIBSYS_NETWORK'
sru = SruClient(sru_url)
alma = Alma(api_region, api_key)
query = 'alma.authority_vocabulary="noubomn"'
for record in sru.search(query):
for subject in record.subjects(vocabulary='noubomn'):
if not subject.find('subfield[@code="0"]'):
sa = subject.findtext('subfield[@code="a"]')
sx = subject.findtext('subfield[@code="x"]')
开发
要运行测试
pip install -r test-requirements.txt
py.test
项目详细信息
almar-0.8.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7baef67c9ad502bd016f64f6b46c00829dbcee46efa148a3d72822a21e67624b |
|
MD5 | 4141a99262ebea83c8ad4a9d27907765 |
|
BLAKE2b-256 | d48ef0a6f5c6ff4874071242cdf1e8bd764367b4ee4854b9c41c23b40c7121f6 |