跳转到主要内容

搜索和替换Alma记录中的主题字段。

项目描述

Almar · Travis

Codecov Supported Python Versions

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的记录。

asciicast

安装和配置

  1. 运行 pip install -e . 来安装 almar 和其依赖项。
  2. 创建配置文件。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
  1. INSERT MARC VOCABULARY CODE HERE 替换为您词汇的词汇代码($2 值)。脚本使用此值作为过滤器,以确保它只编辑指定词汇的主题字段。
  2. INSERT API KEY HERE 替换为您的 Alma 实例的 API 密钥。如果您连接到网络区域,您可能需要使用网络区域密钥。否则,编辑将作为本地编辑存储在机构区域。
  3. 可选:将 api_region 更改为 'na'(北美)或 'ap'(亚太地区)。
  4. 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) 将被添加/更新。该服务应接受带有参数 vocabularytermtag 的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 (26.9 kB 查看哈希值)

上传时间 源代码

由以下支持