Elemente aus einem Dictionary entfernen.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Leny
User
Beiträge: 16
Registriert: Freitag 26. Mai 2017, 19:34

Hallo Zusammen,

ich habe einen Problem mit einem Dictionary. Meine Aufgabe ist, einen Web-Scraper zu schreiben, die alle Titeln zum Thema http auf Heide.de einsammelt und Top 3 der Wörter ausgibt. Ich habe folgendes geschafft: Die Titteln in einen String zu packen, dann in einzelnen Wörter/Punktuationszeichen trennen und denen Häufigkeit zu berechen. Nun besteht mein Problem darin, die Punktuationszeichen und dem Ergebnis-Dictionary zu entfernen. Wenn ich den Code ausführe, bekomme ich folgenden Fehler " if '-' in count:

TypeError: argument of type 'method' is not iterable". ich verstehe nicht warum ich über einen Dictionary nicht iterieren darf. Könnt ihr mir vielleicht ein Paar Tipps dazu geben.

Vielen Dank im Voraus.

Code: Alles auswählen

# imports
from bs4 import BeautifulSoup
import requests
import csv
import nltk


#HTML-Text von der Seite kriegen   
url = "https://www.heise.de/thema/https"         
soup = BeautifulSoup(requests.get(url).text,'lxml').find(class_="keywordliste")
soup=soup.find('nav')
soup=soup.find_all('header')
zeile=''
#Titeln aus den Headern extrahieren 
for i in soup:
    zeile=zeile+(i.text)
#Text in Wörter/Punktationszeichen trennen
tokenit = nltk.tokenize.WordPunctTokenizer().tokenize(zeile)
#Häufigkeit jedes Wortes/Punktationszeichen ermitteln. Nur die häufigsten werden angezeigt
count=nltk.FreqDist(tokenit).most_common
# Punktuationszeichen entfernen
if '-' in count. :
    del count['-']
if ':' in count:
    del count[':']
print(count)
Zuletzt geändert von Anonymous am Dienstag 6. Juni 2017, 19:57, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin mir ziemlich sicher, dass *nicht* der Code ist, den du ausgefuehrt hast. Da ist naemlich ein Syntaxfehler drin. "if '-' in count.:" kracht.

Und die Fehlermeldung besagt, dass du kein Dictionary vor dir hast, sondern eine Methode. "Argument of type 'method'" ist da eigentlich recht klar.

Ohne nltk weiter zu kennen vermute ich mal: du musst most_common auch aufrufen:

Code: Alles auswählen

count=nltk.FreqDist(tokenit).most_common()
Leny
User
Beiträge: 16
Registriert: Freitag 26. Mai 2017, 19:34

Hallo,

ich habe den Code jetzt angepasst. Komischerweise wird der Dictionary falsch sortiert. Er soll nach Häufigkeit absteigend sortiert werden. Ich verstehe nicht warum most_common() es nicht tut.

Code: Alles auswählen

# imports
from bs4 import BeautifulSoup
import requests
import nltk


#HTML-Text von der Seite kriegen   
url = "https://www.heise.de/thema/https"         
soup = BeautifulSoup(requests.get(url).text,'lxml').find(class_="keywordliste")
soup=soup.find('nav')
soup=soup.find_all('header')
zeile=''
#Titeln aus den Headern extrahieren 
for i in soup:
    titeln=zeile+(i.text)
#Text in Wörter/Punktationszeichen trennen
tokenit = nltk.tokenize.WordPunctTokenizer().tokenize(titeln)
#Häufigkeit jedes Wortes/Punktationszeichen ermitteln. Nur die häufigsten werden angezeigt
count=nltk.FreqDist(tokenit).most_common()
if '-' in count:
    del count['-']
if ':' in count:
    del count[':']
print(count)

Ausgaben [('HTTPS', 1), (':', 1), ('77', 1), ('Prozent', 1), ('aller', 1), ('Google', 1), ('-', 1), ('Anfragen', 1), ('verschlüsselt', 1)]
Zuletzt geändert von Anonymous am Dienstag 6. Juni 2017, 19:58, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Leny
User
Beiträge: 16
Registriert: Freitag 26. Mai 2017, 19:34

ich habe meinen Fehler gefunden))
Leny
User
Beiträge: 16
Registriert: Freitag 26. Mai 2017, 19:34

vielen Dank @__deets__
Antworten