Seite 1 von 1

Text vom Web in text.txt mit Tokenization

Verfasst: Sonntag 26. April 2020, 22:57
von Newbie96
Ich möchte, wie im Betreff schon geschrieben, einen Text vom Web nehmen und den in eine .txt Datei bekommen + Tokenization. Ich habe schon einen Ansatz dafür, der auch zum Teil funktioniert.

Code: Alles auswählen

from bs4 import BeautifulSoup
import requests
import spacy


dlf_artikel = 'https://www.deutschlandfunk.de/zustand-deutscher-waelder-auch-buchenwaelder-und-eichen.694.de.html?dram:article_id=475483'   
homepage_erste = 'https://www.deutschlandfunk.de/'   
url_get = requests.get(dlf_artikel)
soup = BeautifulSoup(url_get.content, 'lxml')
inhalt = [inhalt1.get_text(strip=True) for inhalt1 in soup.select('div[class="articlemain"]')]
with open('01.txt', 'w', encoding='utf-8') as f_out:
    f_out.write(inhalt[0])


nlp = spacy.load("de_core_news_md")

my_doc = nlp(inhalt[0])

token_list = []
for token in my_doc:
    token_list.append(token.text)
with open('01.txt', 'w', encoding='utf-8') as f_out:
    f_out.write(token_list[0])
Mein Problem ist, dass ich nicht weiß, wie ich alle Wörter in der .txt Datei "tokenized" bekomme. Ich weiß, dass der Code extrem ineffizient ist, aber als Anfänger bekomme ich zurzeit nichts besseres hin. Ist es überhaupt realisierbar, dass man einen Text aus dem Web zieht und in einer .txt Datei speichert + ihn anschließend noch mal auf Tokenization filtert? Ich erwarte keine Lösung oder ähnliches, aber wäre dankbar für ein paar Tipps oder vielleicht einen Lösungsvorschlag. Falls irgendwelches Details benötigt werden, einfach Fragen. Ich poste diese schnellstmöglich. Danke schon mal im voraus!!

Re: Text vom Web in text.txt mit Tokenization

Verfasst: Sonntag 26. April 2020, 23:16
von __blackjack__
@Newbie96: Ich verstehe da jetzt den Zusammenhang nicht wirklich. Mit Text aus einer Webseite kann man alles machen was man mit Text machen kann der nicht aus einer Webseite kommt. Und tokenisieren kann man auch jeden Text. Egal wo der her kommt.

Du schreibst da die gleiche Datei zweimal, wobei das zweite mal den Inhalt vom ersten mal überschreibt. Das macht also keinen Sinn und hat letztlich nichts mit Web oder Tokenisieren zu tun.

Bei beiden Schritten verstehe ich die Listen nicht und das davon dann nur das erste Element verarbeitet wird.

Sollte im ersten Schritt grundsätzlich nur ein Element heraus kommen, ist `select()` die falsche Methode und Du willst `select_one()` verwenden.

Und im zweiten Schritt soll nur das erste Token in der Datei landen? Warum sammelst Du dann *alle* Token(texte) in einer Liste statt einfach nur das erste zu ermitteln?

Das erstellen der Liste ginge auch einfach mit `list()`: ``tokens = list(my_doc)``. Was soll das `my_*` eigentlich da? Solange es nicht auch `our_doc` und/oder `their_doc` gibt ist das eine total unnütze Vorsilbe.

Re: Text vom Web in text.txt mit Tokenization

Verfasst: Montag 27. April 2020, 00:57
von Newbie96
Okay, hmm verstehe. Ich weiß nicht, wie ich die ganze Liste in die Datei bekomme und dann noch Tokenisiert. Ich bin halt wirklich ein blutiger Anfänger.
Danke dir, aber könntest du vielleicht mir einen Tipp geben, wie ich das Tokenisieren eines Textes aus dem Web in eine .txt Datei bekomme? Falls du kein Problem damit hast. Du hast mir schon gut geholfen, indem mich auf die Fehler hingewiesen hast.

Re: Text vom Web in text.txt mit Tokenization

Verfasst: Montag 27. April 2020, 08:58
von __blackjack__
@Newbie96: Was willst Du denn am Ende in der Datei haben? Den Text von jedem Token in einer eigenen Zeile? Dann musst Du genau das programmieren: eine Schleife die den Text von jedem Token + ein Zeilenendezeichen in die Datei schreibt.

Edit: Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import requests
import spacy
from bs4 import BeautifulSoup


def main():
    dlf_artikel_url = (
        "https://www.deutschlandfunk.de/"
        "zustand-deutscher-waelder-auch-buchenwaelder-und-eichen.694.de.html"
        "?dram:article_id=475483"
    )
    response = requests.get(dlf_artikel_url)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, "lxml")
    inhalt = soup.select_one("div[class='articlemain']").get_text(strip=True)

    tokens = spacy.load("de_core_news_md")(inhalt)
    with open("01.txt", "w", encoding="utf-8") as tokens_file:
        tokens_file.writelines(token.text + "\n" for token in tokens)


if __name__ == "__main__":
    main()

Re: Text vom Web in text.txt mit Tokenization

Verfasst: Montag 27. April 2020, 13:30
von Newbie96
Interessant, dein Code funktioniert. Ich wollte eigentlich den Text auf jedes einzelne Wort runter brechen. Zum Beispiel : { Ball; Geruest; Wiese}. Etwa in die Richtung. Deine Schleife funktioniert auch Prima, nur wüsste ich nicht ganz, wie ich die umschreiben sollte damit es auf einzelne Wörter runter gebrochen wird. Ich versuche mich mal ran und probiere ein paar Sachen aus. Danke dir für den guten Ansatz ! Hilft trotzdem mega aus ^^