[PYTHON] "Obake" kann von "dir" gesungen werden

Einführung

Stichprobe

result



"Obake" kann von "dir" gesungen werden[Ähnlichkeitsgrad:0.24651645]

Hauptthema

Externe API zum Erstellen des Tools

Quellcode

Was ich gemacht habe

-① Wortsuchwerkzeug, das auf den Reim treten kann --API verwendet

① Wortsuchwerkzeug, das auf den Reim treten kann

Rolle

Zahl

1.png

Wie es funktioniert

--Konvertieren Sie das angegebene Wort und das Wort in der CSV-Datei mit pykakashi in Romaji.

converter


    def convert_hiragana_to_roma(self, target_word_hiragana):
        #Im Falle einer Aufforderung
        #Da "tsu" und "tsu" in dasselbe "tsu" konvertiert werden, verwenden Sie "x" als Sonderzeichen.
        if target_word_hiragana == "Tsu":
            return "x"
        else:
            kakasi_lib = kakasi()
            #Hira Kana in römische Schriftzeichen
            kakasi_lib.setMode('H', 'a')
            conv = kakasi_lib.getConverter()

            target_word_roma = conv.do(target_word_hiragana)
            return target_word_roma
Bedingungen Ursprüngliches Wort Vor der Konvertierung Nach der Konvertierung
Nur Vokale Obake obake oae
Enthält eine Erinnerung voll ippai ixai
"N" ist enthalten Pike sanma ana
"-" Ist enthalten Donner sanda- anaa

converter


    #Konvertieren Sie das Lesepseudonym in ein phonologisches Muster
    def convert_roma_to_phoneme_pattern(self, target_char_roma_list):
        pre_phoneme = None
        hit_list = []
        for target_char_roma in target_char_roma_list:
            #Vasenetui
            #Irgendwelche von "Ah, äh, eh, oh"
            vowel_char = self.__find_vowel_char(
                target_char_roma
            )
            specific_char = self.__find_specific_char(
                pre_phoneme,
                target_char_roma
            )

            if vowel_char:
                hit_list.append(vowel_char)
                pre_phoneme = vowel_char
            elif specific_char:
                #Kein Vokal, sondern ein Zielfall
                #""
                #"Hmm"
                #"-"
                hit_list.append(specific_char)
                pre_phoneme = specific_char
            else:
                continue

        phoneme_pattern = "".join(hit_list)
        return phoneme_pattern

    def __find_vowel_char(self, char_roma):
        #Für Vokale
        vowel_list = ["a", "i", "u", "e", "o"]
        for vowel in vowel_list:
            if char_roma.find(vowel) > -1:
                return vowel
            else:
                continue
        #Wenn nicht ein Vokal
        return None

    def __find_specific_char(self, pre_phoneme, char_roma):
        #Im Fall von "n"
        #Im Fall von "tsu":
        if char_roma == "n" or char_roma == "x":
            return char_roma
        #Im Falle von "-"
        #Betrachten Sie das gleiche wie den vorherigen Vokal
        #Beispiel)Daa-> a
        elif pre_phoneme != None and char_roma == "-":
            return pre_phoneme
        else:
            return None

Ausführungsbeispiel

execute


$cd src
$python main.py Geist

result


"Obake" kann mit "Antwort" gereimt werden
"Obake" kann mit "dir" verweilen

Ähnlichkeitsurteil

--Nach dem Extrahieren der Kombination von Wörtern, die gereimt werden können, setzen Sie das angegebene Wort auf "base_word" und das aus CSV extrahierte Wort auf "pool_word" zur Analyse.

cotoha_client.py


    def check_score(self, base_word, pool_word, access_token):
        headers = {
            "Content-Type": COTOHA_CONTENT_TYPE,
            "charset": COTOHA_CHAR_SET,
            "Authorization": "Bearer {}".format(access_token)
        }
        data = {
            "s1": base_word,
            "s2": pool_word,
            "type": "default"
        }
        req = urllib.request.Request(
            f"{COTOHA_BASE_URL}/{COTOHA_SIMILARITY_API_NAME}",
            json.dumps(data).encode(),
            headers
        )
        time.sleep(COTOHA_REQUEST_SLEEP_TIME)
        with urllib.request.urlopen(req) as res:
            body = res.read()
            return json.loads(body.decode())["result"]["score"]

Ausführungsbeispiel

execute


$cd src
$python main.py Geist

result


"Obake" kann mit "answer" gesungen werden[Ähnlichkeitsgrad:0.063530244]
"Obake" kann von "dir" gesungen werden[Ähnlichkeitsgrad:0.24651645]

Aufgabe

Die ursprüngliche CSV-Datei ist behoben

2.png

② Tool zur Generierung von Wortpools

Rolle

Diagramm

3.png

Wie es funktioniert

qiita_client.py


    def list_articles(self):
        req = urllib.request.Request(
            f"{QIITA_BASE_URL}/{QIITA_API_NAME}?page={QIITA_PAGE_NUMBERS}&per_page={QIITA_ITEMS_PAR_PAGE}"
        )
        with urllib.request.urlopen(req) as res:
            body = res.read()
            return json.loads(body.decode())

cotoha_client.py


    # target_Setzen Sie Qiitas Artikeltitel in Satz
    def parse(self, target_sentence, access_token):
        headers = {
            "Content-Type": COTOHA_CONTENT_TYPE,
            "charset": COTOHA_CHAR_SET,
            "Authorization": "Bearer {}".format(access_token)
        }
        data = {
            "sentence": target_sentence,
        }
        req = urllib.request.Request(
            f"{COTOHA_BASE_URL}/{COTOHA_PARSE_API_NAME}",
            json.dumps(data).encode(),
            headers
        )
        time.sleep(COTOHA_REQUEST_SLEEP_TIME)
        with urllib.request.urlopen(req) as res:
            body = res.read()
            return json.loads(body.decode())["result"]

finder.py


    #Extrahieren Sie nur die Nomenklatur aus dem Ergebnis der syntaktischen Analyse und geben Sie die Liste zurück
    def find_noun(self, target_sentence_element):
        noun_list = []
        for element_num in range(len(target_sentence_element)):
            tokens = target_sentence_element[element_num]["tokens"]

            for tokens_num in range(len(tokens)):
                target_form = tokens[tokens_num]["form"]
                target_kana = tokens[tokens_num]["kana"]
                target_pos = tokens[tokens_num]["pos"]

                #Wenn es sich um eine Nomenklatur handelt, speichern Sie sie in der Liste
                if target_pos == TARGET_CLASS:
                    #In englischen Wörtern, Zahlen und Symbolen werden stattdessen Lesepseudonyme gespeichert
                    # TODO:Das Urteil ist verbesserungswürdig.
                    if re.match(FINDER_REGEX, target_form):
                        noun_list.append(target_kana)
                    else:
                        noun_list.append(target_form)

        return noun_list

Ausführungsbeispiel

execute


$cd tool
$python word_pool_generator.py

word_pool.csv


Backup
Werkzeug
ABC
Zeichenfolge
visuell
Studio
Code
Hinweis
Management
Erweiterung
Zusammenfassung
Papier-
Kommentar

Aufgabe

»Ehrlich gesagt ist es schwer. Selbst 40 veröffentlichte Artikel benötigen ca. 5 Minuten für die Bearbeitung. ――Die Anzahl der Nomenklaturen, die in einem Artikeltitel extrahiert werden können, beträgt etwa 2 bis 5. ――Jedoch, da ich bei der Ausgabe in eine CSV-Datei zum ersten Mal "Pandas" berührt habe, denke ich, dass ich die Logik noch weiter verbessern kann. ――Es ist ein Level, in dem ich etwas gemacht habe, das vorerst funktioniert.

――Erhöhen Sie die Variation von Wörtern ――Es scheint, dass Sie Wörter aus anderen Feldern sammeln können, indem Sie auf anderen Websites kratzen.

Artikel, die ich als Referenz verwendet habe

Andere

Über das Motiv, das gemacht hat

――Der Grund, warum ich so etwas überhaupt gemacht habe, ist, dass ich diesen Artikel vor ungefähr einem halben Jahr gesehen und mit einem Freund gesagt habe: "Ich kann die Verarbeitung natürlicher Sprache verwenden, um mich zu reimen. Ich hatte ein Gespräch: "Kann ich ein Wort finden?" ――Jedoch kannte ich das Gebiet der Verarbeitung natürlicher Sprache zu diesem Zeitpunkt (auch jetzt noch) überhaupt nicht, und als ich dieses Projekt zufällig sah, dachte ich, ich könnte etwas in der Nähe davon machen, also entschied ich mich, dieses Tool zu erstellen. Ich habe es gemacht.

Recommended Posts

"Obake" kann von "dir" gesungen werden
Listen Sie die Klassen auf, auf die ObjCClass verweisen kann
Wie Sie vielleicht wissen, kann Python so geschrieben werden
Implementieren Sie einen Thread, der durch Ausnutzen von Yield angehalten werden kann
Können Sie die Sportplanung lösen?
Es könnte rekursiv sein
Können Sie diese Datei löschen?
Untersuchung der von Python steuerbaren Gleichstromversorgung
Die Art des Tupel-Arrays kann durch Angabe des Schlüssels (Python) beschleunigt werden.