Tout d'abord, récupérez les données CSV. Je me demandais quelles données obtenir, Je vais gratter et récupérer les paroles de mon Yorushika préféré.
Tout d'abord, installez les modules nécessaires au grattage
pip install requests
pip install bs4
pip install lxml
pip install pandas
Je l'ai mentionné ici. 【https://qiita.com/yuuuusuke1997/items/122ca7597c909e73aad5#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB】
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
#Créer une table pour contenir les données récupérées
list_df = pd.DataFrame(columns=['Paroles'])
for page in range(10):
try:
#Adresse du haut de la page de la chanson
base_url = 'https://www.uta-net.com'
#Page de liste des paroles
artist = "22653"
url = 'https://www.uta-net.com/artist/'+artist+'/0/' + str(page) + '/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
links = soup.find_all('td', class_='side td1')
for link in links:
a = base_url + (link.a.get('href'))
#Page de détail des paroles
response = requests.get(a)
soup = BeautifulSoup(response.text, 'lxml')
song_lyrics = soup.find('div', itemprop='lyrics')
song_lyric = song_lyrics.text
song_lyric = song_lyric.replace('\n','')
#Attendez 1 seconde pour ne pas charger le serveur
time.sleep(1)
#Ajouter les paroles acquises au tableau
tmp_se = pd.DataFrame([song_lyric], index=list_df.columns).T
list_df = list_df.append(tmp_se)
except:
print(page)
import traceback
traceback.print_exc()
print(list_df)
#csv enregistrer
list_df.to_csv('list.csv', mode = 'a', encoding='utf_8_sig')
Installez d'abord ce dont vous avez besoin
pip install "https://github.com/megagonlabs/ginza/releases/download/v1.0.2/ja_ginza_nopn-1.0.2.tgz"
pip install matplotlib
pip install wordcloud
Reportez-vous à ceci [https://qiita.com/osakasho/items/7408d031ca0b2192422f]
# coding: utf-8
import spacy
nlp = spacy.load('ja_ginza_nopn')
import pandas as pd
import matplotlib.pyplot as plt
import collections
from wordcloud import WordCloud
def ginza(word):
doc = nlp(word)
#Résultats du sondage
total_ls = []
Noun_ls = [chunk.text for chunk in doc.noun_chunks]
Verm_ls = [token.lemma_ for token in doc if token.pos_ == "VERB"]
for n in Noun_ls:
total_ls.append(n)
for v in Verm_ls:
total_ls.append(v)
return total_ls, Noun_ls, Verm_ls
"""---------------CSV lu et préréglé--------------"""
csv_read_path = "list.csv"
df = pd.read_csv(csv_read_path)
target_categories = ["Paroles"]
black_list = ["test"]
"""-------------------------------------------------------------"""
"""---------------Traitement morphologique------------------------"""
for target in target_categories:
total_voc = []#Préparez une boîte pour mettre des lettres
for data in df[target]:
try:
word_ls, noun_ls, verm_ls = ginza(data)
except:#S'il ne peut pas être décomposé, utilisez un mot.
word_ls = [data]
for w in word_ls:
if not w in black_list:#Vérifiez si le mot est sur la liste noire.
total_voc.append(w)
print("Le nombre de mots est", len(total_voc), "était.")
#Classement des mots les plus fréquents
c = collections.Counter(total_voc)
#Écrire au CSV
c_data = (c.most_common())
csvdf = pd.DataFrame(c_data)
filename = target + ".csv"
csvdf.to_csv(filename, encoding='utf_8_sig')
print("----------------------------")
#Faire un graphique pour le moment
#Spécifiez des polices partielles supplémentaires.
plt.rcParams["font.family"] = "IPAexGothic"
plt.title(target)
plt.grid(True)
graph_x_list = []
graph_y_list = []
top_num = 0
for key, value in c.most_common():
graph_x_list.append(key)
graph_y_list.append(value)
if top_num >= 10:
break
top_num += 1
try:
plt.bar(graph_x_list, graph_y_list)
#Affichage du graphique
plt.show()
except:
print(target, "Impossible de dessiner les données.")
#Dessiner dans WordCloud
font = 'C:/Windows/Fonts/YuGothM.ttc'
wordcloud = WordCloud(background_color="white", width=1000, height=600, font_path=font)
wordcloud.generate(" ".join(wordcloud_ls))
wordcloud.to_file(target+'.png')
"""-------------------------------------------------------------"""
Je vous remercie pour votre travail acharné.
Recommended Posts