2012-04-06 7 views
2

Ich muss ein Programm entwerfen, das bestimmte vier oder fünf Wort Phrasen über die gesamte Wikipedia-Sammlung von Artikeln findet (ja, ich weiß, es ist viele Seiten, und ich brauche keine Antworten aufrufen Ich bin ein Idiot dafür.Crawlen aller Wikipedia Seiten für Phrasen in Python

Ich habe nicht viele Sachen wie diese vor programmiert, so gibt es zwei Probleme, die ich sehr etwas Hilfe mit schätzen würde:

  • Erstens, wie ich das Programm zu bekommen wäre in der Lage zu kriechen durch alle Seiten (dh nicht jede der Millionen von Seiten Hardcoding. Ich habe alle Artikel auf meine Festplatte heruntergeladen, aber ich bin mir nicht sicher, wie ich das Programm durch jedes im Ordner durchlaufen kann) EDIT - Ich habe alle Wikipedia-Artikel auf meiner Festplatte

  • Die Schnappschüsse der Seiten enthalten Bilder und Tabellen. Wie würde ich nur den Haupttext des Artikels extrahieren?

Ihre Hilfe zu einem der Probleme wird sehr geschätzt!

+2

google search: 'site: wikipedia.org word1 word2 word3 word4'. Wikipedia wird es nicht mögen, wenn Sie die gesamte Seite durchsuchen, und ich bezweifle, dass Sie auch am Ende des Monats die Bandbreitenrechnung haben möchten. –

+0

Sie wären wahrscheinlich besser dran, wenn Google die Seite für Sie sucht und dann die Suchergebnisse scrappt. Überprüfen Sie einfach, dass die Seite eine Wikipedia-URL ist und dass sie den Ausdruck enthält. – aaronasterling

Antwort

6

Anstatt die Seite manuell zu durchsuchen, die langsamer ist und blockiert werden kann, sollten Sie die official datadump herunterladen. Diese enthalten keine Bilder, daher ist auch das zweite Problem gelöst.

EDIT: Ich sehe, dass Sie den ganzen Artikel auf Ihrem Computer haben, so dass diese Antwort nicht viel hilft.

0

Aufzählungspunkt 1: Python hat ein Modul nur für die Aufgabe rekursiv jede Datei oder Verzeichnis auf Pfad, os.walk.

Punkt 2: Was Sie hier zu fragen scheinen, ist, wie Sie Dateien unterscheiden, die Bilder von Dateien sind, die Text sind. das magic Modul, bei dem Käseladen zur Verfügung stellt Python-Anbindung für den Standard-Unix-Dienstprogramm mit dem gleichen Namen (in der Regel als file(1) aufgerufen)

0

Sie gefragt:

ich alle Artikel auf meine Fest heruntergeladen habe fahren, aber ich bin nicht sicher, wie ich das Programm sagen kann durch jeden im Ordner alle iterieren

Unter der Annahme, die Dateien in einem Verzeichnis Baumstruktur sind, können Sie os.walk nutzen könnten (link zu Python-Dokumentation und Beispiel) jede Datei zu besuchen und dann jede Datei für den Ausdruck suchen (en) mit so etwas wie:

for line in open("filename"): 
    if "search_string" in line: 
     print line 

Natürlich wird diese Lösung nicht auf dem Cover von „Python Perf sehen sein "Magazin, aber ich bin neu bei Python, also werde ich die n00b-Karte ziehen. Es gibt wahrscheinlich einen besseren Weg, um in einer Datei mit Pythons vorgebackenen Modulen zu grepeln.

+0

Ohne Regex, versuchen Sie etwas wie 'print '\ n'.join (Zeile für Zeile im offenen (" Dateiname "), wenn" search_string "in Zeile)' – aaronasterling

2

Die Schnappschüsse der Seiten enthalten Bilder und Tabellen. Wie würde ich nur den Haupttext des Artikels extrahieren?

Wenn Sie bei der Suche die Phrasen in den Tabellen sind in Ordnung, könnten Sie versuchen regular expressions direkt verwenden, aber die bessere Wahl wäre, einen Parser zu verwenden und alle Markup entfernen. Sie könnten Beautiful Soup, dies zu tun (Sie müssen lxml zu werden):

from bs4 import BeautifulSoup 
# produces an iterable generator that returns the text of each tag in turn 
gen = BeautifulSoup(markup_from_file, 'xml').stripped_strings 
list_of_strings = [x for x in gen] # list comprehension generates list 
' '.join(list_of_strings) 

BeautifulSoup erzeugt Unicode-Text, also, wenn Sie die Codierung ändern müssen, können Sie einfach tun:

list_of_strings = map(lambda x: x.encode('utf-8'),list_of_strings) 

Plus Schöne Suppe kann Ihnen helfen, besser zu navigieren und aus jedem Dokument auszuwählen. Wenn Sie die Codierung des Daten-Dumps kennen, wird es definitiv schneller gehen. Der Autor sagt auch, dass es auf Python 3 schneller läuft.

Verwandte Themen