Seite 1 von 1

Elemente aus einem Dictionary entfernen.

Verfasst: Dienstag 6. Juni 2017, 18:09
von Leny
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)

Re: Elemente aus einem Dictionary entfernen.

Verfasst: Dienstag 6. Juni 2017, 18:16
von __deets__
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()

Re: Elemente aus einem Dictionary entfernen.

Verfasst: Dienstag 6. Juni 2017, 19:04
von Leny
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)]

Re: Elemente aus einem Dictionary entfernen.

Verfasst: Dienstag 6. Juni 2017, 19:11
von Leny
ich habe meinen Fehler gefunden))

Re: Elemente aus einem Dictionary entfernen.

Verfasst: Mittwoch 7. Juni 2017, 10:35
von Leny
vielen Dank @__deets__