跳转到主要内容

Glottolog语言树作为SQLite数据库

项目描述

Latest PyPI Version License Supported Python Versions Wheel format

Build

此工具将languoids/tree目录中的内容从Glottolog 主仓库加载到规范化的SQLite数据库中。

该目录下的每个文件都包含一个Glottolog languoid的定义。将这些内容加载到关系数据库中可以执行一些高级一致性检查(例如示例)以及在一般情况下执行查询,以便以紧凑和高效的方式(例如,无需反复遍历目录树)检查languoid树关系。

请参阅pyglottolog,以获取更通用的官方Python API,用于在没有强制初始加载步骤的情况下与仓库一起工作(也提供了对参考文献的编程访问以及方便的命令行界面)。

数据库可以导出为包含每个数据库表的CSV文件的ZIP文件,或者通过提供的SQL查询写入单个非规范化CSV文件,每行一个语言。

由于sqlite是最广泛使用的数据库,因此数据库文件本身(例如treedb.sqlite3)可以从大多数编程环境直接查询。它也可以使用诸如DBeaver之类的图形界面或通过sqlite3 cli进行检查。

Python用户还可以使用提供的SQLAlchemy 模型来构建查询或使用SQLAlchemy核心ORM(作为手写SQL查询的更可维护的替代品)来编程构建额外的抽象。

快速入门

安装treedb(及其依赖项)

$ pip install treedb

克隆Glottolog master仓库

$ git clone https://github.com/glottolog/glottolog.git

注意:treedb默认情况下期望在./glottolog/下找到它(即当前目录下),使用treedb.set_root()将其指向不同的路径。

./glottolog/languoids/tree/**/md.ini加载到内存中的sqlite3数据库中。将非规范化示例查询写入treedb.query.csv

$ python -c "import treedb; treedb.load(); treedb.write_csv()"

从Python使用

启动Python shell

$ python

导入包

>>> import treedb

使用treedb.iterlanguoids()遍历语言作为(<路径>,dict)对

>>> next(treedb.iterlanguoids())
(('abin1243',), {'id': 'abin1243', 'parent_id': None, 'level': 'language', ...

注意:这是一个低级接口,不需要加载。

将数据库加载到treedb.sqlite3(并设置默认engine

>>> treedb.load('treedb.sqlite3')
...
<treedb._proxies.SqliteEngineProxy filename='treedb.sqlite3' ...>

运行一致性检查

>>> treedb.check()
...
True

导出为包含每个数据库表的CSV文件的ZIP文件

>>> treedb.csv_zipfile()
...Path('treedb.zip')

执行示例查询并将其写入每行一个语言的CSV文件

>>> treedb.write_csv()
...Path('treedb.query.csv')

重建数据库(例如更新后)

>>> treedb.load(rebuild=True)
...
<treedb._proxies.SqliteEngineProxy filename='treedb.sqlite3' ...>

使用sqlalchemy核心执行简单查询并将其写入CSV文件

>>> import sqlalchemy as sa
>>> treedb.write_csv(sa.select(treedb.Languoid), filename='languoids.csv')
...Path('languoids.csv')

通过sqlalchemy核心从languoid表获取一行(按Glottocode顺序)

>>> next(treedb.iterrows(sa.select(treedb.Languoid)))
('3adt1234', '3Ad-Tekles', 'dialect', 'nort3292', None, None, None, None)

通过sqlalchemy.orm获取一个Languoid模型实例(按Glottocode顺序)

>>> session = treedb.Session()
>>> session.query(treedb.Languoid).first()
<Languoid id='3adt1234' level='dialect' name='3Ad-Tekles'>
>>> session.close()

另请参阅

许可证

本工具采用MIT许可证分发。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

treedb-2.6.3.zip (530.0 kB 查看哈希值)

上传时间:

构建分布

treedb-2.6.3-py3-none-any.whl (70.3 kB 查看哈希值)

上传时间: Python 3

由以下机构支持