scielo发布模式xml文档前端元数据读取器/清理器

scielo-clea的Python项目详细描述


夹板

这个项目是一个XML前端元数据读取器,用于文档 几乎跟随SciELO Publishing Schema, 提取并清理与从属关系相关的值。

安装

可以使用以下任一选项安装CLEA:

pip install scielo-clea          # Minimal
pip install scielo-clea[cli]     # Clea with CLI (recommended)
pip install scielo-clea[server]  # Clea with the testing/example server
pip install scielo-clea[all]     # Clea with both CLI and the server

实际上所有这些命令都会安装所有的东西, 只是依赖关系不一样。 第一种是最低要求的安装, 用于python中,作为导入包使用。

运行命令行界面

cli是一种将clea用作xml到jsonl转换程序的方法。 (每个XML输入一个JSON输出行):

clea -o output.jsonl article1.xml article2.xml article3.xml

对于python -m clea而不是clea也可以这样做。 输出是标准输出流。 有关详细信息,请参见clea --help

运行测试服务器

您可以使用flask cli运行开发服务器。 例如,对于以8080的速率从每个主机收听:

FLASK_APP=clea.server flask run -h 0.0.0.0 -p 8080

在一个有4个处理请求的工作进程的生产服务器中, 您可以,例如:

  • 安装Gunicorn(它不是依赖项)
  • 运行gunicorn -b 0.0.0.0:8080 -w 4 clea.server:app

CLEA作为库

查看所有提取数据的一个简单示例是:

fromcleaimportArticlefrompprintimportpprintart=Article("some_file.xml")pprint(art.data_full)

这是一个包含所有“原始”提取数据的列表字典。 那本字典的钥匙可以直接取用, 因此可以避免从xml中提取所有内容 只获取特定的项/属性 (例如art["journal_meta"][0].data_fullart.journal_meta[0].data_full 而不是art.data_full["journal_meta"][0])。 这些项目/属性始终是列表,例如:

  • art["aff"]:实例列表clea.core.Branch
  • art["sub_article"]:实例列表clea.core.SubArticle
  • art["contrib"][0]["contrib_name"]:字符串列表

其中art["contrib"][0]是一个Branch实例, 所有这些例子的表现都是一样的 (没有嵌套的分支)。 在以前的字典里,这可以看作是另一种导航方式, 最后一个例子应该返回一个列表 art.data_full["contrib"][0]["contrib_name"], 但是没有提取其他的东西 出现在art.data_full字典中。

可以做的更简单的事情:

len(art.aff)# Number of <aff> entrieslen(art.sub_article)# Number of <sub-article>art.contrib[0].data_full# Data from the first contributor as a dict# Something like {"type": ["translation"], "lang": ["en"]},# the content from <sub-article> attributesart["sub_article"][0]["article"][0].data_full# A string with the article title, accessing just the desired contentart["article_meta"][0]["article_title"][0]

所有SubArticleArticleBranch实例 具有data_full属性和get方法, 后者在内部用于获取项/属性。 他们的行为是:

  • Branch.get始终返回字符串列表
  • Article.get("sub_article")返回SubArticle
  • 的列表
  • Article.get(...)返回Branch
  • 的列表
  • SubArticle的行为类似于Article

提取的信息并不详尽! 其结果不应被视为原始XML的替代品。

这个图书馆的目标之一是 帮助从给定的xml创建表格数据 根据需要使用多行 在每行中有一对匹配的<aff><contrib>。 这些是匹配的Article方法/属性:

  • art.aff_contrib_inner_gen()
  • art.aff_contrib_full_gen()
  • art.aff_contrib_inner
  • art.aff_contrib_full
  • art.aff_contrib_inner_indices
  • art.aff_contrib_full_indices

最有用的可能是最后一个, 返回索引(int)对(元组)的列表, 因此可以使用(ai, ci)结果 要访问(art.aff[ai], art.contrib[ci])对, 除非索引是-1(未找到)。 后缀为_gen的是生成器函数 生成一个包含两个Branch项(或None)的元组, 没有后缀的字典返回合并字典的列表 几乎是表格格式(字符串列表字典)。 关于这些特定元素的这些元素的每个列表 通常最多应该有一个字符串, 但即使是这些特定的元素也不总是这样, 那么在使用data属性时应该小心。

名字中的innerfull 关于sql中的INNER JOINFULL OUTER JOIN, 意思是不匹配的元素 (所有<aff><contrib>未返回的节点) 在以前的策略中被抛弃, 而它们与后者。

打印从xml中提取的所有数据 包括匹配<aff><contrib>对的索引 在{}意义上执行, 类似于测试服务器响应:

pprint({**article.data_full,"aff_contrib_pairs":article.aff_contrib_full_indices,})

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java RMI客户端访问被拒绝   java让JavaFX事件监听器与我的方法对话   java与xml spring配置相关   java当我在字符串中插入这个XML Soap请求时,为什么Eclipse会给我一个错误?   音频音频合成   java创建了一个Tic-Tac-Toe应用程序,我有一个bug,它每次在同一个正方形上声明一个平局   java为返回的字符串值设置参数   Java中的ClassFormatError   java在启动后更改Spring云配置服务器uri   用Java中的自定义类替换默认字符串类   java junit测试套件:ClassNotFoundException   java自定义对象集包含相同的对象   通过关系查找的java Spring数据CRUDepository   java将数据存储到aerospike中   java使用itextpdf将添加内容的pdf转换为安卓中的位图   java正在遍历队列的concurrentHashMap,以查看是否所有队列都是空的,而其他线程可能会添加到队列中   java Hibernate:未找到本机查询异常   java Mockito准确地验证所有参数   java我可以在它自己的类中声明一个对象吗?