Skip to main content

从网页中提取主要文章内容(以及可选的评论)

项目描述

提取网

PyPI 版本 编解码器

基于流行的内容提取包Dragnet,ExtractNet 扩展了机器学习方法以从新闻文章中提取其他属性,例如日期、作者和关键字。

演示代码

示例代码:

只需使用以下命令安装最新发布的版本:

pip install extractnet

开始提取内容和其他元数据,将结果 html 传递给函数

import requests
from extractnet import Extractor

raw_html = requests.get('https://currentsapi.services/en/blog/2019/03/27/python-microframework-benchmark/.html').text
results = Extractor().extract(raw_html)

为什么不直接使用现有的基于规则的提取方法:

我们发现一些网页没有提供真实的作者姓名,而是简单地使用默认值填充作者标签。

例如ltn.com.twudn.com总是为每篇新闻文章填充相同的作者值,而真正的作者只能在内容中找到。

我们的机器学习优先方法提取正确的字段,就像人类阅读网站一样

ExtractNet 使用机器学习方法通​​过网页的可见部分提取这些相关数据,就像人类一样。

ExtractNet 管道

ExtractNet 是什么,不是什么

  • ExtractNet 是一个从任何网页中提取任何有趣属性的平台,不仅限于基于内容的文章。

  • ExtractNet 的核心旨在将非结构化网页转换为结构化数据,而无需依赖手工制作的规则

  • ExtractNet 不支持样板内容提取

  • ExtractNet 允许用户添加自定义管道,通过回调函数列表返回附加数据


表现

身体提取评估结果:

我们使用与article-extraction-benchmark相同的身体提取基准

模型 精确 记起 F1 准确性 开源
自动提取 0.984 ± 0.003 0.956 ± 0.010 0.970 ± 0.005 0.470 ± 0.037
差异机器人 0.958 ± 0.009 0.944 ± 0.013 0.951 ± 0.010 0.348 ± 0.035
提取网 0.922 ± 0.011 0.933 ± 0.013 0.927 ± 0.010 0.160 ± 0.027
锅炉管 0.850 ± 0.016 0.870 ± 0.020 0.860 ± 0.016 0.006 ± 0.006
拉网 0.925 ± 0.012 0.889 ± 0.018 0.907 ± 0.014 0.221 ± 0.030
html-文本 0.500 ± 0.017 0.994 ± 0.001 0.665 ± 0.015 0.000 ± 0.000
报纸 0.917 ± 0.013 0.906 ± 0.017 0.912 ± 0.014 0.260 ± 0.032
可读性 0.913 ± 0.014 0.931 ± 0.015 0.922 ± 0.013 0.315±0.034
螳螂 0.930 ± 0.010 0.967 ± 0.009 0.948 ± 0.008 0.243 ± 0.031

作者姓名提取结果:
模型 F1
ExtractNet:快速文本嵌入 + CRF 0.904 ± 0.10

来自 Dragnet 的更改列表

  • 底层分类器被Catboost而不是决策树取代,用于所有属性提取,以实现一致性和性能提升。

  • 更新 CSS 功能,添加 text+css 潜在功能

  • 包括从作者块文本中提取名称的CRF模型。

  • 在 2020 年末收集的 22000 多个更新网页上训练,20 次拖网数据。

入门

安装和提取

pip install extractnet
from extractnet import Extractor

raw_html = requests.get('https://apnews.com/article/6e58b5742b36e3de53298cf73fbfdf48').text
results = Extractor().extract(raw_html)
for key, value in results.items():
    print(key)
    print(value)
    print('------------')

回调

ExtractNet 还支持添加回调函数以在提取过程中注入额外特征的能力

快速浏览:每个回调将能够访问在提取过程中提供的原始 html 字符串。这允许用户提取附加信息,例如语言检测到最终结果

def meta_pre1(raw_html):
    return {'first_value': 0}

def meta_pre2(raw_html):
    return {'first_value': 1, 'second_value': 2}

def find_stock_ticker(raw_html, results):
    matched_ticker = []
    for ticket in re.findall(r'[$][A-Za-z][\S]*', str(results['content'])):
      matched_ticker.append(ticket)
    return {'matched_ticker': matched_ticker}

extract = Extractor(author_prob_threshold=0.1, 
      meta_postprocess=[meta_pre1, meta_pre2], 
      postprocess=[find_stock_ticker])

提取的结果将包含likefirst_valuesecond_value。请注意,回调按给定顺序执行(这意味着 meta_pre1 将首先执行,然后 meta_pre2 ),从前一阶段传递的任何结果都不会被后续阶段覆盖

raw_html = requests.get('https://apnews.com/article/6e58b5742b36e3de53298cf73fbfdf48').text
results = extract(raw_html)

在此示例中,即使 meta_pre2 也返回 first_value=1,first_value 的值将保持为 0,因为 meta_pre2 回调已经将 first_value 分配为 0。

贡献

我们热爱贡献!打开一个问题,或分叉/创建一个拉取请求。

有关代码结构的更多详细信息

快来了

参考

使用不同的特征集进行内容提取

[1] Peters、Matthew E. 和 D. Lecocq,使用不同特征集进行内容提取

@inproceedings{Peters2013ContentEU,
  title={Content extraction using diverse feature sets},
  author={Matthew E. Peters and D. Lecocq},
  booktitle={WWW '13 Companion},
  year={2013}
}

有效文本分类的技巧包

[2] A. Joulin、E. Grave、P. Bojanowski、T. Mikolov,高效文本分类的技巧包

@article{joulin2016bag,
  title={Bag of Tricks for Efficient Text Classification},
  author={Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Mikolov, Tomas},
  journal={arXiv preprint arXiv:1607.01759},
  year={2016}
}

项目详情


下载文件

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

源分布

extractnet-2.0.4.tar.gz (1.8 MB 查看哈希

已上传 source

内置发行版

extractnet-2.0.4-cp39-cp39-manylinux_2_24_x86_64.whl (3.3 MB 查看哈希

已上传 cp39

extractnet-2.0.4-cp39-cp39-macosx_11_0_x86_64.whl (1.8 MB 查看哈希

已上传 cp39

extractnet-2.0.4-cp39-cp39-macosx_10_15_x86_64.whl (1.8 MB 查看哈希

已上传 cp39

extractnet-2.0.4-cp38-cp38-manylinux_2_24_x86_64.whl (3.3 MB 查看哈希

已上传 cp38

extractnet-2.0.4-cp38-cp38-macosx_10_16_x86_64.whl (1.8 MB 查看哈希

已上传 cp38

extractnet-2.0.4-cp38-cp38-macosx_10_15_x86_64.whl (1.8 MB 查看哈希

已上传 cp38

extractnet-2.0.4-cp37-cp37m-manylinux_2_24_x86_64.whl (3.2 MB 查看哈希

已上传 cp37

extractnet-2.0.4-cp37-cp37m-macosx_10_16_x86_64.whl (1.8 MB 查看哈希

已上传 cp37

extractnet-2.0.4-cp37-cp37m-macosx_10_15_x86_64.whl (1.8 MB 查看哈希

已上传 cp37

extractnet-2.0.4-cp36-cp36m-manylinux_2_24_x86_64.whl (3.2 MB 查看哈希

已上传 cp36

extractnet-2.0.4-cp36-cp36m-macosx_10_16_x86_64.whl (1.8 MB 查看哈希

已上传 cp36

extractnet-2.0.4-cp36-cp36m-macosx_10_15_x86_64.whl (1.8 MB 查看哈希

已上传 cp36

extractnet-2.0.4-cp36-cp36m-macosx_10_14_x86_64.whl (12.7 MB 查看哈希

已上传 cp36