Freunde, guten Tag.
Ich habe das Problem der Zusammenstellung des Habrahabr-Wörterbuchs gelöst, um die Entstehung neuer Sprachen, Frameworks, Verwaltungspraktiken usw. zu verfolgen. Kurz gesagt, neue Wörter.
Das Ergebnis war eine Liste englischer Wörter "im Nominativ und Singular".
Er tat es in der Windows 10 x64-Umgebung, verwendete die Python 3-Sprache im Spyder-Editor in Anaconda 5.1.0 und verwendete eine kabelgebundene Netzwerkverbindung.
In diesem Artikel erhalte ich ein Wörterbuch mit englischen Wörtern in einer begrenzten Auswahl. Wenn sich das Thema als interessant herausstellt, plane ich in Zukunft ein Wörterbuch mit englischen und russischen Wörtern für eine vollständige Auswahl von Habrs Artikeln. Mit der russischen Sprache ist alles komplizierter.
Analyseprozess
Ich habe die Scheibe von hier genommen . Unten ist der Code für meine Version des Parsers.
Um Habrs Wörterbuch zu sammeln, müssen Sie seine Artikel umgehen und den Text der Artikel daraus auswählen. Ich habe die Metainformationen der Artikel nicht verarbeitet. Artikel über Habré haben meine "Nummer", z. B. https://habr.com/post/346198/ . Die Aufzählung der Artikel kann von 0 bis 354366 erfolgen. Dies war der letzte Artikel zum Zeitpunkt des Projekts.
Für jede Ausgabe versuchen wir, eine HTML-Seite zu erhalten. Wenn dies erfolgreich ist, ziehen wir den Titel und den Text des Artikels aus der HTML-Struktur heraus. Der Bypass-Code lautet wie folgt:
import pandas as pd import requests from bs4 import BeautifulSoup dataset = pd.DataFrame() for pid in range(350000,354366): r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/') soup = BeautifulSoup(r.text, 'html5lib') if soup.find("span", {"class": "post__title-text"}): title = soup.find("span", {"class": "post__title-text"}).text text = soup.find("div", {"class": "post__text"}).text my_series = pd.Series([pid, title, text], index=['id', 'title', 'text']) df_new = pd.DataFrame(my_series).transpose() dataset = dataset.append(df_new, ignore_index = True)
Empirisch festgestellt, dass die Artikel selbst weniger als dreimal so viele sind. Ich habe auf 4366 Nummern trainiert - so viel lädt mein System in einer halben Stunde.
Ich habe keine Geschwindigkeitsoptimierung durchgeführt, obwohl sie sagen, dass die Verarbeitung in 100 Threads viel schneller ist, wenn Sie sie starten.
Ich habe das Ergebnis auf der Festplatte gespeichert
dataset.to_excel(directory+'dataset.xlsx', sheet_name='sheet1', index=False)
- um den langsamen Download aus dem Internet nicht zu wiederholen. Die Datei hatte eine Größe von 10 Megabyte.
Ich interessierte mich für die englischen Namen der Instrumente. Ich brauchte keine Begriffe in verschiedenen Formen, ich wollte sofort normale Formen von Wörtern bekommen. Es ist klar, dass die häufigsten Wörter "in", "on" und "by" sind. Wir entfernen sie. Um das Wörterbuch zu normalisieren, habe ich den englischen Stimmer Porter aus der ntlk-Bibliothek verwendet.
Ich habe die indirekte Methode verwendet, um eine Liste von Wörterbuchwörtern zu erstellen. Siehe den Code, der mit "from sklearn.feature_extraction.text import CountVectorizer" beginnt. Ich werde das später brauchen.
import re import nltk nltk.download('stopwords') from nltk.corpus import stopwords from nltk.stem.porter import PorterStemmer corpus = [] for i in range(0, len(dataset.index)): review = re.sub('[^a-zA-Z]', ' ', dataset['text'][i]) review = review.lower() review = review.split() ps = PorterStemmer() review = [ps.stem(word) for word in review if not word in set(stopwords.words('english'))] review = ' '.join(review) corpus.append(review) from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer() X = cv.fit_transform(corpus).toarray() names = cv.get_feature_names() dfnames = pd.DataFrame(names).transpose() dfnames.to_excel(directory+'names.xlsx', sheet_name='sheet1', index=False)
Das Objekt names ist das gesuchte Wörterbuch. Wir haben es auf der Festplatte gespeichert.
Ergebnisübersicht
Es stellte sich heraus, dass mehr als 30.000 bereits normalisierte Wörter vorhanden waren. Und dies sind nur 4366 Artikelnummern und Wörter nur in Englisch.
Aus dem Interessanten:
Artikelautoren verwenden viele seltsame „Wörter“, zum Beispiel: aaaaaaaaaaaa, aaaabbbbccccdddd oder zzzhoditqxfpqbcwr
- Von Objekt X erhalten wir die Top 10 der beliebtesten englischen Wörter in unserem Beispiel:
Word-PC
iter 4133
op. 4030
Rückgabe 2866
ns 2834
ID 2740
Name 2556
neue 2410
Daten 2381
Zeichenfolge 2358
http 2304