[PYTHON] Verwenden Sie MeCab, um schlampige Sätze "langsam" zu übersetzen.

Wenn ich im Internet surfe, flattere ich mit Verspottungen, die aus den Worten Masakari und Ahat Ahat herausspringen. Wenn eine solche Streukugel hierher fliegt, wie sollen wir sie für die psychische Gesundheit ausgeben?

Eine Lösung besteht darin, solche Sätze über schlechte psychische Gesundheit zu parieren, indem man sie "langsam" umwandelt.

yukkurihonyaku.png

** Langsame Übersetzung ** http://needtec.sakura.ne.jp/yukkuri_translator/

Nehmen wir an, Ihnen wurde gesagt: "Machen Sie nicht nur Mistvideos, diese Inkompetenz." Wenn es jedoch in "Ja, mach es nicht, dieser Dote-san." Konvertiert wird, wirst du nicht böse.

Hier werden wir MeCab verwenden, um morphologische Analysen durchzuführen und Sätze, die für die psychische Gesundheit schlecht sind, langsam umzuwandeln, um Beschwerden zu beseitigen, aber damit sie sich wie zu Hause fühlen.

Quellcode

yukkuri_translator.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MeCab
import jctconv
import sys
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdout = codecs.getwriter('utf-8') (sys.stdout)


converter = {
    'Essen' : 'Mush Mush',
    'Essen' : 'Musha Musha',
    'schlafen' : 'Suyasu',
    'schlafen' : 'Suyasu',
    'Schlafen' : 'Suyasuyashi',
    'Schlafen' : 'Suyasuyashi',
    'Scheisse' : 'Ja ja',
    'Schemel' : 'Ja ja',
    'Flug' : 'Ja ja',
    'Urin' : 'Shishi',
    'Piss' : 'Shishi',
    'Sonne' : 'Sonne',
    'Sanktionen' : 'Überhaupt',
    'Süßwaren' : 'Messe',
    'Süßigkeiten' : 'Messe',
    'Zucker' : 'Messe',
    'Saft' : 'Messe',
    'Koordinierung' : 'Koordinierung',
    'Schwangerschaft' : 'Ninshin'
}



class MarisaTranslator:
    def __init__(self, user_dic):
        self.mecab = MeCab.Tagger("-u " + user_dic)

    def _check_san(self, n):
        """
Beurteilung, ob "san" hinzugefügt werden soll
        """
        f = n.feature.split(',')
        if f[0] == 'Substantiv':
            if f[1] == 'Eigenname' or f[1] == 'Allgemeines':
                if n.next:
                    #Überprüfen Sie das nächste Wort
                    nf = n.next.feature.split(',')
                    if nf[0] in ['Substantiv', 'Hilfsverb']:
                        #Wenn die Nomenklatur folgt, fügen Sie hier nicht "san" hinzu
                        return False
                    else:
                        if n.surface.endswith('Herr.'):  # Herr.でおわる場合は付与しない
                            return False
                        if n.surface == 'Herr' or n.surface == 'Sama':  # Herrでおわる場合は付与しない
                            return False
                        return True
                else:
                    return True
        return False


    def _check_separator(self, n):
        """
Beurteilung, ob "," hinzugefügt werden soll
        """
        f = n.feature.split(',')
        if f[0] == 'Partikel':
            if n.next:
                #Überprüfen Sie das nächste Wort
                nf = n.next.feature.split(',')
                if nf[0] in ['Symbol', 'Partikel']:
                    return False
                return True
        return False


    def _get_gobi(self, n):
        if n.next:
            f_next = n.next.feature.split(',')
            if n.next.surface == '、':
                return None
            if f_next[0] == 'BOS/EOS' or f_next[0] == 'Symbol':
                f = n.feature.split(',')
                if f[0] in ['Partikel', 'Substantiv', 'Symbol', 'Beeindruckende Worte']:
                    return None
                if f[5] in ['Befehl e', 'Kontinuierlicher Typ']:
                    return None
                if n.surface in ['Ist']:
                    return 'Was'
                else:
                    return n.surface + 'Noze'
        return None

    def translate(self, src):
        n = self.mecab.parseToNode(src)
        text = ''
        pre_node = None
        while n:
            f = n.feature.split(',')
            if n.surface in converter:
                text += converter[n.surface]
            elif len(f) > 8:
                gobi = self._get_gobi(n)
                if gobi is not None:
                    text += gobi
                elif f[8] != '*':
                    text += f[8]
                else:
                    text += n.surface
            else:
                text += n.surface
            if self._check_san(n):
                text += 'Herr.'
            elif self._check_separator(n):
                text += '、'
            n = n.next
            pre_node = n
        return jctconv.kata2hira(text.decode('utf-8')).encode('utf-8')

Beispiel für die Verwendung der obigen Klasse:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from yukkuri_translator import MarisaTranslator


if __name__ == "__main__":
    t = MarisaTranslator('yukkuri.dic')
    print t.translate('Machen Sie nicht nur Mistvideos, diese geringe Fähigkeit.')

Erläuterung

Umstellung auf Hiragana

Indem alle Zeichen einfach kana gemacht werden, wird es zu einer Linie wie ein 餡子 Gehirn.

Führen Sie dazu zunächst eine morphologische Analyse mit MeCab durch. Dadurch können Sie jedes Wort lesen. Dies gilt für 8 Funktionen (beginnend mit 0). Da diese Lesart in Katakana ist, verwenden Sie jctconv, um alles in ein einfaches Pseudonym umzuwandeln.

Es kann falsch verstanden werden, aber es ist ** Spezifikation **, weil es nur ein Sushi ist.

Da es sich nur um ein flaches Pseudonym handelt, fügen Sie entsprechend "," hinzu.

Aufgrund der langsamen Spezifikationen werden häufig flache Pseudonyme verwendet. Um die Lesbarkeit zu verbessern, fügen Sie daher so viel wie möglich nach dem Hilfswort "," ein. Weitere Informationen zu dieser Bedingung finden Sie unter "_check_separator".

Fügen Sie "san" am Ende von "noun" hinzu

Durch Hinzufügen von "san" am Ende der Nomenklatur können Sie die Langsamkeit ausdrücken. Wenn die Nomenklatur weiterhin besteht, gibt es Bedingungen wie Ausschluss. Weitere Informationen finden Sie unter "_check_san".

Fügen Sie am Ende des Wortes "noze" hinzu

Das Ende von Slow Marisa hat eine Eigenschaft, und in vielen Fällen endet das Ende des Satzes mit "Noze" oder "Nanoze", also habe ich es reproduziert.

Ein Beispiel ist wie folgt.

Die Verwaltung von Zahlungen und Ausgaben ist die Norm

Wenn da ist

Es ist natürlich, die Ausgaben zu verwalten

Es wird sein.

Siehe "_get_gobi" für Endbedingungen.

Wort ersetzen

Versuchen Sie, einige Wörter zu ersetzen. Zum Beispiel wird das Schimpfwort "Kot" durch "Ja" ersetzt, um den Geist des Benutzers zu stabilisieren. Dieser Austausch erfolgt gemäß dem in der Konvertervariablen registrierten Inhalt.

Zusammenfassung

Mithilfe der morphologischen Analyse von MeCab wurde bestätigt, dass Sätze, die für die psychische Gesundheit schlecht sind, so getarnt werden können, als würden sie langsam und süß sprechen.

Wenn man dies anwendet, wird angenommen, dass es möglich ist, in Sätze wie "Slowly Reimu", "Slowly Youmu" und "Yaruo" zu übersetzen.

Die im Web ausgeführte Anwendung und ihr Code sind unten angefügt.

** Langsame Übersetzung ** http://needtec.sakura.ne.jp/yukkuri_translator/ https://github.com/mima3/yukkuri_translator

das ist alles.

Recommended Posts

Verwenden Sie MeCab, um schlampige Sätze "langsam" zu übersetzen.
Einfache Möglichkeit, Wikipedia mit Python zu verwenden
Ein Memorandum, weil ich beim Versuch, MeCab mit Python zu verwenden, gestolpert bin
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Erkennen Sie Anomalien in Sätzen mit ELMo, BERT, USE
Ein Memorandum zur Verwendung von Keras 'keras.preprocessing.image
Praktisch, um Matplotlib-Unterzeichnungen in for-Anweisungen zu verwenden
Es wurde eine Möglichkeit für UEFI behoben, Windows zum Booten zu zwingen
Fügen Sie MeCab ein Wörterbuch hinzu
Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
Eine Standardmethode zum Entwickeln und Verteilen von Paketen in Python
Einführung einer guten Methode zur Verwaltung von DB-Verbindungen in Python
Eine einfache Möglichkeit, einen zuvor ausgeführten Befehl in ipython erneut auszuführen
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Die stärkste Möglichkeit, MeCab und CaboCha mit Google Colab zu verwenden
Verwendung von Klassen in Theano
Verwendung von SQLite in Python
Wie man MySQL mit Python benutzt
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Stellen Sie von Python aus eine Verbindung zu postgreSQL her und verwenden Sie gespeicherte Prozeduren in einer Schleife.
Verwenden Sie eine Verknüpfung, um das Touchpad in Linux Mint zu aktivieren oder zu deaktivieren
Ich dachte, es wäre langsam, die for-Anweisung in NumPy zu verwenden, aber das war nicht der Fall.
Verwendung berechneter Spalten in CASTable
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Verwenden Sie print in Python2 lambda expression
Ich möchte in der Einschlussnotation drucken
Wie man Mecab, neologd-ipadic auf Colab verwendet
Verwendung von Google Test in C-Sprache
Wie bekomme ich Stacktrace in Python?
Mindestkenntnisse zur Verwendung von Form with Flask
Verwendung von Anacondas Interpreter mit PyCharm
Verwendung von __slots__ in der Python-Klasse
[V11 ~] Ein Memorandum für Misskey
Verwenden Sie Python 3 Subprocess.run () im CGI-Skript
Verwendung regulärer Ausdrücke in Python
So verwenden Sie Map in ViewPager von Android
Verwendung ist und == in Python
Verwenden Sie WebDAV in einer Portable Docker-Umgebung
Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Verwenden Sie dHash, um eine Szene in einem Rennspiel auf der Strecke zu lokalisieren
Auf der Suche nach einer effizienten Möglichkeit, eine Docker-Datei mit Python mit Gedichten zu schreiben
Python-Programm ist langsam! Ich möchte beschleunigen! In einem solchen Fall ...
Verwendung von loc / iloc / ix durch Angabe einer Spalte in CASTable