提供基于zotero的书目分面搜索界面的烧瓶蓝图。
Kerko的Python项目详细描述
科科
kerko是一个web应用程序组件,用于提供 共享书目管理的用户友好搜索和浏览界面 使用Zotero参考管理器。
工作原理
kerko在python中实现为一个烧瓶,并作为 因此,除非将其并入烧瓶应用中,否则不会有多大作用。一 示例应用程序可用,kerkoapp 需求可以直接部署在web服务器上。不过,这是预料之中的, Kerko通常会集成到一个更大的应用程序中,或者 从KerkoApp或定制到特定需求。科科动力书目 可能只是一个较大网站的一部分。
Kerko没有提供任何管理书目记录的工具。取而代之的是 已经很成熟的参考管理软件zotero就是用来做这个的 目的。zotero桌面应用程序提供强大的 个人或团队管理书目数据的工具,它存储 在zotero.org的云端。kerko可以配置为自动同步 它定期从zotero.org上搜索索引,确保访问者能够 一个最新的书目,即使它经常变化。当用户 与kerko应用程序组件交互,kerko从 拥有自己的搜索索引;只有在索引时,kerko才能联系zotero.org。
科科和佐特罗的结合给了你两个世界最好的一面:A 面向书目最终用户的用户友好界面,以及强大的 书目参考管理工具 内容:
功能
Kerko中实现了以下功能:
- 分面搜索界面:允许在 搜索模式和浏览模式,可能适合不同的用户需求, 行为和能力。例如,对主题有先见之明的用户或 预期结果能够在 搜索字段,而那些希望熟悉 参考书目或发现新主题可以选择沿着建议的 刻面,以改进或扩大其结果。因为两种模式都是集成的 可以将它们组合成一个界面。
- 搜索语法:布尔运算符(and、or、not;在任何 两个用空格分隔的术语)、逻辑分组(带括号) 单词顺序(带双引号(")。
- 搜索是不区分大小写的,重音被折叠,标点符号被忽略。到 进一步提高召回率(尽管以精确性为代价),词干分析也 根据大多数文本字段中的术语执行,例如标题、摘要、注释。它 当 搜索;例如,"搜索"、"搜索"和"搜索" 所有返回相同的结果。为此,使用了雪球算法 目的。
- 排序选项:按相关性分数(仅适用于文本搜索)、按 出版日期,按作者,按标题。
- 相关性评分:由"whoosh"库提供,并基于"bm25f"提供。 算法,它确定一个术语对 整个文档集合的上下文,同时考虑到 重新与文档结构的关系(在这方面,大多数字段是中性的,但是 当一个术语出现在特定的领域,比如doi,isbn, ISSN,标题,作者/撰稿人)。
- facets:允许按主题(zotero标记)、按资源类型(zotero项)筛选 类型),按出版年份。此外,应用程序可以定义建模的方面 在集合和子集合上;在本例中,任何集合都可以是 表示为方面,每个子集合表示为该方面中的值。 利用Zotero将任何给定项分配给多个集合的能力,可以 分面分类方案可以建模(包括 刻面)。
- 引文风格:任何来自zotero风格库的引文,或 引用样式语言中定义的自定义样式表 必须可通过URL访问。
- 语言支持:默认的用户界面是英文的,但是有些 提供翻译。其他翻译可能是 使用与gettext兼容的工具创建;请参见翻译kerko部分 下面。还需要考虑:zotero支持的地区 提供由Kerko显示的字段、项类型和作者类型的名称, 以及whoosh(提供搜索功能)支持的语言: ar、da、nl、en、fi、fr、de、hu、it、no、pt、ro、ru、es、sv、tr.
- 响应式设计:简单的默认实现在大型监视器上工作 以及在小屏幕上。它基于引导
- 可定制的前端:应用程序可以部分或完全替换默认的 有自己的模板、脚本和样式表。
- 语义标记:用户可以很容易地将引用导入到自己的引用中 管理软件,从搜索结果页或个人书目 记录页面,这两个页面都嵌入了书目元数据(使用openurl 硬币。例如,zotero连接器将自动检测 页面中存在的元数据,但类似的行为也适用于其他许多 参考管理软件也。
- 导出:用户可以导出单个引用,也可以完整地导出 与搜索结果相对应的书目。默认情况下,下载链接是 提供RIS和BIBTEX格式,但应用程序可以配置为 导出Zotero API支持的任何格式
- 打印:提供样式表用于打印单个书目 记录以及搜索结果列表。打印搜索结果时,所有 打印结果(不只是当前结果页)。
- 模块化:尽管有独立的应用程序可用,但kerko 不是作为一个独立的应用程序设计的,而是作为一个更大的烧瓶的一部分 应用程序。
演示站点
a演示站点供您尝试。您还可以查看 Zotero库包含演示站点的源数据。
要求
Kerko需要Python3.6或更高版本。
依赖关系
安装kerko时将自动安装以下软件包:
- babel:国际化和本地化实用程序。
- 环境:用于将配置与代码分离的帮助程序。
- 烧瓶:Web应用程序框架。
- Flask-babelex:允许Kerko在蓝图级别提供自己的翻译。
- 烧瓶wtf:烧瓶和wtforms的简单集成。
- jinja2:模板引擎。
- pyzotero:zotero api的python客户端。
- werkzeug:wsgi web应用程序库(也是flask所必需的)。
- whoosh:纯python全文索引和搜索库。
- wtforms:web表单验证和呈现库。
以下前端资源是kerko默认从cdn加载的 模板(但可以完全删除或由应用程序替换):
- 引导:用于Web应用程序的前端组件库。
- fontawesome:漂亮的开源图标。
- jquery:javascript库(bootstrap所需)。
- popper.js:用于处理工具提示、弹出窗口等的javascript库(由引导程序使用)。
开始
本节仅适用于您打算将Kerko集成到自己的 申请。如果你对独立的kerkoapp更感兴趣 应用程序,请参阅其安装说明。
我们假设您对烧瓶有一定的了解,并建议以下步骤 构建一个最小的应用程序,让我们称之为"hello_kerko.py",让您开始使用它。
第一步是安装kerko。与任何python库一样,它是高度 建议在avirtualenv中安装kerko
一旦virtualenv设置并激活,请使用以下命令:
pip install kerko
在
hello\u kerko.py
中,配置kerko所需的变量并创建app
对象,如下例:fromflaskimportFlaskfromkerko.composerimportComposerapp=Flask(__name__)app.config['SECRET_KEY']='_5#y2L"F4Q8z\n\xec]/'# Replace this value.app.config['KERKO_ZOTERO_API_KEY']='xxxxxxxxxxxxxxxxxxxxxxxx'# Replace this value.app.config['KERKO_ZOTERO_LIBRARY_ID']='9999999'# Replace this value.app.config['KERKO_ZOTERO_LIBRARY_TYPE']='group'# Replace this value.app.config['KERKO_COMPOSER']=Composer()
密钥
:此变量是在Web中生成安全令牌所必需的 形式.它应该有一个安全的随机值 秘密。它通常在环境变量中设置,而不是在python中设置 代码,以确保它永远不会出现在代码存储库中。但我们在这里 走最小的路线,因此正在削减一些角落!kerko_zotero_api_key
,kerko_zotero_library_id
和kerko_zotero_library_type
这些变量是kerko必须的 能够访问你的Zotero图书馆。请参见配置变量 有关如何正确设置这些变量的详细信息,请参见第节。kerko_composer
:此变量指定kerko所需的关键元素, 例如,显示和搜索字段,过滤方面。这些是 通过实例化composer
类来定义。你的申请可以 在配置时操作结果对象以添加、删除或 更改字段、面、排序选项或搜索范围。见kerko 食谱部分以获取一些示例。
还要配置烧瓶babelex和引导烧瓶扩展:
fromflask_babeleximportBabelfromflask_bootstrapimportBootstrapbabel=Babel(app)bootstrap=Bootstrap(app)
参见Flask-babelex和 引导烧瓶了解更多详细信息。
实例化Kerko蓝图并在应用程序中注册:
fromkerkoimportblueprintaskerko_blueprintapp.register_blueprint(kerko_blueprint,url_prefix='/bibliography')
url_prefix
参数定义由 Kerko .在virtualenv处于活动状态时,运行 以下shell命令:
exportFLASK_APP=hello_kerko.py flask kerko index
Kerko将从zotero.org检索您的书目数据。如果你有 大书目,这可能需要一段时间(没有进展 指示器)。在生产使用中,该命令通常被添加到crontab中 定期执行的文件。
列出kerko提供的所有命令:
flask kerko --help
运行应用程序:
flask run
在浏览器中打开http://127.0.0.1:5000/biotegraphy/" rel="nofollow">http://127.0.0.1:5000/biotegraphy/,并浏览 参考书目。
< > >kerko_zotero_library_id
:您的个人用户id用于api调用,如给定的 在zotero.org上(您必须登录 在zotero.org上)。kerko_zotero_library_type
:zotero.org上的库类型(或者'user'
用于您的主个人库,或'group'
用于组库。kerko_zotero_api_key
:与zotero.org上的库关联的api密钥。 您必须创建该键。kerko_composer
:类的一个实例。kerko_title
:要在网页中显示的标题。默认为'kerko'
kerko_data_dir:存储搜索索引的目录。默认值 要
数据/kerko
babel_default_locale
:用户界面的默认语言。默认值 到'en'
。应用程序可以设置此变量和/或实现区域设置 选择函数来覆盖它(请参见flask-babelex 文档)。kerko_use_translations
:使用kerko软件包提供的翻译。 默认为true
。当设置为false
时,可以提供翻译 根据应用程序自己的翻译目录。kerko_whoosh_language
:搜索请求的语言。默认为'en'
。 你可以参考whoosh的源代码来获得支持语言的列表 (whoosh.lang.languages
)和支持词干分析的语言列表 (whoosh.lang.有茎干器()
)。kerko_zotero_locale
:用于zotero api调用的区域设置。这意味着 Zotero项类型、字段名、创建者类型和引用的区域设置。 默认为'en-us'
。支持的区域设置列在 https://api.zotero.org/schema,在"locales"下。kerko_page_len
:每页的搜索结果数。默认为20
kerko_csl_style
:用于格式化的引文样式参考文献。可以是 中某个样式的文件名(不带.csl
扩展名) zotero样式库(例如,apa
)或远程 CSL文件。默认为'apa'
kerko_results_abstract
:在搜索结果页中显示摘要。默认为false
kerko_pager_links
:要在寻呼机中显示的页数(不包括 当前页)。默认为8
kerko_facet_collapping
:允许折叠facet。默认为false
kerko_print_item_link
:在项目页面上提供打印按钮。默认为false
kerko_print_引文链接:在搜索结果上提供打印按钮 页.默认为
false
kerko_print_citiations_max_count
:打印按钮应超过的限制 在搜索结果页面中隐藏。默认为0
(即无限制)。kerko_download_引文链接:在搜索结果上提供下载按钮 页.默认为
true
kerko_download_citiations_max_count
:下载按钮的限制 应在搜索结果页中隐藏。默认为0
(即无限制)。kerko_zotero_max_尝试次数:zotero api之后的最大尝试次数 在索引过程中返回错误或未响应。默认为
10
kerko_zotero_wait
:两次失败尝试之间的等待时间(秒) 调用zotero api。默认为120
kerko_zotero_batch_size
:每次呼叫 ZoTeO-API默认为100 API)
kerko_zotero_start
:跳过项目,从指定位置开始。默认值 到0
。仅用于开发/测试。kerko_zotero_end
:从zotero加载项目到指定位置。 默认为0
(无限制)。仅用于开发/测试。- 该系统可能可以处理相对较大的书目(它已经 到目前为止测试了约15k个条目),但是不同方面值的数量 对响应时间的影响更大。为了获得最佳响应时间,建议 将不同面值的数量限制为几百。
- Kerko只能为每个应用程序管理一个书目。
- 尽管kerko可以集成在一个多语言的web应用程序中 访问者可以选择一种语言,Zotero不提供管理标记或 多种语言的集合。因此,科科很难 以用户语言提供这些名称。
- whoosh并没有为非西方语言提供很多现成的支持。 因此,搜索可能无法很好地处理此类语言。
- 除了zotero之外,没有其他参考管理工具可以作为 Kerko .
- 不要构建后端。让Zotero充当"内容管理"系统。
- 允许Kerko集成到更丰富的Web应用程序中。
- 仅在Kerko中实现与 参考文献。让web应用程序的其他部分处理所有其他 可能需要的功能。
- 使用轻量级框架(烧瓶)以避免携带许多 不需要。
- 使用纯python依赖项来简化安装和部署。因此 例如,使用whoosh进行搜索,而不是elasticsearch或solr。
- 前端采用经典架构。保持简单,避免使用资产 管理。有些人还是想更换前端。
- 确保同一问题尚未在 存储库。
- 描述一下你期望发生的事情。
- 如果可能的话,包括一个最小的可重复的例子来帮助其他人识别 问题。
- 描述实际发生的事情。包括完整的回溯如果有 例外。
- 使用yapf自动格式化代码(使用
选项
--style='{基于Facebook,列限制:100}'
)。许多 编辑器提供yapf集成。 - 在提交消息中包含类似"fixes 123"的字符串(其中123是 问题已修复)。请参阅使用关闭问题 关键词
- po文件编码必须是utf-8。
- 必须正确填写采购订单文件的标题。
- 必须翻译采购订单文件的所有信息。
- 历史文献目录 Montréal,2014年由 David Lesieur和Patrick Fournier,威士忌Echo Bravo公司,实验室 蒙特尔帕特里莫因历史博物馆(Universitédu 魁北克省(魁北克省)。
- 魁北克英语书目, 由David Lesieur于2017年开发,用于讲魁北克英语 社区研究网络 (克斯克伦)(康科迪亚 大学)。
- 待办事项:在项目1启动时列出它。
- 待办事项:项目2上线后列出。
您刚刚为kerko构建了一个非常小的应用程序。查看kerkoapp 一个更完整的例子。
配置变量
以下变量是必需的,没有默认值:
如果您希望,可以将下列任何变量添加到配置中 覆盖它们的默认值:
Kerko食谱
已知限制
设计选择
翻译Kerko
可以使用babel的设置工具翻译kerko 集成
应该从包含
setup.py
和相应的virtualenv必须已激活
事先。
创建或更新采购订单模板(pot)文件:
python setup.py extract_messages
基于pot文件创建新的po文件(用于新的区域设置)。替换
您的语言环境
使用适当的语言代码,例如,de
,es
,fr
:
python setup.py init_catalog --locale YOUR_LOCALE
基于pot文件更新现有po文件:
pip install kerko0
编译MO文件:
pip install kerko1
欢迎你贡献你的翻译。参见提交 翻译部分。
贡献
报告问题
问题可以提交到kerko的问题跟踪程序上。拜托 请考虑以下准则:
提交代码更改
拉取请求可以针对kerko的存储库提交。拜托 请考虑以下准则:
提交翻译
一些指导原则:
请将您的翻译作为请求提交到kerko的 存储库,或通过电子邮件发送 附件(不要将采购订单文件的内容复制到电子邮件正文中,因为 这可能会导致格式化或编码问题)。
支持项目
培育一个开源项目,如kerko,跟踪问题和 帮助他人使用系统是一项艰巨的工作,但是 Kerko的原始开发人员可以在确保持续支持和 项目开发。
如果你需要与Kerko相关的专业支持,请不要 目前在Kerko实施,希望能确保一些Kerko问题 对你来说很重要的是,如果你喜欢我们的工作并且愿意 请为一个无关的项目雇用我们,请给我们发电子邮件
项目背景
Kerko的灵感来自两个先前的项目:
后来,其他组织显然需要类似的解决方案。 但是,以前项目中的软件必须重写,以便 很容易为来自不同组织的不同书目配置 不同的需求。这导致了科科,他的发展是通过 以下项目:
词源学
据报道,zotero这个名字来自阿尔巴尼亚语单词zot_roj 意思是"学得非常好,即掌握或获得一项技能 在学习中"(来源:Zotero的词源)
名字"kerko"是对zotero的肯定,因为它采用了类似的词源学路线:it 源于阿尔巴尼亚语单词k_rkoj "寻找,寻找,要求,寻找",似乎适合描述一个搜索 工具.< /P>