Dieses Mal klassifizieren wir die Artikeldaten des angegebenen Tags durch unbeaufsichtigtes Lernen (k-means-Methode).
In diesem Artikel erfahren Sie, wie Sie die Artikeldaten des angegebenen Tags abrufen.
・ So erhalten Sie Artikeldaten mithilfe der Qiita-API https://qiita.com/wakudar/items/8c594c8cc7bda9b93b4e
#Teilen
def wakatigaki(text):
mecab = MeCab.Tagger()
mecab_result = mecab.parse(text).replace("EOS", "").split('\n')
mecab_result = [i.replace("#", "").replace("\"", "").replace("\'", "").replace("\t", "_").replace(",","_").split("_") for i in mecab_result if i != ""]
return mecab_result
#Laden und Klassifizieren von Artikeldaten
def load_article():
category = ["Vagrant", "iOS", "numpy"]
category_num = [0, 1, 2]
docs = []
labels = []
labels_num = []
for c_name, c_num in zip(category, category_num):
files = glob.glob("./qiita/{c_name}/*.txt".format(c_name=c_name))
text = ""
for file in files:
with open(file, "r", encoding="utf-8") as f:
lines = f.read().splitlines()
body = "".join(lines[0:]).replace('\u3000', '')
text = body
text = " ".join([w[0] for w in wakatigaki(text)])
docs.append(text)
labels.append(c_name)
labels_num.append(c_num)
return docs, labels, category
#Laden und Klassifizieren von Artikeldaten
docs, labels, category = load_article()
Artikeldaten werden in Form von qiita / tag name / ------. Txt gespeichert. Dieses Mal werden wir die Kategorien der drei im Voraus gespeicherten Tags "Vagrant", "iOS" und "numpy" schätzen.
# TF-Generieren Sie einen Vektordarstellungskonverter mit IDF
vectorizer = TfidfVectorizer()
#Vektorkonvertierung von Dokumenten
vecs = vectorizer.fit_transform(docs)
# k-Implementieren Sie die Mittelmethode
kmeans_model = KMeans(n_clusters=n_cluster, random_state=0).fit(vecs)
#Speichert Clustering-Ergebnisbezeichnungen
predict_labels = kmeans_model.labels_
#Ergebnisse aggregieren und visualisieren
res = {
0:{},
1:{},
2:{}
}
#Speicherung und Anzeige der Ergebnisse
for pre_label, r_label in zip(predict_labels, labels):
#Was tun, wenn ein Wert vorhanden ist?
try:
res[pre_label][r_label] += 1
#Ausnahmebehandlung
except:
res[pre_label][r_label] = 1
#Ergebnisausgabe
for i in range(n_cluster):
print(res[i])
#Hauptkategoriename Haupt_cat
major_cat = []
#Elementnummer des Namens der Mehrheitskategorie
major_num = []
for i in range(n_cluster):
major_cat.append(max(res[i], key=res[i].get))
major_num.append(category.index(major_cat[i]))
adjusted_labels = []
#Anzahl der Artikel in jeder Kategorie
article_num = [900, 900, 900]
for i in range(n_cluster):
adjusted_labels.extend([major_num[i]] * article_num[i])
#txt Dateiname Variable cnt
cnt = 0
#Wenn die Beschriftungen vor und nach dem Clustering unterschiedlich sind, wird der Inhalt des Artikels ausgegeben.
for label1, label2 in zip(adjusted_labels, predict_labels):
cnt += 1
if label1 == label2:
pass
else:
path_w = "./result/" + str(label1) + "-" + str(label2) + "/" + str(cnt) + ".txt"
#Dateinamenpfad_Ausgabe von w
with open(path_w, mode='w') as f:
f.write(docs[cnt])
{'Vagrant': 108, 'iOS': 900, 'numpy': 333}
{'Vagrant': 792}
{'numpy': 567}
Die richtige Antwortrate für jedes Tag ist iOS: ungefähr 67% Landstreicher: Ungefähr 88% Anzahl: ca. 63% Das Ergebnis war das.
Diesmal war es nicht sehr genau ... Da es mit einem Programm ausgeführt wird, das fast dem für das Livedoor-Nachrichtenkorpus verwendeten Programm entspricht, ist es möglich, dass der Quellcodeteil vieler Programme in Qiita Auswirkungen darauf hat. Ich denke, dass es in Zukunft notwendig sein wird, Methoden wie das Klassifizieren nach verschiedenen Lernmethoden in Betracht zu ziehen, um die Genauigkeit zu verbessern. Deshalb würde ich es gerne versuchen, wenn ich Zeit habe!
・ Dieses Mal haben wir mehrere Tags durchsucht, damit sich die Tags nicht überlappen, und die drei Tags mit der geringsten Überlappung ausgewählt. (Vagrant, iOS, numpy)
・ Ich habe einmal versucht, mit Android- und iOS-Tags zu klassifizieren, aber die Ergebnisse waren enttäuschend. Ich denke, es gab viele Artikel mit zwei Tags in Bezug auf die Smartphone-Entwicklung.
・ Unüberwachte Satzklassifizierung (Satzclustering) [Python] https://appswingby.com/2019/08/15/python%E6%95%99%E5%B8%AB%E3%81%AA%E3%81%97%E6%96%87%E7%AB%A0%E5%88%86%E9%A1%9E%EF%BC%88%E6%96%87%E7%AB%A0%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%EF%BC%89/
・ Qiita-Tag-Liste https://qiita.com/tags
・ Artikel mit dem Tag "iOS" und dem Tag "Vagrant" https://qiita.com/search?q=tag%3A+iOS+tag%3AVagrant
Recommended Posts