与古登堡项目接口的库

Gutenberg的Python项目详细描述


https://travis-ci.org/c-w/gutenberg.svg?branch=masterhttps://clewolff.visualstudio.com/gutenberg/_apis/build/status/c-w.gutenberg?branchName=masterhttps://codecov.io/gh/c-w/gutenberg/branch/master/graph/badge.svghttps://img.shields.io/pypi/v/gutenberg.svghttps://img.shields.io/pypi/pyversions/gutenberg.svg

概述

此包包含各种脚本,使使用公共域文本的Project Gutenberg主体更容易。

此软件包提供的功能包括:

  • 从古登堡计划下载文本。
  • 清理文本:移除所有积垢,只留下文本。
  • 使有关文本的元数据易于访问。

这个包已经用python 2.7和3.5+进行了测试。

这个包的HTTP接口也存在。 Try it out!

安装

这个项目在PyPI上,所以我会 建议你用你最喜欢的软件安装所有的东西 python包管理器。

pip install gutenberg

如果要从源安装或修改包,则需要克隆 此存储库:

git clone https://github.com/c-w/Gutenberg.git

现在,您可能应该安装包的依赖项并验证 通过运行测试来结帐。

cd Gutenberg

virtualenv --no-site-packages virtualenv
source virtualenv/bin/activate
pip install -r requirements-dev.pip
pip install .

nose2

或者,您也可以通过Docker运行项目:

docker build -t gutenberg -f Dockerfile-py3 .

docker run -it -v /some/mount/path:/data gutenberg python

Python3

此包依赖于BSD-DB。bsddb模块已从python中移除 从2.7版开始的标准库。这意味着如果你想用古腾堡 在python 3上,需要手动安装bsd-db。

Linux

在Linux上,通常可以使用发行版的软件包安装BSD-DB 经理。例如,在ubuntu上,可以使用apt get:

sudo apt-get install libdb++-dev
exportBERKELEYDB_DIR=/usr
pip install .

Mac操作系统

在Mac上,您可以使用homebrew

brew install berkeley-db4
pip install .

窗口

在windows上,从 pythonlibs

例如,如果在64位版本的Windows上安装了Python3.5,则 应该下载bsddb3‑6.2.1‑cp35‑cp35m‑win_amd64.whl

下载控制盘后,安装它,您就可以开始了:

pip install bsddb3‑6.2.1‑cp35‑cp35m‑win_amd64.whl
pip install .

许可证冲突

自从它的v6.x版本发布以来,bsd-db切换到AGPL3 比此项目的Apache v2更严格的许可证 执照。这意味着除非你乐意遵守terms 对于AGPL3许可证,您必须安装更高版本的BSD-DB (4.8.30到5.x之间的任何值都可以)。如果你愿意用这个 根据AGPL3项目(或者如果您拥有BSD-DB的商业许可证),设置 在尝试安装BSD-DB之前,请遵循以下环境变量:

YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION=1

阿帕奇Jena Fuseki

作为bsd-db后端的替代,这个包还可以使用Apache Jena Fuseki 对于元数据存储。apache jena fuseki后端由 将GUTENBERG_FUSEKI_URL环境变量设置为http Fuseki正在侦听的终结点。如果fuseki服务器具有http basic 启用身份验证后,可以通过 GUTENBERG_FUSEKI_USERGUTENBERG_FUSEKI_PASSWORD环境 变量。

对于本地开发,fuseki服务器可以通过docker运行:

docker run \
    --detach \
    --publish 3030:3030 \
    --env ADMIN_PASSWORD=some-password \
    --volume /some/mount/location:/fuseki \
    stain/jena-fuseki:3.6.0 \
    /jena-fuseki/fuseki-server --loc=/fuseki --update /ds

exportGUTENBERG_FUSEKI_URL=http://localhost:3030/ds
exportGUTENBERG_FUSEKI_USER=admin
exportGUTENBERG_FUSEKI_PASSWORD=some-password

用法

下载文本

fromgutenberg.acquireimportload_etextfromgutenberg.cleanupimportstrip_headerstext=strip_headers(load_etext(2701)).strip()print(text)# prints 'MOBY DICK; OR THE WHALE\n\nBy Herman Melville ...'
python -m gutenberg.acquire.text 2701 moby-raw.txt
python -m gutenberg.cleanup.strip_headers moby-raw.txt moby-clean.txt

查找元数据

可以查询一堆电子书的元数据:

fromgutenberg.queryimportget_etextsfromgutenberg.queryimportget_metadataprint(get_metadata('title',2701))# prints frozenset([u'Moby Dick; Or, The Whale'])print(get_metadata('author',2701))# prints frozenset([u'Melville, Hermann'])print(get_etexts('title','Moby Dick; Or, The Whale'))# prints frozenset([2701, ...])print(get_etexts('author','Melville, Hermann'))# prints frozenset([2701, ...])

您可以通过拨打电话获得可以查询的元数据的完整列表:

fromgutenberg.queryimportlist_supported_metadatasprint(list_supported_metadatas())# prints (u'author', u'formaturi', u'language', ...)

在使用gutenberg.query函数之前,必须填充 本地元数据缓存。这个一次性的过程需要很长时间才能完成 (在我的机器上18小时)但是一旦完成,任何随后的呼叫 get_etextsget_metadata将非常快。如果未能填充 缓存,调用将引发异常。

要填充缓存:

fromgutenberg.acquireimportget_metadata_cachecache=get_metadata_cache()cache.populate()

如果您需要对缓存进行更细粒度的控制(例如,缓存的存储位置或 使用哪个后端),可以使用set_metadata_cache函数来切换 在填充缓存之前,先将其从后端取出。例如,使用 sqlite缓存后端而不是默认的sleepycat ba查找并存储 在自定义位置缓存,您可以执行以下操作:

fromgutenberg.acquireimportset_metadata_cachefromgutenberg.acquire.metadataimportSqliteMetadataCachecache=SqliteMetadataCache('/my/custom/location/cache.sqlite')cache.populate()set_metadata_cache(cache)

限制

这个项目故意不包含任何自然语言处理 功能。使用和处理文本是 客户机;这个库只专注于提供一个简单易用的 与古腾堡语料库项目中的作品的接口。任何语言 处理可以很容易地在客户端完成,例如使用TextBlob库。

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

推荐PyPI第三方库


热门话题
java jSplitPane鼠标悬停时显示和隐藏左窗格   替换nio。文件java 8的路径::of(字符串)   java Jetty连接器和处理程序   无法实例化java RxJava网络   加密如何使Java程序对文本文档中的消息进行解密?   java可以在OSGi环境中实现   javascript在GWT中捕获JS触发的自定义事件   Cassandra跟踪和客户端延迟之间的java差异   java简单Xml元素声明两次错误   Mac和PC之间的java NetBeans   java Selenium Chrome驱动程序和Travis CI不能一起工作   从Java web应用程序管理Linux用户身份验证和文件系统权限   java调用setVisible(false)和dispose()时,为什么窗口/组件侦听器的调用方式不同?