Morphologische Analyse in Java mit Kuromoji

Über diese Seite

Lassen Sie uns eine morphologische Analyse in Java durchführen. In Anbetracht dessen, dass dies in verschiedenen anderen Artikeln Voraussetzung sein wird, werde ich bis zur Funktionsprüfung zusammenfassen.

Was ist morphologische Analyse?

Es bezieht sich auf den Prozess der Aufteilung eines Dokuments in kleinste sinnvolle Einheiten wie Wörter. Dies ist eine der am häufigsten verwendeten Techniken, um Maschinen dazu zu bringen, Sprache zu verarbeiten.

Es gibt viele andere Begriffe in diesem Artikel, Zunächst wird die Funktionsprüfung beschrieben und jeder Begriff im Anhang erwähnt.

Entwicklungspolitik

Die Richtlinie besteht darin, die Kuromoji-Bibliothek zusätzlich zu Spring Boot & Gradle hinzuzufügen. Wenn Sie aus dem Umweltbau stammen, lesen Sie bitte Folgendes. ⇒ Einführung in Spring Boot ... Es ist gut, also bin ich mir sicher!

Umgebung Bedienung/Ausführung
Ausführungsumgebung Windows10
Entwicklungsumgebung eclipse Oxygen.2 Release (4.7.2)Java-Version
Entwicklungssprache Java 8
Framework SpringBoot 2.1.3

Willkommen Kuromoji zum Projekt

Kuromojis Bibliothek scheint sich in Maven Central zu befinden. Dieses Mal habe ich beschlossen, es aus Codelibs zu holen.

Zu Repositorys und Abhängigkeiten wie folgt hinzugefügt. Führen Sie dann eine Gralde-Aktualisierung durch, um die Abhängigkeiten zu aktualisieren.

build.gralde


plugins {
	id 'org.springframework.boot' version '2.1.3.RELEASE'
	id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.lab.app.ketman'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
	//hinzufügen
	maven {
        url "http://maven.codelibs.org"
    }
    //Bisher
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0'

	//hinzufügen
	implementation 'org.codelibs:lucene-analyzers-kuromoji-ipadic-neologd:7.6.0-20190325'
	//Bisher

	runtimeOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'org.postgresql:postgresql'

	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

Versuchen Sie vorerst, auf der Konsole auszugeben

Das Analyseergebnis wird im Attributobjekt gespeichert. Holen Sie sich die gewünschten Informationen, indem Sie sie als Variable deklarieren.

Attribute Überblick
CharTermAttribute Darstellung des analysierten Satzes wie er ist
ReadingAttribute Lesen der Morphologie
OffsetAttribute In welchem Charakter erscheint das morphologische Element?
PartOfSpeechAttribute Teil Lyrics Informationen
BaseFormAttribute Prototyp
InflectionAttribute Nutzung

KuromojiSample


public class KuromojiSample {
	//Geben Sie eine Liste der Kuromoji-Entitäten als Rückgabe zurück
	public List<KuromojiEntity> kuromojineologd(String src){
		List<KuromojiEntity> keList = new ArrayList<KuromojiEntity>();
		try(JapaneseTokenizer jt =
				new JapaneseTokenizer(null, false, JapaneseTokenizer.Mode.NORMAL)){
			jt.setReader(new StringReader(src));
			jt.reset();
			while(jt.incrementToken()){

				CharTermAttribute ct = jt.addAttribute(CharTermAttribute.class);
				ReadingAttribute ra = jt.addAttribute(ReadingAttribute.class);
				OffsetAttribute oa = jt.addAttribute(OffsetAttribute.class);
				PartOfSpeechAttribute posa = jt.addAttribute(PartOfSpeechAttribute.class);
				BaseFormAttribute bfa = jt.addAttribute(BaseFormAttribute.class);
				InflectionAttribute ifa = jt.addAttribute(InflectionAttribute.class);

				System.out.println(
						ct.toString()
						+ " | " + ra.getReading()
						+ " | " + oa.startOffset()
						+ " | " + posa.getPartOfSpeech()
						+ " | " + bfa.getBaseForm()
						+ " | " + ifa.getInflectionForm()
						+ " | " + ifa.getInflectionType());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return keList;
	}
}

KuromojiSample


@Controller
public class SampleKuromojiController {
	KuromojiSample ks = new KuromojiSample();

	@RequestMapping("/kuromoji")
	public String index(Model model) {
		String sentence = "neologd kann Yuru-chara als richtige Nomenklatur interpretieren.";
		ks.kuromojineologd(sentence);
		return "index";
	}
}

Ergebnis

neologds wörterbuch scheint so aufgeteilt zu sein. Es ist charakteristisch, dass die Lesung Jiccouiinkai enthält.

neologd |Neologdy| 0 |Substantiv-Eigenname-Allgemeines| NEologd | null | null
Du|Kun| 7 |Substantiv-Suffix-Name der Person| null | null | null
Ist|C.| 8 |Partikel-Hilfe| null | null | null
Yuru Chara|Yuru Chara Grand Prix Jiccoui Inkai| 9 |Substantiv-Eigenname-Name der Person-Allgemeines| null | null | null
Zu|Wo| 14 |Partikel-Fallassistent-Allgemeines| null | null | null
Eigenname|Koyu Meishi| 15 |Substantiv-Allgemeines| null | null | null
Wie|Toshite| 19 |Partikel-Fallassistent-Gemeinsame Sprache| null | null | null
Interpretation|Kaishaku| 22 |Substantiv-Verbindung ändern| null | null | null
Fertig|Deki| 24 |Verb-Unabhängigkeit|Tun können|Kontinuierlicher Typ|Ein Schritt
Masu|Forelle| 26 |Hilfsverb| null |Grundform|Spezial / Masse
。 | 。 | 28 |Symbol-Phrase| null | null | null

Blinddarm

① Was ist Lucene Analyzer?

Auszug aus 1. Überblick über Lucene

Lucene ist eine Volltextsuchmaschine vom Typ 100% PureJava-Indizierung, die von Jakarta Project 1 entwickelt wurde. (Ein Index ist ein Index, der für die schnelle Suche angehängt wird.) Lucene selbst ist eine Bibliothek, kein vollständiges Programm, Mit der von Lucene bereitgestellten API können Sie ganz einfach ein benutzerfreundliches Volltextsuchprogramm erstellen. Da es in Java geschrieben ist, kann es auch leicht an Webanwendungen angepasst werden. Lucene selbst kann kein Japanisch analysieren, aber es ist möglich, mithilfe eines morphologischen Analyseprogramms nach Japanisch zu suchen.

② Was ist ipadic-neologd?

Die Pflege von Informationen (Wörterbuch), die Maschinen Tag und Nacht in der sich entwickelnden natürlichen Sprache zur Verfügung gestellt werden, ist eines der Probleme. Die Idee ist, dieses Problem durch Crawlen im Web zu beheben. Teilauszug aus neologd / mecab-ipadic-neologd

mecab-ipadic-NEologd ist ein Systemwörterbuch für MeCab, das durch Hinzufügen neuer Wörter aus vielen Web-Sprachressourcen angepasst wurde. Bei der Analyse von Dokumenten im Web wird empfohlen, dieses Wörterbuch zusammen mit dem Standardsystemwörterbuch (ipadic) zu verwenden. (Weggelassen) Vorteile Es werden ungefähr 3,12 Millionen Paare (einschließlich doppelter Einträge) der Oberflächenschicht (Notation) und Frigana-Wortpaare wie eindeutige Ausdrücke aufgezeichnet, die vom MeCab-Standardsystemwörterbuch nicht korrekt unterteilt werden können. Dieses Wörterbuch wird auf dem Entwicklungsserver automatisch aktualisiert Wird mindestens zweimal pro Woche aktualisiert Montag und Donnerstag Mithilfe von Sprachressourcen im Web können zum Zeitpunkt der Aktualisierung neue eindeutige Ausdrücke aufgezeichnet werden Die derzeit verwendeten Ressourcen sind: ・ Daten des Hatena-Schlüsselworts sichern ・ Postleitzahlendaten herunterladen … (Weggelassen) Nachteile Unzureichende Klassifizierung der richtigen Ausdrücke Beispielsweise werden einige Personennamen und Produktnamen derselben eindeutigen Ausdruckskategorie zugeordnet. Wörter, die keine eindeutigen Ausdrücke sind, werden auch als eindeutige Ausdrücke registriert …

③ Informationen zum Festlegen der Analyserichtlinie

Im Beispielcode wurde das Argument (JapaneseTokenizer.Mode.NORMAL) angegeben, Es gibt auch Such- und Erweiterungsmodi mit den folgenden Funktionen.

Auszug aus Über Kuromoji

Normaler Modus Nach dem Initialisieren des normalen Modus wird die morphologische Analyse standardmäßig in diesem Format durchgeführt.

Suchmodus Ein Wort, das mehrere Wörter wie "Nihon Keizai Shimbun" kombiniert, heißt "Japan".|Wirtschaft|Es analysiert separat wie eine Zeitung. In Kombination mit einer Volltextsuchmaschine ist dies praktisch, da der Nihon Keizai Shimbun auch nach "Wirtschaft" oder "Zeitung" durchsucht werden kann.

Erweitert den Modus Behandeln Sie unbekannte Wörter zusätzlich zum Suchmodus als Uni-Gramm. Zum Beispiel ist "mobage" "mo"|Ba|Ge|- "Ist in jedes Zeichen unterteilt. Eine Funktion, die die Wahrscheinlichkeit zu verringern scheint, dass nicht nach unbekannten Wörtern gesucht wird.

④ Zusätzliche Grammatik zu Gradle

Wenn Sie es von Maven Central erhalten möchten, sollten Sie es so machen. [Home » com.atilika.kuromoji » kuromoji-ipadic » 0.9.0] (https://mvnrepository.com/artifact/com.atilika.kuromoji/kuromoji-ipadic/0.9.0)

// https://mvnrepository.com/artifact/com.atilika.kuromoji/kuromoji-ipadic
compile group: 'com.atilika.kuromoji', name: 'kuromoji-ipadic', version: '0.9.0'

Recommended Posts

Morphologische Analyse in Java mit Kuromoji
NLP4J Morphologische Analyse in Java (unter Verwendung von Kuromoji)
Führen Sie eine statische Code-Analyse mit Checkstyle mit Java + Gradle durch
Themenanalyse (LDA) in Java
Verwenden Sie die japanische morphologische Analyse "kuromoji"
Protokollaggregation und -analyse (Arbeiten mit AWS Athena in Java)
Ich habe eine morphologische Analyse mit MeCab versucht
Führen Sie eine Phrasenanalyse in Java 8 durch (Teil 2).
1 Implementieren Sie eine einfache Phrasenanalyse in Java
Tweak Markdown mit Java Flexmark-Java
Erstellen einer Phrasenanalyse in Java 8 (Teil 1)
NLP4J Morphologische Analyse mit Java (unter Verwendung der japanischen morphologischen Analyse des Yahoo! Developer Network)
Englische morphologische Analyse wie MeCab mit OpenNLP
Parallelitätsmethode in Java mit grundlegendem Beispiel
[Java] Spam-Beurteilung mittels morphologischer Analyse "lucene-gosen"
Chinesische morphologische Analyse wie Mecab mit FNLP
Lesen Sie die xlsx-Datei in Java mit Selenium
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Behandeln Sie große JSON mit Java Lambda
Partisierung in Java
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
FizzBuzz in Java
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Überarbeitetes GUI-Tool, das 2016 mit Java8 + JavaFX erstellt wurde
Textextraktion in Java aus PDF mit pdfbox-2.0.8
Üben Sie die Arbeit mit Unicode-Ersatzpaaren in Java
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
Programmierung mit dem direkten Summentyp in Java (Nachrichten)
Kommen Sie mit Java-Containern in Cloud Run zurecht
Installieren Sie Java mit Homebrew
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Kommentare in der Java-Quelle
Fügen Sie das Bild mit der statischen Java-Methode in die JAR-Datei ein
Azure funktioniert in Java
Bequemer Download mit JAVA
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Schalten Sie Java mit direnv
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Implementieren Sie Singleton mit Enum schnell in Java
Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren