Simples Tool, das einige ML/Statistik Algorithmen für die Analyse von Textdokumenten verwendet. Das ganze ist recht "modular" aufgebaut - von einem Python-Noob :P
- Abrufen der Top 100 von Google.de zu einem Suchbegriff
- Extraktion des Inhalts der Top 100
- Generierung von Tokens, Dictionaries und Corpi mit Gensim/SKLearn
- Trainieren diverser Algorithmen sowie deren Persistenz
- Abrufen der Ergebnisse
- Latent Semantic Indexing via Gensim
- Allgemein für Transformation der Corpi
- TFIDF + Latent Semantic Indexing via Gensim
- Themen-Extraktion
- Bestes Dokument zur Suche
- Latent Dirichlet Allocation via Gensim
- Top Topic Extraction
- Bestes Dokument zur Suche
- Hierarchical Dirichlet Process via Gensim
- Top Topic Extraction
- Bestes Dokument zur Suche
- TFIDF + Latent Dirichlet Allocation via Sklearn
- Top Topic Extraction
- TFIDF + Non-negative matrix factorization via Sklearn
- Top Topic Extraction
- Approximate Nearest Neighbors via Spotify Annoy
- Bestes Dokument zur Suche
- Distanz zwischen Dokumenten
- Python 3.5
- Sklearn
- Numpy
- annoy
- gensim
- BeautifilSoup
Allgemein ist es empfehlenswert einfach auf die Fehlermeldungen zu achten und ggf. einfach via pip zu installieren: "pip install gensim" beispielsweise. Das Tool hat recht viele Abhängigkeiten!
Auf die Schnell kann man die "process-all.sh" öffnen und das Suchwort ändern. Anschließed ausführen via sh. Dabei wird für die Suchquery die Top 100 von google.de (!) heruntergeladen, anschließend wird jedes Ergebnis gecrawled und dessen Content extrahiert. Alle Daten werden in das sluggified Verzeichnis innerhalb von "data/" gespeichert. Daher ist der erste Parameter der Befehle meist die Suche mit der die Daten abgerufen wurden!
Achtung: Das Tool erkennt recht simpel englische Texte und skipped solchen Content. Wenn anderes Vorgehen erwünscht ist, muss man die entsprechenden Dateien anpassen (extract.py). Gleiches gilt für die Extraktion der Top 100. Hier werden bestimmte Seiten übersprungen (youtube.com, .ru-Links, Foren, ...). Ist aber leicht anpassbar.
Alternativ von Hand:
Scrapen:
python3 tool.py scrape "4k fernseher"
Extrahiere Content von min. 20 (der zuvor gescrapten Links), Minimale Anzahl von Wörtern muss 500 betragen:
python3 tool.py extract "4k fernseher" 20 500
Corpus vorbereiten - Mindestlänge der Wörter: 3 Zeichen, Mindestvorkommen der Wörter: 2x, nutze 100 Dokumente, wenn verfügbar:
python3 tool.py prepare "4k fernseher" 3 2 100
Trainiere Modelle für min. 45 Themen:
python3 tool.py train "4k fernseher" 45
Die Parameter (meist Zahlen) definieren, meist wie viele Ergebnisse verwendet werden sollen, wie groß der Corpus sein soll, wie groß ein Wort min. sein muss. Im Quellcode gibt es eig. direkt konkrete Antwort.
Die "process-all.sh" ist vor allem dann einfacher, wenn man zuvor noch kein Crawl gemacht hat. Sind die Daten einmal da, sollte man für das Vorbereiten/Neu trainieren manuell anstoßen.
Wichtig ist, dass process-all.sh zuvor ausgeführt wurde - damit die Modelle trainiert sind und es überhaupt Daten geben kann. Auch hier kann man allesauf einmal mit "show-results.sh" anzeigen lassen. Zuvor den Suchbegriff analog der "process-all.py" anpassen.
Alternativ von Hand:
Extrahiert die Themenkomplexe:
python3 tool.py top-topics "4k fernseher"
Zeigt an, welche Dokuemten am besten auf ein Suchbegriff (hier "smart tv") passen:
python3 tool.py best-doc "4k fernseher" "smart tv"
Vergleicht die Distanz zw. allen Dokumenten:
python3 tool.py distances "4k fernseher"
In data/statics findet man einige Stoplisten, die automatisch eingelesen und verwendet werden. Je nach Case lohnt sich da was rein/rauszunehmen. Sieht man dann meist während der Ergebnisse, dass Crap dabei ist. Dann einfach Datei anpassen und prepare.py + train.py, wie oben beschrieben, ausführen.
Zu schnelles Scrapen führt bei Google schnell zum Ausschluss. Ich schalge max. jede 2 Minuten vor.