[Lass uns mit Python spielen] Ziel ist die automatische Satzgenerierung ~ Abschluss der automatischen Satzgenerierung ~

Einführung

Dies ist das dritte Mal, dass eine automatische Satzgenerierung angestrebt wird. Dieses Mal erstellen wir eine Funktion zur Satzgenerierung. Der Code wird lang sein. Lass es uns in der richtigen Reihenfolge tun.

Codeteil

Bereiten Sie Textdaten vor

Lassen Sie uns nun über Code sprechen. Hier ist derjenige, der zuerst verwendet wird.

import re
from janome.tokenizer import Tokenizer
from tqdm import tqdm
from collections import Counter
from collections import defaultdict
import random
t = Tokenizer()

Bereiten Sie den Text vor und laden Sie ihn. Halten Sie auch den Textinhalt sauber. Dieser Bereich ist wie im vorherigen Artikel.

a = open('test.txt', 'r', encoding = "utf-8") 
original_text = a.read()
#print(original_text) #Dokument anzeigen

first_sentence = '"Erklärung von Python."'
last_sentence = 'Die Reptilien-Nishiki-Schlange, was das englische Wort Python bedeutet, wird als Maskottchen und Symbol der Python-Sprache verwendet.'
#Textdaten organisieren.
_, text = original_text.split(first_sentence)
text, _ = text.split(last_sentence)
text = first_sentence + text + last_sentence

text = text.replace('!', '。') #!! Was? Zu. Ändern. Achten Sie auf volle und halbe Winkel
text = text.replace('?', '。')
text = text.replace('(', '').replace(')', '') #Löschen ().
text = text.replace('\r', '').replace('\n', '') #Wird mit Zeilenumbrüchen in Textdaten angezeigt\Löschen n
text = re.sub('[、「」?]', '', text) 
sentences = text.split('。') #.. Teile Sätze in Sätze mit
print('Wortzahl:', len(sentences))
sentences[:10] #10 Sätze anzeigen

Sätze aufteilen

Satz für Satz aufschlüsseln.

start = '__start__'  #Anweisung Startmarke
fin = '__fin__'  #Ende des Satzes

def get_three_words_list(sentence):  #Geben Sie einen Satz als Satz von 3 Wörtern zurück
    t = Tokenizer()
    words = t.tokenize(sentence, wakati=True)
    words = [start] + words + [fin]
    three_words_list = []
    for i in range(len(words) - 2):
        three_words_list.append(tuple(words[i:i+3]))
    return three_words_list

three_words_list = []
for sentence in tqdm(sentences):
    three_words_list += get_three_words_list(sentence)
    
three_words_count = Counter(three_words_list)
len(three_words_count) 

Wörter verbinden und gewichten

#Markov-Kette
def generate_markov_dict(three_words_count):
    markov_dict = {}
    for three_words, count in three_words_count.items():
        two_words = three_words[:2]  #Unterteilt in die ersten beiden Wörter und das nächste Wort
        next_word = three_words[2]
        if two_words not in markov_dict: #Generieren Sie leere Daten, wenn diese nicht im Wörterbuch vorhanden sind
            markov_dict[two_words] = {'words': [], 'weights': []}
            markov_dict[two_words]['words'].append(next_word)  #Fügen Sie die folgenden Wörter und Zeiten hinzu
            markov_dict[two_words]['weights'].append(count)
    return markov_dict

markov_dict = generate_markov_dict(three_words_count)
markov_dict
def get_first_words_weights(three_words_count):
    first_word_count = defaultdict(int)
    
    for three_words, count in three_words_count.items():
        if three_words[0] == start:
            next_word = three_words[1]
            first_word_count[next_word] += count

    words = []  #Wörter und Gewichte(Anzahl der Auftritte)Liste zum Speichern
    weights = []
    for word, count in first_word_count.items():
        words.append(word)  #Fügen Sie der Liste Wörter und Gewichte hinzu
        weights.append(count)
    return words, weights

get_first_words_weights(three_words_count)
markov_dict = generate_markov_dict(three_words_count)
print(len(markov_dict))
first_words, first_weights = get_first_words_weights(three_words_count)
print(len(first_words))
def get_first_words_weights(three_words_count):
    first_word_count = defaultdict(int)
    
    for three_words, count in three_words_count.items():
        if three_words[0] == start:
            next_word = three_words[1]
            first_word_count[next_word] += count

    words = []  #Wörter und Gewichte(Anzahl der Auftritte)Liste zum Speichern
    weights = []
    for word, count in first_word_count.items():
        words.append(word)  #Fügen Sie der Liste Wörter und Gewichte hinzu
        weights.append(count)
    return words, weights

get_first_words_weights(three_words_count)
def get_first_words_weights(three_words_count):
    first_word_count = defaultdict(int)  #Erstellen Sie ein Standarddikt mit dem Wert int
    for three_words, count in three_words_count.items():
        if three_words[0] == start:  #Extrahieren Sie nur diejenigen, die mit start beginnen
            next_word = three_words[1]
            first_word_count[next_word] += count #Fügen Sie die Anzahl der Auftritte hinzu
    return first_word_count

get_first_words_weights(three_words_count)

Sätze automatisch generieren

def generate_text(fwords, fweights, markov_dict):
    first_word = random.choices(fwords, weights=fweights)[0]  #Holen Sie sich das erste Wort
    generate_words = [start, first_word]  #Liste zum Speichern von Wörtern für die Satzgenerierung
    while True:
        pair = tuple(generate_words[-2:])  #Holen Sie sich die letzten beiden Wörter
        words = markov_dict[pair]['words']  #Holen Sie sich eine Liste der folgenden Wörter und Gewichte
        weights = markov_dict[pair]['weights']
        next_word = random.choices(words, weights=weights)[0]  #Holen Sie sich das nächste Wort
        if next_word == fin:  #Verlasse die Schleife, wenn der Satz endet
            break
        generate_words.append(next_word)
    return ''.join(generate_words[1:])  #Erstellen Sie Sätze aus Wörtern

Generierung starten!

for l in range(3):
    sentence = generate_text(first_words, first_weights, markov_dict)
    print(sentence)

Das Ergebnis ist dies. 2020-02-19.png

Reflexion und Vorsicht

(゚ Д ゚) Die ursprüngliche Mutter ist herausgekommen ... Absolut die Menge an Originaltext ist gering. Achtung) Als ich versuchte, es auszuführen, waren die Spezifikationen des PCs unzureichend oder es wurde nicht richtig generiert. Der Grund ist unbekannt. Es braucht Zeit für eine große Menge Text.

Plaudern

Der Text wird jetzt automatisch generiert. Dies ist das Ende von "Streben nach automatischer Satzgenerierung". Es gibt einige Verbesserungen, aber die ursprüngliche Textmenge und die Funktionen sind immer noch unzureichend. Aus diesem Grund gibt es viele, die den Satz von sic unweigerlich beendet haben. Schade, dass der Text in diesem Beispiel nicht interessant ist. Ich werde wieder einen Artikel schreiben, wenn ich ihn ein wenig reparieren kann.

Dieser Code basiert auf dem Buch und seinem Beispielcode. (Ich habe den Namen des Buches vergessen.) Osamu Osamu, der damals ging. 2020-02-19 (1).png

Recommended Posts

[Lass uns mit Python spielen] Ziel ist die automatische Satzgenerierung ~ Abschluss der automatischen Satzgenerierung ~
[Lass uns mit Python spielen] Ziel ist die automatische Satzgenerierung ~ Morphologische Analyse durchführen ~
[Lass uns mit Python spielen] Ziel ist die automatische Satzgenerierung ~ Lies .txt und mache daraus eine Satzeinheit ~
Lass uns mit Python mit Python spielen [Anfänger]
Spielen Sie mit 2016-Python
Python-Handspiel (Beginnen wir mit AtCoder?)
Automatischer Betrieb von Chrome mit Python + Selen + Pandas
Bewegen Sie die automatische Stufe von THORLABS mit Python [für Forschungszwecke]
[Python3] Automatische Texterzeugung mit janome und markovify
Lassen Sie uns mit Python Receive spielen und den Text des Eingabeformulars speichern / anzeigen
VS-Code-Einstellungen für die Entwicklung in Python mit Abschluss
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Zusammenfassung der Tools zum Betreiben der Windows-Benutzeroberfläche mit Python
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen eines Python-Skripts
Lassen Sie uns GPIO von Raspeye mit Python CGI betreiben
Ich habe den Code für die japanische Satzgenerierung mit DeZero geschrieben
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
Simulieren Sie mit Python verspätete Schäden für kriminelle Kinderbetreuungskosten
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
Drehen Sie ein Array von Zeichenfolgen mit einer for-Anweisung (Python3).
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Automatische Quizgenerierung mit COTOHA
Spielen wir mit der 4. Dimension der 4. Dimension
Automatisches Update des Python-Moduls
Satzerzeugung mit GRU (Keras)
Spielen wir mit Amedas Daten - Teil 4
[Python] Spielen Sie mit Discords Webhook.
Spielen wir mit Amedas Daten - Teil 3
Spielen wir mit Amedas Daten - Teil 2
Lassen Sie uns Git-Cat mit Python bauen
Mechanismus zur automatischen Flusenprüfung mit flake8 beim Festschreiben von Python-Code
Achten Sie beim Drucken von Japanisch mit Python 3 auf LANG für UnicodeEncodeError
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Fassen wir den Grad der Kopplung zwischen Modulen mit Python-Code zusammen
Automatische Erstellung des Monatskalenders 2021 (Nachfüllung für Systemnotizbuch) durch Python
Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 2 [Transaktion mit API]
Lassen Sie uns eine GUI mit Python erstellen.
Erste Schritte mit Python für PHPer-Klassen
Erste Schritte mit Python Grundlagen von Python
Lebensspiel mit Python! (Conways Spiel des Lebens)
10 Funktionen von "Sprache mit Batterie" Python
Lassen Sie uns mit Python Image Scraping durchführen
4. Nacht der Schleife mit für
Passwort für Lehrbuch mit Python generieren
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Implementierung der Dyxtra-Methode durch Python
CSRF-Token-Generierung für Gegenmaßnahmen mit Python
Automatische Erzeugung von Sadamasashi Kawayanagi
Erste Schritte mit Python3
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Erste Schritte mit Python für PHPer-Funktionen
Ich habe versucht, Sätze mit GPT-2 zu generieren
Aufzeichnung der Python-Einführung für Neulinge
Lassen Sie uns die Stimme mit Python # 1 FFT analysieren