** Expliquez à l'avance ** C'est ce que j'ai fait en travaillant à temps partiel pendant les vacances d'été et en me frottant les yeux endormis avant de me coucher. Cela fonctionne, mais il peut y avoir des pièces inefficaces, des pièces non sécurisées, des variables inutilisées, etc. Si vous trouvez une amélioration, je serais heureux si vous pouviez me le dire avec des mots doux.
Pendant ces vacances d'été, un mouvement pour développer SlackBot s'est soudainement produit parmi les étudiants de première année de notre cercle. L'une des fonctions de Bot faites en tirant parti de la tendance est équipée d'une fonction pour trouver la partie qui est 575 de Wikipedia.J'écrirai ce que j'ai appris lors de sa mise en œuvre sous forme de mémorandum.
Il y avait un SlackBot qui a été créé par mes aînés et qui a introduit une page Wikipédia aléatoire.J'ai donc recherché s'il y avait un moyen et, par conséquent, j'ai été sauté à un article Wikipedia aléatoire en accédant à l'URL suivante.
http://ja.wikipedia.org/wiki/Special:Randompage
J'avais écrit le scraping lui-même en C #, mais c'était la première fois que je l'écrivais en Python.
https://qiita.com/poorko/items/9140c75415d748633a10
Référez-vous à ce site,
python
import requests
import pandas as pd
from bs4 import BeautifulSoup
html=requests.get("http://ja.wikipedia.org/wiki/Special:Randompage").text
soup=BeautifulSoup(html,"html.parser")
for script in soup(["script", "style"]):
script.decompose()
Écrire. (Dans la source de citation, chaque saut de ligne est inclus dans la liste, mais comme il n'est pas nécessaire de détecter 575 à travers les phrases, j'ai utilisé cette liste telle quelle)
En d'autres termes, détecter 575 signifie détecter que "regardez la lecture de la phrase et divisez-la en 575 mot par mot". Autrement dit, vous devez regarder la lecture de la phrase et le mot se brise. Est-ce utile là-bas? ** Analyse morphologique **. (Strictement parlant, la morphologie et les mots ne sont pas les mêmes, mais ils sont gênants, donc je ne réfléchis pas profondément.) Tout d'abord, comptons le nombre de caractères dans une phrase.
python
def howmuch(moziyomi):
i = 0
for chara in moziyomi:
if chara == '-':
i = i + 1
for kana in [chr(i) for i in range(12449, 12532 + 1)]:
if chara == kana:
i = i + 1
if chara == 'Turbocompresseur' or chara == 'Yu' or chara == 'Yo'or chara == 'UNE'or chara == 'je'or chara == 'U'or chara == 'E'or chara == 'Oh':
i = i - 1
return (i)
Lorsque l'analyse morphologique est effectuée avec Janome, la lecture est renvoyée en katakana pleine largeur. Comptez donc le nombre de caractères dans la chaîne Katakana retournée. La barre d'étirement "-" compte pour un caractère et les petits katakana autres que "tsu" sont ignorés.
Vient ensuite la partie du jugement 575
python
fin = False
flag = False
for file in files:
# print(file)
s = file
if s.find('Éditer') > 0:
flag = True
if flag:
words = [token.surface for token in t.tokenize(s)]
hinsi = [token.part_of_speech.split(',')[0] for token in t.tokenize(s)]
yomi = [token.reading for token in t.tokenize(s)]
for i in range(len(words)):
if fin:
break
uta = ""
utayomi = ""
kami = ""
naka = ""
simo = ""
keyword = ""
if hinsi[i] == "nom": # hinsi[i] == "verbe" or
keyword = words[i]
num = 0
utastat = 0
count = i
while num < 18 and count < len(yomi) and yomi[count].find("*") < 0:
num = num + howmuch(yomi[count])
uta = uta + words[count]
utayomi = utayomi + yomi[count]
if utastat == 0:
kami = kami + words[count]
if num > 5:
break
elif num == 5:
utastat = 1
elif utastat == 1:
naka = naka + words[count]
if num > 12:
break
elif num == 12:
utastat = 2
else:
simo = simo + words[count]
if num == 17:
if utayomi.find("。") >= 0:
continue
elif (utayomi.find("(") >= 0 and utayomi.find(")") >= 0) or (
utayomi.find("「") >= 0 and utayomi.find("」") >= 0) or (
utayomi.find("<") >= 0 and utayomi.find(">") >= 0) or (
utayomi.find("『") >= 0 and utayomi.find("』") >= 0):
fin = True
break
elif utayomi.find("(") >= 0 or utayomi.find(")") >= 0 or utayomi.find(
"「") >= 0 or utayomi.find("」") >= 0 or utayomi.find("<") >= 0 or utayomi.find(
">") >= 0 or utayomi.find("『") >= 0 or utayomi.find(
"』") >= 0:
continue
elif uta != "" and uta.find("Source du lien") < 0:
fin = True
break
count = count + 1
Ce que nous faisons ici
Si 575 n'est pas trouvé, répétez l'opération précédente. (Revenez à la page aléatoire et faites de même)
python
def howmuch(moziyomi):
i = 0
for chara in moziyomi:
if chara == '-':
i = i + 1
for kana in [chr(i) for i in range(12449, 12532 + 1)]:
if chara == kana:
i = i + 1
if chara == 'Turbocompresseur' or chara == 'Yu' or chara == 'Yo':
i = i - 1
return (i)
hujubun = True
while hujubun:
html = requests.get("http://ja.wikipedia.org/wiki/Special:Randompage").text
soup = bs4.BeautifulSoup(html, "html.parser")
for script in soup(["script", "style"]):
script.decompose()
text = soup.get_text()
# print(text)
t = Tokenizer()
files = text.split("\n")
fin = False
flag = False
for file in files:
# print(file)
s = file
if s.find('Éditer') > 0:
flag = True
if flag:
words = [token.surface for token in t.tokenize(s)]
hinsi = [token.part_of_speech.split(',')[0] for token in t.tokenize(s)]
yomi = [token.reading for token in t.tokenize(s)]
for i in range(len(words)):
if fin:
break
uta = ""
utayomi = ""
kami = ""
naka = ""
simo = ""
keyword = ""
if hinsi[i] == "nom": # hinsi[i] == "verbe" or
keyword = words[i]
num = 0
utastat = 0
count = i
while num < 18 and count < len(yomi) and yomi[count].find("*") < 0:
num = num + howmuch(yomi[count])
uta = uta + words[count]
utayomi = utayomi + yomi[count]
if utastat == 0:
kami = kami + words[count]
if num > 5:
break
elif num == 5:
utastat = 1
elif utastat == 1:
naka = naka + words[count]
if num > 12:
break
elif num == 12:
utastat = 2
else:
simo = simo + words[count]
if num == 17:
if utayomi.find("。") >= 0:
continue
elif (utayomi.find("(") >= 0 and utayomi.find(")") >= 0) or (
utayomi.find("「") >= 0 and utayomi.find("」") >= 0) or (
utayomi.find("<") >= 0 and utayomi.find(">") >= 0) or (
utayomi.find("『") >= 0 and utayomi.find("』") >= 0):
fin = True
break
elif utayomi.find("(") >= 0 or utayomi.find(")") >= 0 or utayomi.find(
"「") >= 0 or utayomi.find("」") >= 0 or utayomi.find("<") >= 0 or utayomi.find(
">") >= 0 or utayomi.find("『") >= 0 or utayomi.find(
"』") >= 0:
continue
elif uta != "" and uta.find("Source du lien") < 0:
fin = True
break
count = count + 1
if uta != "" and uta.find("Source du lien") < 0 and uta.find("Utilisé sous") < 0:
hujubun = False
print(kami + "\n" + naka + "\n" + simo)
Je pense que cela fonctionnera probablement. Comme le code lui-même n'a pas été complètement revu, il peut y avoir des variables inutilisées et des parties apparemment inefficaces, mais comme c'est un enfant qui grandit avec des éloges, il est vraiment facile de le signaler ...