diff --git a/requirements.txt b/requirements.txt index 7093cce..651e853 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,11 +14,13 @@ blinker==1.9.0 botocore==1.39.11 cachetools==5.5.2 certifi==2025.8.3 +chardet==5.2.0 charset-normalizer==3.4.3 click==8.2.1 cloudpickle==3.1.1 comm==0.2.3 contourpy==1.3.3 +cssselect==1.3.0 cycler==0.12.1 dask==2025.7.0 databricks-sdk==0.62.0 @@ -60,6 +62,8 @@ jupyter_client==8.6.3 jupyter_core==5.8.1 kiwisolver==1.4.9 locket==1.0.0 +lxml==6.0.2 +lxml_html_clean==0.4.3 Mako==1.3.10 markdown-it-py==4.0.0 MarkupSafe==3.0.2 @@ -110,6 +114,7 @@ python-dateutil==2.9.0.post0 pytz==2025.2 PyYAML==6.0.2 pyzmq==27.0.1 +readability-lxml==0.8.4.1 referencing==0.36.2 regex==2025.7.34 requests==2.32.4 diff --git a/src/extract/Extractor.py b/src/extract/Extractor.py new file mode 100644 index 0000000..d80a7bd --- /dev/null +++ b/src/extract/Extractor.py @@ -0,0 +1,183 @@ +from bs4 import BeautifulSoup +from readability import Document + + +class MainContentExtractor: + """ + Extract the main human-readable text from a job advertisement + using Mozilla Readability (readability-lxml) and BeautifulSoup. + Accepts raw HTML as input. + """ + def __init__(self): + pass + + def extract(self, html: str) -> str: + # Use Readability to isolate the main content + doc = Document(html) + readable_html = doc.summary() # Extracted main-content HTML block + + # Convert the readable HTML to text + soup = BeautifulSoup(readable_html, "html.parser") + text = soup.get_text(separator="\n") + + # Clean and deduplicate whitespace lines + cleaned = "\n".join( + line.strip() for line in text.splitlines() + if line.strip() + ) + + return cleaned + + +if __name__ == "__main__": + + # This is a cut-off example of the HTML input (cut-off so that this code is not too long) + + html_data = (r""" + + + + + + + + + + + + + + + + + + + + + + + + + + + + CBS | Vacatures | Werken bij het CBS? + + + + +
Overslaan naar content

36 - 40 uur

€4.024 - €6.111 bruto p/m

Heerlen, Nederland

Wetenschappelijk medewerker Internationale Handel

hero-image

Sollicitatieformulier Wetenschappelijk medewerker Internationale Handel

Volledige naam

Vul hier je antwoord in

E-mailadres

Vul hier je antwoord in

Telefoonnummer

Vul hier je antwoord in

Cv

Motivatiebrief

Vul hier je antwoord in

Voor deze functie is het noodzakelijk dat je de Nederlandse en Engelse taal beheerst in woord en geschrift. Bij deze bevestig je dat je de Nederlandse en Engelse taal machtig bent op tenminste B-2 niveau.

Wat onderscheidt jou van andere kandidaten en waarom past deze functie zo goed bij jou?

Vul hier je antwoord in

Je sollicitatie wordt uiterlijk 4 weken na afronding van de sollicitatieprocedure verwijderd.
Middels onderstaande 'Akkoord' stem ik in met het privacystatement.


Wij zoeken een gedreven collega die theorie en praktijk moeiteloos verbindt en wetenschap omzet naar praktische oplossingen.

Waar jij het verschil maakt

Onze ambitie is om de kwaliteit van onze cijfers steeds beter te maken en slimmer te werken. Samen met je collega’s gebruik je de methodologie om het statistische proces te verbeteren. Hierin werk je jouw ideeën verder uit en toetst die in de praktijk. Je probeert je ideeën uit, kijkt wat goed werkt en doet een duidelijk voorstel vanuit de methodologie voor een eenvoudige en goede werkwijze.

Je werkt ook samen met collega’s uit andere EU-landen en met Eurostat, het Europese bureau voor statistiek. Zo leren we van elkaar en pakken we samen dezelfde uitdagingen aan.

Daarnaast analyseer je gegevens om vragen van collega’s (uit andere landen) te beantwoorden en neem je deel aan internationale overleggen.

Je toekomstige collega's

Je werkt binnen het team internationale handel output. Dit team is onderdeel van de sector Bedrijfsstatistieken Heerlen. De sector maakt een aantal uiteenlopende statistieken die verschijnselen met een internationale dimensie beschrijven. Ons team is verantwoordelijk voor de statistieken over internationale handel in diensten en goederen.

De Nederlandse economie drijft voor een aanzienlijk deel op de internationale handel. Onze cijfers zijn van groot belang om de Nederlandse economie nauwkeurig in kaart te brengen. Bovendien voorzien ze beleidsmakers, politiek, wetenschap en de samenleving van de juiste informatie.

Ons team van 30 collega’s kent een fijne sfeer en een sterke onderlinge verbondenheid.

Dit ben jij

  • Je hebt een academische opleiding met een sterke kwantitatieve basis afgerond, het liefst in de econo(metr)ie, en hebt voldoende kennis rondom internationale handel om je te verdiepen in de methodologie daaromtrent.

  • Je hebt ervaring met het analyseren van grote databestanden in bijvoorbeeld R, Python, SQL of vergelijkbaar.

  • Je bent sterk in het overbrengen van informatie, zowel schriftelijk als mondeling. In ieder geval in het Nederlands en bij voorkeur ook in het Engels.

  • Je bent in staat om projecten te leiden en de omgeving hierin goed mee te nemen.

  • Affiniteit met ontwikkelingen op AI gebied is een pluspunt.

Feitelijk goed geregeld

Voor onze arbeidsvoorwaarden volgen wij de CAO Rijk.

Dat betekent dat je onder andere kunt rekenen op het volgende:

  • Een salaris van minimaal EUR 4024,- en maximaal EUR 6110,- bruto per maand op basis van 36 uur. Afhankelijk van je kennis en ervaring.

  • 8% vakantiegeld en een 13e maand. In totaal is dit 16,5% bovenop je salaris. Dit noemen wij het Individueel Keuze Budget (IKB). Je bepaalt zelf hoe, wanneer en op welke manier je dit budget wilt inzetten.

  • Pensioenopbouw bij het ABP Pensioenfonds.

  • Een laptop (Microsoft of Apple) en mobiele telefoon (Android of iOS).

  • Je werkt hybride, waarbij we als richtlijn hebben minimaal 2 dagen per week op kantoor. In je team maak je daarover afspraken.

Kom werken aan de feiten


Reisafstand

Mijn postcode

Mijn postcode

Vervoersmiddel

Heb je interesse?
het CBS

Het CBS verzamelt, analyseert en publiceert data over Nederland: van economie tot energie en van werk tot welzijn. We ontrafelen trends, duiken in ...

profile-picture
Remy Jaggan

Corporate Recruiter


+

Jouw vacature nu niet gevonden?

Laat je voorkeuren achter en ontvang bijpassende vacatures direct in je mail.

+ + + + + + + + + + + """) + + extractor = MainContentExtractor() + job_text = extractor.extract(html=html_data) + print(job_text) diff --git a/src/extract/__init__.py b/src/extract/__init__.py new file mode 100644 index 0000000..f103fb5 --- /dev/null +++ b/src/extract/__init__.py @@ -0,0 +1 @@ +from extract.Extractor import MainContentExtractor \ No newline at end of file