从网页中提取主要文章内容(以及可选的评论)
项目描述
提取网
基于流行的内容提取包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.tw、udn.com总是为每篇新闻文章填充相同的作者值,而真正的作者只能在内容中找到。
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 的更改列表
-
更新 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])
提取的结果将包含like、first_value和second_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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dd39538df19c3b93278ff28952f2a571fda455c8e9935d08ed9e073332e833c6 |
|
MD5 | f922f2a08d11d260e97d91ae668ef18a |
|
布莱克2-256 | ee7e81e5571412d224bf40a541e73b380bb915ffddb2027716857b05723447a4 |
extractnet -2.0.4-cp39-cp39-manylinux_2_24_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3b755ecc3fde5720649d3b29a9f70a17665b73a1e447c0078813101a81ec60e6 |
|
MD5 | 7137345ae406198f2a2c442247ff080c |
|
布莱克2-256 | a3a72b86d86f0524b10ea0211648ef1cb5d198152a69f67dbbd37da5e5cb6b72 |
extractnet -2.0.4-cp39-cp39-macosx_11_0_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f86f78e28daf22fbb54c9ef88c1db6f8e1c3fa11252caf4dcfaeb6a08efe012f |
|
MD5 | ddbeac207f7f66b25c219538b9326c06 |
|
布莱克2-256 | b90f12ffd859978387db10940d852a444e59abfcda9692ebbb43f54ee21a2136 |
extractnet -2.0.4-cp39-cp39-macosx_10_15_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c6eb736fbfe97b7b61d0d298cfe7e64029037a6ea5564b27483e800211a2991a |
|
MD5 | 5e39d789221c2fb0c344488ae93470a8 |
|
布莱克2-256 | acc2eca425c1166569f346f13609e71a776f91ec54fba12bc66549d8bf114f67 |
extractnet -2.0.4-cp38-cp38-manylinux_2_24_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b92efb37f3c09265c2f9a3700981fea51d0d322e3b80b57e010286ff5dc7ac27 |
|
MD5 | 89855d138c6c3349ee07caad6f5b55b3 |
|
布莱克2-256 | 1c15bd9cff3fb6659449b08294029fdaf5ff923b74c3da9554ea3e877ec83c00 |
extractnet -2.0.4-cp38-cp38-macosx_10_16_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c8ad1f9cad744c41de6537a8f3ad61e604630bf21340199ae6a57b77e2ddf86 |
|
MD5 | 2c6c8b1c0300badabf189fd914e53d0e |
|
布莱克2-256 | b2f6b9157fa2668c37078175d65cab92d04433a8b00424cecb260e41a21e667e |
extractnet -2.0.4-cp38-cp38-macosx_10_15_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 83f069dd697ab3e7d88e79377933041c0a5641464ac1dc5c3c8410c7964f21d0 |
|
MD5 | 432fa821990ec70d9131ca255850171d |
|
布莱克2-256 | a341f39ebd7970c2c4fc99a2f4eedddbac0b3dbe4a01a1edc13b69ef3d202fe1 |
extractnet -2.0.4-cp37-cp37m-manylinux_2_24_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 69581b44010c021aa2142994ee99e39a066d6771801ba9915cbfc0f2362d9fc5 |
|
MD5 | c13f500ee853f488d17529d023e4839a |
|
布莱克2-256 | 78cb6c501e4591a926e0f86de9a5c396f05f6843632bfbd0b1123e4d2b289eb2 |
extractnet -2.0.4-cp37-cp37m-macosx_10_16_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 275fe96c5a6f262d186e52e7a58f80e0d1bd95d6db09cd2f3bd42c3431215f64 |
|
MD5 | 9c8e0cb90ccdb5fe85889d6e2ca18172 |
|
布莱克2-256 | 8d46a7f0b8f8ed05a18f19f3d8a7f14b1c33ae90be0d34c7fabe82b85b4b3948 |