** Erklären Sie im Voraus ** Das habe ich gemacht, als ich in den Sommerferien einen Teilzeitjob gemacht und mir vor dem Schlafengehen die schläfrigen Augen gerieben habe. Es funktioniert, aber es kann einige ineffiziente Teile, unsichere Teile, nicht verwendete Variablen usw. geben. Wenn Sie eine Verbesserung finden, würde ich mich freuen, wenn Sie es mir in sanften Worten sagen könnten.
Während dieser Sommerferien kam es plötzlich zu einer Bewegung zur Entwicklung von SlackBot unter den Studenten unseres ersten Studienjahres. Eine der Funktionen von Bot, die unter Ausnutzung des Trends erstellt wurden, ist mit einer Funktion ausgestattet, mit der der Teil 575 aus Wikipedia ermittelt werden kann. Ich werde darüber schreiben, was ich bei der Implementierung als Memorandum gelernt habe.
Es gab einen SlackBot, der von meinen Senioren erstellt wurde und eine zufällige Wikipedia-Seite einführte. Daher habe ich untersucht, ob es einen Weg gibt. Infolgedessen wurde ich durch Zugriff auf die folgende URL zu einem zufälligen Wikipedia-Artikel übersprungen.
http://ja.wikipedia.org/wiki/Special:Randompage
Ich hatte das Scraping selbst in C # geschrieben, aber es war mein erstes Mal, dass ich es in Python schrieb.
https://qiita.com/poorko/items/9140c75415d748633a10
Beziehen Sie sich auf diese Seite,
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()
Schreiben. (In der Zitierquelle ist jeder Zeilenumbruch in der Liste enthalten, aber da es nicht erforderlich ist, 575 Sätze zu erkennen, habe ich diese Liste so verwendet, wie sie ist.)
575 zu erkennen bedeutet mit anderen Worten, "das Lesen des Satzes zu betrachten und ihn Wort für Wort in 575 zu unterteilen". Das heißt, Sie müssen sich das Lesen des Satzes ansehen und das Wort bricht. Ist es dort nützlich? ** Morphologische Analyse **. (Genau genommen sind Morphologie und Wörter nicht dasselbe, aber sie sind problematisch, deshalb denke ich nicht tief nach.) Zählen wir zunächst die Anzahl der Zeichen in einem Satz.
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 == 'Turbolader' or chara == 'Yu' or chara == 'Yo'or chara == 'EIN'or chara == 'ich'or chara == 'U.'or chara == 'E.'or chara == 'Oh':
i = i - 1
return (i)
Wenn mit Janome eine morphologische Analyse durchgeführt wird, wird der Messwert in Katakana voller Breite zurückgegeben. Zählen Sie also die Anzahl der Zeichen in der zurückgegebenen Katakana-Zeichenfolge. Die Dehnungsstange "-" wird als ein Zeichen gezählt, und andere kleine Katakana als "tsu" werden ignoriert.
Als nächstes kommt der 575 Urteilsteil
python
fin = False
flag = False
for file in files:
# print(file)
s = file
if s.find('Bearbeiten') > 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] == "Substantiv": # hinsi[i] == "Verb" 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("Linkquelle") < 0:
fin = True
break
count = count + 1
Was wir hier machen
--Überprüfen Sie jede Zeile und ignorieren Sie die Zeilen, bis das Wort "Bearbeiten" angezeigt wird. (Andernfalls enthält es möglicherweise eine Zeichenfolge, die allen Seiten gemeinsam ist, z. B. "Hauptseite".)
Wenn 575 nicht gefunden wird, wiederholen Sie den vorherigen Vorgang. (Gehen Sie erneut zur zufälligen Seite und machen Sie dasselbe)
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 == 'Turbolader' 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('Bearbeiten') > 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] == "Substantiv": # hinsi[i] == "Verb" 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("Linkquelle") < 0:
fin = True
break
count = count + 1
if uta != "" and uta.find("Linkquelle") < 0 and uta.find("Verwendet unter") < 0:
hujubun = False
print(kami + "\n" + naka + "\n" + simo)
Ich denke, das wird wahrscheinlich funktionieren. Da der Code selbst nicht gründlich überprüft wurde, kann es unbenutzte Variablen und scheinbar ineffiziente Teile geben, aber da es sich um ein Kind handelt, das mit Lob aufwächst, ist es wirklich einfach, darauf hinzuweisen ...