Je jouerai avec l'analyse morphologique.
Alors que je lisais la sélection de KOTY [^ 1] pour tuer le temps l'autre jour, tout à coup ** J'ai eu l'idée qu'il serait amusant d'analyser les critiques globales de KOTY jusqu'à présent. Je n'ai jamais fait d'analyse morphologique, donc j'aimerais le faire comme une étude.
Pour le moment, obtenez un avis général sur Nokogiri sur KOTY Deferred wiki. C'est de 2005 à 2018, n'est-ce pas? À propos, les téléphones portables et les eroge passeront. [^ 2] L'URL de la revue générale de chaque année est
https://koty.wiki/(UN D)GC
Parce qu'il est unifié, vous pouvez facilement l'obtenir. Il est à noter en particulier
Puisque la méthode de description dans la source HTML du commentaire général est différente dans chacune des trois périodes, je me demande si ces trois modèles ont été traités différemment. Cliquez ici pour le code à obtenir avec Nokogiri
KOTY_Scrape.rb
require 'nokogiri'
require 'open-uri'
if ! Dir::exist?("Commentaire général de KOTY") #Créer un dossier à enregistrer
Dir::mkdir("Commentaire général de KOTY")
end
for year in 2005..2018 do #Initialisez le fichier texte dans le dossier
File.open("Commentaire général de KOTY/#{year}Année.txt","w") do |text|
end
end
for year in 2005..2009 do #À l'intérieur de l'élément p dans le corps se trouve le corps, br n'est pas pris en sandwich entre p et p
sleep 1
doc = Nokogiri::HTML(URI.open("https://koty.wiki/#{year}GC"))
doc.xpath("//div[@id='body']//p").each do |paragraph|
File.open("Commentaire général de KOTY/#{year}Année.txt","a") do |text|
text.puts paragraph.inner_text
end
end
end
for year in 2010..2011 do #Il n'y a pas de rupture dans la source HTML, seule la balise br est cassée
sleep 1
doc = Nokogiri::HTML(URI.open("https://koty.wiki/#{year}GC"))
comment = doc.xpath("//p[@class='aapro']")
comment.search('br').each do |br|
br.replace("\n")
end
File.open("Commentaire général de KOTY/#{year}Année.txt","a") do |text|
text.puts comment.inner_text
end
end
for year in 2011..2018 do #Décrit dans l'élément blockquote
sleep 1
doc = Nokogiri::HTML(URI.open("https://koty.wiki/#{year}GC"))
File.open("Commentaire général de KOTY/#{year}Année.txt","a") do |text|
text.puts doc.xpath("//blockquote").inner_text
end
end
Je l'ai maintenant. Comme ça
En regardant les choses comme ça, il semble que la taille du fichier a tendance à augmenter chaque année.
Ah, je prévoyais à l'origine d'analyser la morphologie sous Windows64 / Ruby / Mecab. ** "Win64" ** et ** "Ruby" ** et ** "Mecab" ** est ... Il est très difficile de créer un environnement.
Non, je l'ai essayé, environ deux fois J'ai lu divers articles existants, mais ... ** Les mauvais sont mauvais ** Voilà pourquoi ...
** Utilisez Python **
Eh bien oui, construisez l'environnement Utiliser Mecab sur Python / Win64 est assez simple et rapide
mecab
en vous référant à cet articleseulement ça Vous n'êtes pas obligé de réécrire la DLL en enfer, je suis même impressionné, c'est destructeur, cela détruit le concept, c'est un changement de paradigme.
Pour le moment, analysons la revue globale de 2018 par morphologie et sortons-la avec WordCloud. J'irai avec le sentiment d'extraire uniquement des "noms".
MecabKOTY.py
import MeCab
from wordcloud import WordCloud
t = MeCab.Tagger()
with open('Commentaire général de KOTY/2018.txt',encoding="UTF-8") as txt_file:
text = txt_file.read()
nodes = t.parseToNode(text)
s = []
while nodes:
if nodes.feature[:2] in ['nom']:
s.append(nodes.surface)
nodes = nodes.next
wc = WordCloud(width=720, height=480, background_color="black",stopwords=
{"cette", "Pour", "Il", "Yo", "chose", "chose"}
, font_path="C:\Windows\Fonts\HGRGE.TTC")
wc.generate(" ".join(s))
wc.to_file('KOTY_wc.png')
Ahh, ça fait du bien, ça fait du bien C'est comme une analyse morphologique! !! !! Si c'était pour 2007, par exemple ** "Scénario" ** se distingue comme ça,
Si c'était à partir de 2014 ** Les mots "Rider" ** ressortent. Le commentaire général de KOTY a également sa propre individualité chaque année.
Ensuite, analysons ensemble toutes les critiques globales.
MecabKOTY.py
import MeCab
from wordcloud import WordCloud
t = MeCab.Tagger()
s = []
for y in range(2005,2018):
with open(f'Commentaire général de KOTY/{y}Année.txt',encoding="UTF-8") as txt_file:
text = txt_file.read()
nodes = t.parseToNode(text)
while nodes:
if nodes.feature[:2] == "nom":
s.append(nodes.surface)
nodes = nodes.next
wc = WordCloud(width=720, height=480, background_color="black",stopwords=
{"cette", "Pour", "Il", "Yo", "chose", "chose"}
, font_path="C:\Windows\Fonts\HGRGE.TTC")
wc.generate(" ".join(s))
wc.to_file('KOTY_wc.png')
Ce sera comme ça. C'est un chef d'oeuvre. ** "Joueur" **, ** "Jeu" **, ** "Jeu putain" ** Cela ressemble à un symbole de KOTY ~~~~~
Maintenant, que se passe-t-il si nous restreignons cela davantage et essayons d'extraire uniquement la nomenclature appropriée?
MecabKOTY.py
import MeCab
from wordcloud import WordCloud
t = MeCab.Tagger()
s = []
for y in range(2005,2018):
with open(f'Commentaire général de KOTY/{y}Année.txt',encoding="UTF-8") as txt_file:
text = txt_file.read()
nodes = t.parseToNode(text)
while nodes:
if nodes.feature[:7] == "nom,固有nom":
s.append(nodes.surface)
nodes = nodes.next
wc = WordCloud(width=720, height=480, background_color="black"
, font_path="C:\Windows\Fonts\HGRGE.TTC")
wc.generate(" ".join(s))
wc.to_file('KOTY_wc.png')
C'est de l'histoire. ** Vous pouvez ressentir l'histoire. ** **
Au fait, je me demandais si je pouvais extraire ** "putain de créateur de jeux" ** en le réduisant davantage et en le limitant à ** "nom de l'organisation" **.
** "Ce n'est pas une organisation" ** J'ai arrêté parce qu'il y avait beaucoup de choses mélangées. Cela pourrait être cool si vous changez de dictionnaire.
Ensuite, changeons un peu le goût. ** Cochez "Changements dans la fréquence de certains mots par année" **. La première chose à rechercher est ... eh bien, faisons-en un ** "bug" **. Je vais dessiner un graphique linéaire avec matplotlib.
KOTYPlot.py
import MeCab
from wordcloud import WordCloud
import matplotlib.pyplot as plt
t = MeCab.Tagger()
c = []
for y in range(2005, 2018):
c.append(0)
with open(f'Commentaire général de KOTY/{y}Année.txt',encoding="UTF-8") as txt_file:
text = txt_file.read()
nodes = t.parseToNode(text)
while nodes:
if nodes.surface == "punaise":
c[-1] += 1
nodes = nodes.next
plt.plot(range(2005, 2018), c, linewidth=4)
plt.xlabel("Year", fontsize = 24)
plt.ylabel("Occurrence:Bug", fontsize=24)
plt.grid(True)
plt.savefig("KOTYgraph.png ")
trop effrayant. 2015 va être incroyable. Probablement le résultat de la collision des deux grandes tours d'insectes, "Ajinoko" et "Tetaru". De plus, il est caché dans l'impact, mais l'état de 2013 sans ** "bugs" est incroyable. Certes, en 2013, je pense qu'il y avait une concurrence pour la merde dans une direction différente des bugs.
Le mot suivant pour créer un graphique est ... ** "Fin d'année" **.
!?!?!??!??!? Je ressens beaucoup de régularité! ?? !! ?? C'est un type de jet coaster, n'est-ce pas? C'est un peu de monter en un instant Sentir que ça prend du temps Je me demande si l'apparition des "monstres de fin d'année" a une certaine périodicité.
c'était amusant
[^ 1]: 2/5 Abréviation de la chaîne pour "Fucking Game of the Year", le fil de discussion qui décide "du jeu le plus putain de l'année". [^ 2]: La raison d'utiliser plusieurs phrases pendant un an est que c'est un peu hors de propos et que nous sommes mineurs.
Recommended Posts