Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA

Sie können es sofort mit Apache Lucene tun. Sie können es in einer Zeile tun. Es gibt die Levenstein-Distanzmethode und die Jaro-Winkler-Distanzmethode (obwohl es andere gibt).

Levenstein-Distanzmethode

Wie oft sollte ich bearbeiten = Entfernung. Beim Ersetzen von "BitCoin Core" durch "BitCoin Cash"

  1. Mal: "BitCoin C [a] re" Zweites Mal: "BitCoin Ca [s] e" Drittes Mal: "BitCoin Cas [h]"

Daher beträgt der Abstand "3".

In diesem Fall beträgt die Anzahl der Zeichen 12 Zeichen. 9 von 12 Zeichen müssen nicht bearbeitet werden Die Punktzahl beträgt 9/12 = 3/4 = 0,75, was 75 Punkten entspricht.

** Im Allgemeinen soll es für die Rechtschreib- und Diebstahlprüfung einfach zu verwenden sein. ** ** **

Jaro Winkler Distanzmethode

Ich messe auch die Ähnlichkeit Beispielsweise wird die Ähnlichkeit so berechnet, als ob es Zeichen gibt, die innerhalb eines bestimmten Bereichs ersetzt werden können.

Darüber hinaus wird bei der Berechnung der Ähnlichkeit auch berücksichtigt, wie gut die Präfixe übereinstimmen.

** Im Allgemeinen soll es zur Überprüfung von Rechtschreibfehlern wirksam sein **

Implementierung

Verlassen Sie sich nur auf Lucene. In Maven.

pom.xml


        <dependency>
            <artifactId>lucene-core</artifactId>
            <groupId>org.apache.lucene</groupId>
            <version>5.1.0</version>
        </dependency>
        <dependency>
            <artifactId>lucene-analyzers</artifactId>
            <groupId>org.apache.lucene</groupId>
            <version>3.6.1</version>
        </dependency>
        <dependency>
            <artifactId>lucene-spellchecker</artifactId>
            <groupId>org.apache.lucene</groupId>
            <version>3.6.1</version>
        </dependency>

sample


import org.apache.lucene.search.spell.JaroWinklerDistance;
import org.apache.lucene.search.spell.LevensteinDistance;

/**
 *Beispiel zur Berechnung der Ähnlichkeitsbewertung einer Zeichenfolge
 * @author ryutaro_hakozaki
 */
public class ExecStringSimilaritySample {
    
    public static void main(String argv[]){
        
        System.out.println(
                "Eine Punktzahl, die "BitCoin Core" und "BitCoin Cash" nach Levenstein-Entfernung vergleicht== " 
                        + getSimilarScoreByLevenshteinDistance("BitCoin Core", "BitCoin Cash"));

        System.out.println(
                "Jaro Winkler Score im Vergleich von "BitCoin Core" und "BitCoin Cash" aus der Ferne== " 
                        + getSimilarScoreByJaroWinklerDistance("BitCoin Core", "BitCoin Cash"));

        
    }
    
    /**
     *Der Revenstein-Abstand bestimmt die Ähnlichkeit der Saiten
     * @param s1
     * @param s2
     * @return 
     */
    private static int getSimilarScoreByLevenshteinDistance(String s1, String s2){
        
        //Eingabeprüfung entfällt
        LevensteinDistance dis =  new LevensteinDistance();
        return (int) (dis.getDistance(s1, s2) * 100);
    }
    
    /**
     *Jaro Winkler Beurteilung der Ähnlichkeit von Zeichenketten nach Entfernung
     * @param s1
     * @param s2
     * @return 
     */
    private static int getSimilarScoreByJaroWinklerDistance(String s1, String s2){
        
        //Eingabeprüfung entfällt
        JaroWinklerDistance dis =  new JaroWinklerDistance();
        return (int) (dis.getDistance(s1, s2) * 100);
    }
    
}

Ausführungsergebnis


Eine Punktzahl, die "BitCoin Core" und "BitCoin Cash" nach Levenstein-Entfernung vergleicht== 75
Jaro Winkler Score im Vergleich von "BitCoin Core" und "BitCoin Cash" aus der Ferne== 95

Recommended Posts

Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
CI die Architektur von Java / Kotlin-Anwendungen mit ArchUnit
Überwachen Sie den internen Status von Java-Programmen mit Kubernetes
Überprüfen Sie das Verhalten von Java Intrinsic Locks mit bpftrace
Die Geschichte von dto, dao-like mit Java, SQLite
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
Sortieren Sie Zeichenfolgen als charakteristische Funktion mit Java
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen
[Java] Löschen Sie die Elemente von List
Folgen Sie dem Link mit Selen (Java)
Der Ursprung von Java-Lambda-Ausdrücken
Probieren Sie HelloWorld mit der Mindestkonfiguration von Heroku Java Spring-Boot aus
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Der Suchtpunkt bei der Durchführung der Basisauthentifizierung mit Java URLConnection
Überschreiben Sie den gleichnamigen Upload mit dem BOX SDK (Java).
Ist die von Ihnen verwendete Version von Elasticsearch mit Java 11 kompatibel?
Holen Sie sich das Ergebnis von POST in Java
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Überprüfen Sie den Inhalt der Parameter mit pry
Untersuchen Sie die Speichernutzung von Java-Elementen
Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
[Java] Ermittelt den Tag eines bestimmten Tages
Anmerkung: [Java] Überprüfen Sie den Inhalt des Verzeichnisses
Vergleichen Sie Elemente eines Arrays (Java)
So konvertieren Sie ein Array von Strings mit der Stream-API in ein Array von Objekten
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Was sind die aktualisierten Funktionen von Java 13
Messen Sie einfach die Größe von Java-Objekten
Rückblick auf die Grundlagen von Java
[Java] Vorsichtsmaßnahmen beim Vergleichen von Zeichenfolgen mit Zeichenfolgen
Ausgabe des Buches "Einführung in Java"
Über die Behandlung von BigDecimal (mit Reflexion)
Überprüfen Sie den MX-Eintrag der E-Mail-Adresse mit Java und die Domain
Die Geschichte des Schreibens von Java in Emacs
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter
[Java] Überprüfen Sie die Anzahl der Zeichen
[Java] [Spring] Testen Sie das Verhalten des Loggers
Versuchen Sie es mit der Wii-Fernbedienung in Java
[Java] Holen Sie sich MimeType aus dem Inhalt der Datei mit Apathce Tika [Kotlin]
[Java] Ermitteln Sie das Datum mit der LocalDateTime-Klasse
Inkrementiert durch das dritte Argument der iterierten Methode der aus Java9 hinzugefügten Stream-Klasse
Durchbrechen Sie gewaltsam das C-Problem "* 3 oder / 2" von [AtCoder Problem-ABC100] mit Java [Code]
Überprüfen Sie das ID-Token eines von AWS Cognito in Java authentifizierten Benutzers
[Java] Tag ab Datum berechnen (Kalenderklasse nicht verwenden)
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Behandlung von Java Beans in der Methodenkette
JAVA: jar, aar, zeige den Inhalt der Datei an
[java] Zusammenfassung des Umgangs mit Zeichenketten
Die Geschichte eines gewöhnlichen Othello in Java
[Android] [Java] Verwalten Sie den Status der CheckBox von ListView
Überprüfen Sie den Inhalt des Argumentobjekts mit Mockito
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
[LeJOS] Lassen Sie uns den EV3-Motor mit Java steuern
Über die Idee anonymer Klassen in Java
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
[Java] Stellen Sie die Zeit im Browser mit jsoup ein
[Java] Zugriff auf die signierte URL von s3 (signierte Version 2)
Die Geschichte des Lernens von Java in der ersten Programmierung
Grundlegendes zum MVC-Framework mit serverseitiger Java 1/4 View
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge