Cette fois, nous classerons les données d'article de la balise spécifiée par apprentissage non supervisé (méthode k-means).
Veuillez consulter cet article pour savoir comment obtenir les données d'article de la balise spécifiée.
・ Comment obtenir des données d'article à l'aide de l'API Qiita https://qiita.com/wakudar/items/8c594c8cc7bda9b93b4e
#Partage
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
#Chargement et classification des données d'article
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
#Chargement et classification des données d'article
docs, labels, category = load_article()
Les données d'article sont enregistrées sous la forme de qiita / nom de tag / ------. Txt. Cette fois, nous allons estimer les catégories des trois balises enregistrées à l'avance, «Vagrant», «iOS» et «numpy».
# TF-Générer un convertisseur de représentation vectorielle par IDF
vectorizer = TfidfVectorizer()
#Conversion vectorielle de documents
vecs = vectorizer.fit_transform(docs)
# k-Mettre en œuvre la méthode des moyens
kmeans_model = KMeans(n_clusters=n_cluster, random_state=0).fit(vecs)
#Stocke les étiquettes de résultats de clustering
predict_labels = kmeans_model.labels_
#Agréger et visualiser les résultats
res = {
0:{},
1:{},
2:{}
}
#Stockage et affichage des résultats
for pre_label, r_label in zip(predict_labels, labels):
#Que faire s'il y a une valeur
try:
res[pre_label][r_label] += 1
#Gestion des exceptions
except:
res[pre_label][r_label] = 1
#Sortie de résultat
for i in range(n_cluster):
print(res[i])
#Nom de la catégorie principale majeur_cat
major_cat = []
#Numéro d'élément du nom de la catégorie majoritaire
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 = []
#Nombre d'articles dans chaque catégorie
article_num = [900, 900, 900]
for i in range(n_cluster):
adjusted_labels.extend([major_num[i]] * article_num[i])
#variable de nom de fichier txt cnt
cnt = 0
#Si les étiquettes avant et après la mise en cluster sont différentes, le contenu de l'article est généré.
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"
#Chemin du nom de fichier_sortie de w
with open(path_w, mode='w') as f:
f.write(docs[cnt])
{'Vagrant': 108, 'iOS': 900, 'numpy': 333}
{'Vagrant': 792}
{'numpy': 567}
Le taux de réponse correct pour chaque tag est iOS: environ 67% Vagrant: environ 88% numpy: environ 63% Le résultat était que.
Cette fois, ce n'était pas très précis ... Puisqu'il fonctionne avec un programme qui est presque le même que celui utilisé pour le corpus de nouvelles Livedoor, il est possible que la partie du code source de nombreux programmes de Qiita l'affecte. À l'avenir, je pense qu'il sera nécessaire d'envisager des méthodes telles que la classification par différentes méthodes d'apprentissage afin d'améliorer la précision, alors j'aimerais l'essayer quand j'aurai le temps!
・ Cette fois, nous avons recherché plusieurs balises afin que les balises ne se chevauchent pas, et avons sélectionné les trois balises avec le moins de chevauchement. (Vagrant, iOS, numpy)
・ J'ai essayé de classer une fois avec les balises Android et iOS, mais les résultats ont été décevants. Je pense qu'il y avait beaucoup d'articles avec deux balises en termes de développement de smartphone.
・ Classification de phrases non supervisée (regroupement de phrases) [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/
・ Liste des balises Qiita https://qiita.com/tags
・ Articles avec à la fois le tag "iOS" et le tag "Vagrant" https://qiita.com/search?q=tag%3A+iOS+tag%3AVagrant
Recommended Posts