Skip to main content

ExtractNet

PyPI version codecov

Based on the popular content extraction package Dragnet, ExtractNet extend the machine learning approach to extract other attributes such as date, author and keywords from news article.

demo code

Example code:

Simply use the following command to install the latest released version:

pip install extractnet

Start extract content and other meta data passing the result html to function

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)

Why don't just use existing rule-base extraction method:

We discover some webpage doesn't provide the real author name but simply populate the author tag with a default value.

For example ltn.com.tw, udn.com always populate the same author value for each news article while the real author can only be found within the content.

Our machine learnig first approach extract correct fields just like human reading a website

ExtractNet uses machine learning approach to extract these relevant data through visible section of the webpage just like a human.

ExtractNet pipeline

What ExtractNet is and isn't

  • ExtractNet is a platform to extract any interesting attributes from any webpage, not just limited to content based article.

  • The core of ExtractNet aims to convert unstructured webpage to structured data without relying hand crafted rules

  • ExtractNet do not support boilerplate content extraction

  • ExtractNet allows user to add custom pipelines that returns additional data through a list of callbacks function


Performance

Results of the body extraction evaluation:

We use the same body extraction benchmark from article-extraction-benchmark

Model Precision Recall F1 Accuracy Open Source
AutoExtract 0.984 ± 0.003 0.956 ± 0.010 0.970 ± 0.005 0.470 ± 0.037 ✗
Diffbot 0.958 ± 0.009 0.944 ± 0.013 0.951 ± 0.010 0.348 ± 0.035 ✗
ExtractNet 0.922 ± 0.011 0.933 ± 0.013 0.927 ± 0.010 0.160 ± 0.027 ✔
boilerpipe 0.850 ± 0.016 0.870 ± 0.020 0.860 ± 0.016 0.006 ± 0.006 ✔
dragnet 0.925 ± 0.012 0.889 ± 0.018 0.907 ± 0.014 0.221 ± 0.030 ✔
html-text 0.500 ± 0.017 0.994 ± 0.001 0.665 ± 0.015 0.000 ± 0.000 ✔
newspaper 0.917 ± 0.013 0.906 ± 0.017 0.912 ± 0.014 0.260 ± 0.032 ✔
readability 0.913 ± 0.014 0.931 ± 0.015 0.922 ± 0.013 0.315 ± 0.034 ✔
trafilatura 0.930 ± 0.010 0.967 ± 0.009 0.948 ± 0.008 0.243 ± 0.031 ✔

Results of author name extraction:
Model F1
ExtractNet : fasttext embeddings + CRF 0.904 ± 0.10

List of changes from Dragnet

  • Underlying classifier is replaced by Catboost instead of Decision Tree for all attributes extraction for consistency and performance boost.

  • Updated CSS features, added text+css latent feature

  • Includes a CRF model that extract names from author block text.

  • Trained on 22000+ updated webpages collected in the late 2020, 20 times of dragnet data.

GETTING STARTED

Installing and extraction

pip install extractnet
import requests
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('------------')

Callbacks

ExtractNet also support the ability to add callbacks functions to inject additional features during extraction process

A quick glance of usage : each callbacks will be able to access the raw html string provided during the extraction process. This allows user to extract addtional information such as language detection to the final results

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])

The extracted results will contain like, first_value and second_value. Do note callbacks are executed by the given order ( which means meta_pre1 will be executed first followed by meta_pre2 ), any results passed from the previous stage will not be overwritten by later stage

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

In this example the value for first_value will remain 0 even though meta_pre2 also returns first_value=1 because meta_pre2 callbacks already assign first_value as 0.

Contributing

We love contributions! Open an issue, or fork/create a pull request.

Develop Locally

Since extractnet relies on several C++ modules, before starting to run locally you need to compile them first

Usually what you need would be this command

make

However, you can try to build it

More details about the code structure

Coming soon

Reference

Content extraction using diverse feature sets

[1] Peters, Matthew E. and D. Lecocq, Content extraction using diverse feature sets

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

Bag of Tricks for Efficient Text Classification

[2] A. Joulin, E. Grave, P. Bojanowski, T. Mikolov, Bag of Tricks for Efficient Text Classification

@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}
}

Metadata

Release files for extractnet 2.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for extractnet 2.0.6
File Size Uploaded
extractnet-2.0.6.tar.gz 1.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for extractnet 2.0.6
File
extractnet-2.0.6-cp39-cp39-manylinux_2_24_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.24+ x86-64 Details
extractnet-2.0.6-cp39-cp39-macosx_11_0_x86_64.whl CPython 3.9 CPython 3.9 macOS 11.0+ x86-64 Details
extractnet-2.0.6-cp39-cp39-macosx_10_15_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.15+ x86-64 Details
extractnet-2.0.6-cp38-cp38-manylinux_2_24_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.24+ x86-64 Details
extractnet-2.0.6-cp38-cp38-macosx_10_16_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.16+ x86-64 Details
extractnet-2.0.6-cp38-cp38-macosx_10_15_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.15+ x86-64 Details
extractnet-2.0.6-cp37-cp37m-manylinux_2_24_x86_64.whl CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.24+ x86-64 Details
extractnet-2.0.6-cp37-cp37m-macosx_10_16_x86_64.whl CPython 3.7 CPython 3.7 pymalloc macOS 10.16+ x86-64 Details
extractnet-2.0.6-cp37-cp37m-macosx_10_15_x86_64.whl CPython 3.7 CPython 3.7 pymalloc macOS 10.15+ x86-64 Details
extractnet-2.0.6-cp36-cp36m-manylinux_2_24_x86_64.whl CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.24+ x86-64 Details
extractnet-2.0.6-cp36-cp36m-macosx_10_16_x86_64.whl CPython 3.6 CPython 3.6 pymalloc macOS 10.16+ x86-64 Details
extractnet-2.0.6-cp36-cp36m-macosx_10_15_x86_64.whl CPython 3.6 CPython 3.6 pymalloc macOS 10.15+ x86-64 Details

Total release size: 29.0 MB

Release files / extractnet-2.0.6.tar.gz

Download URL extractnet-2.0.6.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
6af0cd079565a52e2270308973c44c0142d6d287c907590bed1844f8ffda6c50
BLAKE2b-256 checksum
How to use checksums
04f68af2f110b0c19a516f0912987f6ad31295de36b7edb1b9ab48df6ba878de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp39-cp39-manylinux_2_24_x86_64.whl

Download URL extractnet-2.0.6-cp39-cp39-manylinux_2_24_x86_64.whl
Size 3.3 MB
Tags CPython 3.9 Linux glibc 2.24+ x86-64
SHA-256 checksum
How to use checksums
17ad30add745a06154f1e441e72514c6f7da325fdfa071ed941c46f6e1ab2339
BLAKE2b-256 checksum
How to use checksums
669c426eaf80ba86853982440d8b6a30cd1416a70150f830173a7d58098ce7df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp39-cp39-macosx_11_0_x86_64.whl

Download URL extractnet-2.0.6-cp39-cp39-macosx_11_0_x86_64.whl
Size 1.8 MB
Tags CPython 3.9 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
6ca18313fc58db46d21955dcf73e564da780db95364ef98cd7c29e1a98e9f0f2
BLAKE2b-256 checksum
How to use checksums
7c06a7a36b789197b137389b64c25cab9e3ad2b73c2d3c977cef64ceb04986d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp39-cp39-macosx_10_15_x86_64.whl

Download URL extractnet-2.0.6-cp39-cp39-macosx_10_15_x86_64.whl
Size 1.8 MB
Tags CPython 3.9 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
f4a39c3778c8286db16d2c60bd768bf0472d5801fdf8984d9fadbdf47c312ae1
BLAKE2b-256 checksum
How to use checksums
e80076406c82eb480ec8330e54af228816e485652eb11f8621262f41df2e2334
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp38-cp38-manylinux_2_24_x86_64.whl

Download URL extractnet-2.0.6-cp38-cp38-manylinux_2_24_x86_64.whl
Size 3.3 MB
Tags CPython 3.8 Linux glibc 2.24+ x86-64
SHA-256 checksum
How to use checksums
0c874e096e0daaaa39aeef4b680738e298f512d35e9a8e63a1e7e1c408f71a41
BLAKE2b-256 checksum
How to use checksums
6654200f0965f9852bb691927649e9841b0c79fd74540b5cf1269d5e6f0107cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp38-cp38-macosx_10_16_x86_64.whl

Download URL extractnet-2.0.6-cp38-cp38-macosx_10_16_x86_64.whl
Size 1.8 MB
Tags CPython 3.8 macOS 10.16+ x86-64
SHA-256 checksum
How to use checksums
a62a11d024bf60df1399587e1022d3096659c02c226c2a6f2f2ea3c90a8aab78
BLAKE2b-256 checksum
How to use checksums
a573c3a5a8d1aa505409403d036d600fed7f2ca88ef0fef243aace2a1220c0f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp38-cp38-macosx_10_15_x86_64.whl

Download URL extractnet-2.0.6-cp38-cp38-macosx_10_15_x86_64.whl
Size 1.8 MB
Tags CPython 3.8 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
975d2e4d2c4c83c0e07b2d18e0103af75ebc10d815c637445afe05c61c9b9e47
BLAKE2b-256 checksum
How to use checksums
f84cd773df6bf3ef6e71305b0f7cd891518eed3ecf5efab6c0f27f9a4c358e1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp37-cp37m-manylinux_2_24_x86_64.whl

Download URL extractnet-2.0.6-cp37-cp37m-manylinux_2_24_x86_64.whl
Size 3.3 MB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.24+ x86-64
SHA-256 checksum
How to use checksums
34a971f5a4e918ca94861a30d5e5b61e13c369ef34e6b685723ef6e257f2d85d
BLAKE2b-256 checksum
How to use checksums
21b37e17ed4e158646966f0051db7e3d66aa6b1bc78a8b6011d90c7ddd64cfd1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp37-cp37m-macosx_10_16_x86_64.whl

Download URL extractnet-2.0.6-cp37-cp37m-macosx_10_16_x86_64.whl
Size 1.8 MB
Tags CPython 3.7 CPython 3.7 pymalloc macOS 10.16+ x86-64
SHA-256 checksum
How to use checksums
d5636dc5fb03c7486dbd267198b74ddb1089b2afc65e5e70c2cc8f466849877c
BLAKE2b-256 checksum
How to use checksums
7a2ca0a23e8fd29c1e56f2c6b7e7406bd0dad545aa2288ec856309a3799fbcaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp37-cp37m-macosx_10_15_x86_64.whl

Download URL extractnet-2.0.6-cp37-cp37m-macosx_10_15_x86_64.whl
Size 1.8 MB
Tags CPython 3.7 CPython 3.7 pymalloc macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
269bf1a7faa6463482f0285130f3e998c84ac407502871fe4676efb11139f254
BLAKE2b-256 checksum
How to use checksums
205baf2912f8c9198a958a581d7d63bf38d714f92a2e02d7aa1486b5d9705e62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp36-cp36m-manylinux_2_24_x86_64.whl

Download URL extractnet-2.0.6-cp36-cp36m-manylinux_2_24_x86_64.whl
Size 3.3 MB
Tags CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.24+ x86-64
SHA-256 checksum
How to use checksums
2b3aea703037fc67d0314fa69337cd066e5d85341d4f0287259cf4fc44f32f81
BLAKE2b-256 checksum
How to use checksums
5d336c097353348a77d7c8a493aa18b00bb0ae33e6f2880dc7822f89345f6067
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp36-cp36m-macosx_10_16_x86_64.whl

Download URL extractnet-2.0.6-cp36-cp36m-macosx_10_16_x86_64.whl
Size 1.8 MB
Tags CPython 3.6 CPython 3.6 pymalloc macOS 10.16+ x86-64
SHA-256 checksum
How to use checksums
d89c9e2c30a43926f17410cc297b662d29cac35ee2cb4ac9fc0e30098f679f24
BLAKE2b-256 checksum
How to use checksums
ecfc2eff3613fe1eace5deea1a56f72eed083c55ba3656a8b9ff663193fdea17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / extractnet-2.0.6-cp36-cp36m-macosx_10_15_x86_64.whl

Download URL extractnet-2.0.6-cp36-cp36m-macosx_10_15_x86_64.whl
Size 1.8 MB
Tags CPython 3.6 CPython 3.6 pymalloc macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
9842a8e09c293f60501c93e1c9234a6d6471a3cf2452241c921dbf3aa6b76ca7
BLAKE2b-256 checksum
How to use checksums
7fbe789e67857d0cb671daaf7af7f2922ee70e4e84afdfc83a55833925f9e354
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release history Release notifications | RSS feed

This release

2.0.6 This release

13 release files

2.0.4

14 release files

2.0.3

1 release file

1.0.4

6 release files

1.0.3

5 release files

1.0.2

9 release files

1.0.0

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page