Suchen Sie den Teil 575 aus Wikipedia in Python

** 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.

Holen Sie sich den Text einer zufälligen Wikipedia-Seite

URL, um auf eine zufällige Wikipedia-Seite zuzugreifen

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.)

Erkennung von 575 Teilen

Morphologische Analyse

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)

Das ganze Bild des verdammten Codes, den ich geschrieben habe

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 ...

Recommended Posts

Suchen Sie den Teil 575 aus Wikipedia in Python
Finde Fehler in Python
Den Namen der Methode, die ihn aufgerufen hat, finden Sie in der Python-Methode
Spielen Sie Sounds in Python ab, vorausgesetzt, die Tastatur ist eine Klaviertastatur
So stellen Sie fest, dass in Python3 ein Kreuzschlüssel eingegeben wurde
Aus einem Buch, das der Programmierer lernen kann ... (Python): Finden Sie den häufigsten Wert
Was ist "Mahjong" in der Python-Bibliothek? ??
Was ist im Docker Python-Image pfeifend?
Über den Unterschied zwischen "==" und "is" in Python
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Diejenige, die den Fortschrittsbalken in Python anzeigt
[Python] Finden Sie die Translokationsmatrix in Einschlussnotation
Finden Sie das maximale Python
Die findähnliche Sache der Liste in Python
Suchen Sie die Position im Originalbild anhand der Koordinaten nach der affinen Konvertierung (Python + OpenCV).
So ermitteln Sie den Koeffizienten der ungefähren Kurve, die in Python durch die Scheitelpunkte verläuft
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Linux ist in erster Linie so etwas
Geben Sie die Zeit ab dem Start des Programms in Python aus
Finden Sie die Hermite-Matrix und ihre eindeutigen Werte in Python
Module, die die Shell in Python durchlaufen können
So finden Sie das erste Element, das den Kriterien in der Python-Liste entspricht
OCR aus PDF in Python
Finden Sie die Reihenfolge / Kombination in Python
UI-Automatisierung Teil 2 in Python
Lassen Sie uns das Umfangsverhältnis mit Python finden
Finden Sie den Maximalwert Python (verbessert)
So testen Sie, ob die Ausnahme in Python unittest ausgelöst wird
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Holen Sie sich Ihre Herzfrequenz von der Fitbit-API in Python!
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
Holen Sie sich automatisch den Port, an dem Arduino in Python steckt
Gibt es eine Verzerrung in den Zahlen, die in den Fibonacci-Zahlen erscheinen?
Finden Sie heraus, wie viele Zeichen sich in der Zeichenfolge befinden.
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Verschieben von CSV-Dateien mit Python Teil 1
Wie ist der Fortschritt? Lassen Sie uns mit dem Boom in Python weitermachen
So überprüfen Sie, ob sich der angegebene Schlüssel im angegebenen Bucket in Boto 3 befindet
Unterschied zwischen == und ist in Python
[Python] Finden Sie den zweitkleinsten Wert.
Wrap (Teil der) AtCoder Library in Cython zur Verwendung in Python
Ich habe die Bewegung Python3 ausprobiert, die die Richtung im Koordinatensystem ändert
Python im Browser: Brythons Empfehlung
Speichern Sie die Binärdatei in Python
Klicken Sie in Python auf die Sesami-API
Verwenden Sie networkx, eine Bibliothek, die Diagramme in Python verarbeitet (Teil 2: Lernprogramm).
Python ist UnicodeEncodeError im CodeBox-Docker
Holen Sie sich den Desktop-Pfad in Python
[Python] Was ist @? (Über Dekorateure)
Löschen Sie ein bestimmtes Zeichen in Python, wenn es das letzte ist
So gehen Sie mit dem Problem um, dass das aktuelle Verzeichnis verschoben wird, wenn Python von Atom ausgeführt wird
Holen Sie sich den Skriptpfad in Python
Im Python-Befehl zeigt Python auf Python3.8
Implementieren Sie das Singleton-Muster in Python
Finden Sie die Bearbeitungsentfernung (Levenshtein-Entfernung) mit Python