2017-01-18 1 views
1

Ich verwende wikipedia für Python 2.7, Schrott Artikel, mit Worten aus sehr großen Datensatz.wikipedia Verschrottung mit Wikipedia 1.4.0: Wie kann man schlechte Ergebnisse überspringen?

Hier ist der Code:

for node_id in top_k: 
    human_string = label_lines[node_id] 
    score = predictions[0][node_id] 
    print('%s (score = %.5f)' % (human_string, score))  


    # Wiki = wikipedia.page(human_string) 
    # print (Wiki.content) 

    lista.append(human_string) 

for i in xrange(5): 
    wiki = wikipedia.page(lista[i]) 
    print (wiki.content) 
    a = wiki.content 
    #appendowanie = '%s (score = %.5f)' % (human_string, score) 
    # appendowanie = str(human_string) 
    appendFile = open('/home/inception/wikipedia.txt', 'a') 
    appendFile.write('\n\n'+str(i)) 
    appendFile.write(a.encode("utf-8")) 
    appendFile.close() 

I 5 Elemente aus der Liste nehmen mag, suchen sie in Wikipedia und ganzen Artikel Schrott-Datei wikipedia.txt. Manchmal gibt wikipedia Such mir einen Fehler, aus unbekanntem Wort aus der Liste: Beispiel Fehler

Traceback (most recent call last): File "label_image.py", line 68, in <module> 
    wiki = wikipedia.page(lista[i]) File "/usr/local/lib/python2.7/dist-packages/wikipedia/wikipedia.py", line 276, in page 
    return WikipediaPage(title, redirect=redirect, preload=preload) File "/usr/local/lib/python2.7/dist-packages/wikipedia/wikipedia.py", line 299, in __init__ 
    self.__load(redirect=redirect, preload=preload) File "/usr/local/lib/python2.7/dist-packages/wikipedia/wikipedia.py", line 345, in __load 
    raise PageError(self.title) wikipedia.exceptions.PageError: Page id "gracile crown blackbird" does not match any pages. Try another id! 

grazil Krone Amsel

Ich mag das Skript ändern Worte zu ignorieren wikipedia scrapper kann nicht laden Gibt es eine Möglichkeit, alle falschen Wörter mit einem Skript zu finden?

Antwort

0

Verwenden Anprobe außer wie folgt aus:

try: 
    <get the article> 
except wikipedia.exceptions.PageError as e: 
    if "does not match any pages" in str(e): 
     <ignore the error> 
    else: 
     # Some other error jumped out, so do not ignore it: 
     raise 

Nun, dies nicht zu 100% sicher ist, weil der Name der Seite könnte „keine Seiten gefunden, die“ theoretisch.

Also müssten Sie wirklich die Ausnahme eingeben, die in der Variablen e eingefangen wurde und nur die Nachricht sehen oder wenn es die Fehlernummer oder etwas gibt.

Weil ich denke, dass PageError() für mehr als die Seite nicht gefunden werden kann.

Ich weiß nicht, wie ist PageError() Ausnahme gemacht, aber vielleicht:

e.msg 

oder

e.message 

sollten Sie die reale Sache statt in str des Prüfens (e)

+0

Danke, ich denke das ist es. Ich bekomme die 'raise' Sache nicht, sollte ich andere Fehlermeldungen in' else' einfügen? In if-Anweisung habe ich die 'wiki = wikipedia.page (lista [i + 1])' hinzugefügt, um den nächsten Artikel zu erhalten. Ich muss es etwas komplizierter codieren. Es gibt eine Art Fehlermeldung, die mir eine Liste möglicher Wikipedia-Artikel gibt. Ich denke, es sollte eine Option geben, um die erste zu fangen und den Artikel zu lesen. – Piteight

+0

Sie können setzen: Erhöhen Sie e, wenn es Ihnen besser aussieht. Aber ohne etwas zu erhöhen wird nur der Fehler versuchen, gefangen. Gehen Sie in das Python-Verzeichnis site-packages und lesen Sie wikipedia/exceptions.py, um zu sehen, wie PageError() genau funktioniert und welche Attribute es in welcher Bedingung hat. Es gibt auch die Dokumentation. Sie können vielleicht wikipedia.search() verwenden, anstatt Seiten direkt aufzurufen. – Dalen