Rechtschreibkorrektur & Fuzzy -Suche: 1 Million Mal schneller durch symmetrische Löschen der Rechtschreibkorrekturalgorithmus
Der symmetrische Algorithmus für Rechtschreibkorrekturen verringert die Komplexität der Bearbeitungskandidatengenerierung und -Aufwörterbuchung für eine bestimmte Distanz von Damerau-Levenshtein. Es sind sechs Größenordnungen schneller (als der Standardansatz mit Deletten + transponiert + ersetzt + Einsätze) und Sprachunabhängige.
Gegenüber anderen Algorithmen sind nur Deletten erforderlich, keine Transpose + ersetzt + Einsätze. Transposes + Ersetzt + Einsätze des Eingangsbegriffs werden in Deletten des Wörterbuchbegriffs umgewandelt. Ersetzt und Einsätze sind teuer und sprachabhängig: z. B. Chinesisch hat 70.000 Unicode -Han -Zeichen!
Die Geschwindigkeit ergibt sich aus der kostengünstigen Bearbeitungskandidatenerzeugung und der Vorkalkulation .
Ein durchschnittliches 5 -Buchstaben -Wort enthält etwa 3 Millionen mögliche Rechtschreibfehler innerhalb einer maximalen Bearbeitungsentfernung von 3,
Aber Symspell muss nur 25 Deletten generieren, um sie alle sowohl bei der Vorkalkulation als auch zur Suchzeit abzudecken. Magie!
Wenn Sie Symspell mögen, versuchen Sie Seekstorm -eine Submillisekunden-Volltext-Suchbibliothek und Multi-Tenancy-Server in Rust (Open Source).
Copyright (c) 2022 Wolf Garbe
Version: 6.7.2
Author: Wolf Garbe <[email protected]>
Maintainer: Wolf Garbe <[email protected]>
URL: https://github.com/wolfgarbe/symspell
Description: https://seekstorm.com/blog/1000x-spelling-correction/
MIT License
Copyright (c) 2022 Wolf Garbe
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
https://opensource.org/licenses/MIT
Die Lookup bietet eine sehr schnelle Korrektur einzelner Wörter.
0,033 Millisekunden/Wort (Entfernung bearbeiten 2) und 0,180 Millisekunden/Wort (Distanz 3 bearbeiten) (Einzelkern auf 2012 MacBook Pro)
1,870-mal schneller als BK-Tree (siehe Benchmark 1: Wörterbuchgröße = 500.000, maximale Bearbeitungsentfernung = 3, Abfragen von Begriffen mit zufälliger Bearbeitungsentfernung = 0 ... Maximale Bearbeitungsentfernung, verbose = 0)
1 Million Mal schneller als der Algorithmus von Norvig (siehe Benchmark 2: Wörterbuchgröße = 29.157, Maximale Bearbeitungsentfernung = 3, Abfragen der Begriffe mit fester Bearbeitungsentfernung = Maximale Bearbeitungsentfernung, wörtlich = 0)
1000x schnellerer Rechtschreibkorrekturalgorithmus
Schnelle ungefähre Zeichenfolge, die mit großen Entfernungen in Big Data übereinstimmt
Sehr schnelle Datenreinigung von Produktnamen, Firmennamen und Straßennamen
Submillisekundenverbindung bewusste automatische Rechtschreibkorrektur
Symspell vs. Bk-Tree: 100x schneller Fuzzy-String-Suche & Zauberprüfung
Schnelle Wortsegmentierung für lauten Text
Der Schnittradix -Trie - ein Radix -Trie auf Steroiden
LookupCompound unterstützt die automatische Korrektur von Multi-Word -Eingangszeichenfolgen für die automatische Rechtschreibung.
1. Verbindungsaufteilung und Zerlegung
Lookup () nimmt jede Eingangszeichenfolge als einzelne Begriff an. LookupCompound unterstützt auch die zusammengesetzte Aufteilung / Zerlegung mit drei Fällen:
Teilenfehler, Verkettungsfehler, Substitutionsfehler, Transpositionsfehler, Löschfehler und Insertionsfehler können durch gemischtes Mischung innerhalb desselben Wortes können.
2. Automatische Rechtschreibkorrektur
Beispiele:
- whereis th elove hehad dated forImuch of thepast who couqdn'tread in sixthgrade and ins pired him
+ where is the love he had dated for much of the past who couldn't read in sixth grade and inspired him (9 edits)
- in te dhird qarter oflast jear he hadlearned ofca sekretplan
+ in the third quarter of last year he had learned of a secret plan (9 edits)
- the bigjest playrs in te strogsommer film slatew ith plety of funn
+ the biggest players in the strong summer film slate with plenty of fun (9 edits)
- Can yu readthis messa ge despite thehorible sppelingmsitakes
+ can you read this message despite the horrible spelling mistakes (9 edits)
0,2 Millisekunden / Wort (Entfernung bearbeiten 2) 5000 Wörter / Sekunde (Einzelkern auf 2012 MacBook Pro)
Die Wortsegmentierung unterteilt eine Zeichenfolge in Wörter, indem fehlende Räume an geeigneten Positionen eingefügt werden.
Beispiele:
- thequickbrownfoxjumpsoverthelazydog
+ the quick brown fox jumps over the lazy dog
- itwasabrightcolddayinaprilandtheclockswerestrikingthirteen
+ it was a bright cold day in april and the clocks were striking thirteen
- itwasthebestoftimesitwastheworstoftimesitwastheageofwisdomitwastheageoffoolishness
+ it was the best of times it was the worst of times it was the age of wisdom it was the age of foolishness
Anwendungen:
Leistung:
4 Millisekunden zur Segmentierung einer 185 Zeichenfolge in 53 Wörter (Single Core on 2012 MacBook Pro)
Einzelwort + Eingabetaste: Rechtschreibvorschläge anzeigen
Ohne Eingabe eingeben: Beenden Sie das Programm
Mehrere Wörter + Eingeben: Schreibschreibvorschläge anzeigen
Ohne Eingabe eingeben: Beenden Sie das Programm
Zeichenfolge ohne Leerzeichen + Eingeben: Word -segmentierte Text anzeigen
Ohne Eingabe eingeben: Beenden Sie das Programm
Demo-, Democompound- und SegmentationDemo -Projekte können mit dem kostenlosen Visual Studio -Code erstellt werden, der unter Windows, MacOS und Linux ausgeführt wird.
//create object
int initialCapacity = 82765 ;
int maxEditDistanceDictionary = 2 ; //maximum edit distance per dictionary precalculation
var symSpell = new SymSpell ( initialCapacity , maxEditDistanceDictionary ) ;
//load dictionary
string baseDirectory = AppDomain . CurrentDomain . BaseDirectory ;
string dictionaryPath = baseDirectory + " ../../../../SymSpell/frequency_dictionary_en_82_765.txt " ;
int termIndex = 0 ; //column of the term in the dictionary text file
int countIndex = 1 ; //column of the term frequency in the dictionary text file
if ( ! symSpell . LoadDictionary ( dictionaryPath , termIndex , countIndex ) )
{
Console . WriteLine ( " File not found! " ) ;
//press any key to exit program
Console . ReadKey ( ) ;
return ;
}
//lookup suggestions for single-word input strings
string inputTerm = " house " ;
int maxEditDistanceLookup = 1 ; //max edit distance per lookup (maxEditDistanceLookup<=maxEditDistanceDictionary)
var suggestionVerbosity = SymSpell . Verbosity . Closest ; //Top, Closest, All
var suggestions = symSpell . Lookup ( inputTerm , suggestionVerbosity , maxEditDistanceLookup ) ;
//display suggestions, edit distance and term frequency
foreach ( var suggestion in suggestions )
{
Console . WriteLine ( suggestion . term + " " + suggestion . distance . ToString ( ) + " " + suggestion . count . ToString ( " N0 " ) ) ;
}
//load bigram dictionary
string dictionaryPath = baseDirectory + " ../../../../SymSpell/frequency_bigramdictionary_en_243_342.txt " ;
int termIndex = 0 ; //column of the term in the dictionary text file
int countIndex = 2 ; //column of the term frequency in the dictionary text file
if ( ! symSpell . LoadBigramDictionary ( dictionaryPath , termIndex , countIndex ) )
{
Console . WriteLine ( " File not found! " ) ;
//press any key to exit program
Console . ReadKey ( ) ;
return ;
}
//lookup suggestions for multi-word input strings (supports compound splitting & merging)
inputTerm = " whereis th elove hehad dated forImuch of thepast who couqdn'tread in sixtgrade and ins pired him " ;
maxEditDistanceLookup = 2 ; //max edit distance per lookup (per single word, not per whole input string)
suggestions = symSpell . LookupCompound ( inputTerm , maxEditDistanceLookup ) ;
//display suggestions, edit distance and term frequency
foreach ( var suggestion in suggestions )
{
Console . WriteLine ( suggestion . term + " " + suggestion . distance . ToString ( ) + " " + suggestion . count . ToString ( " N0 " ) ) ;
}
//word segmentation and correction for multi-word input strings with/without spaces
inputTerm = " thequickbrownfoxjumpsoverthelazydog " ;
maxEditDistance = 0 ;
suggestion = symSpell . WordSegmentation ( input ) ;
//display term and edit distance
Console . WriteLine ( suggestion . correctedString + " " + suggestion . distanceSum . ToString ( " N0 " ) ) ;
//press any key to exit program
Console . ReadKey ( ) ;
Symspell zielt auf .NET Standard v2.0 und kann in: verwendet werden in:
Die Projekte Symspell-, Demo-, Demokompound- und Benchmark -Projekte können mit dem kostenlosen Visual Studio -Code erstellt werden, der unter Windows, MacOS und Linux ausgeführt wird.
Die Qualitätsqualität ist für die Korrekturqualität von größter Bedeutung. Um diese beiden Datenquellen zu erreichen, wurden mit Intersection: Google Books NGram -Daten kombiniert, die repräsentative Worthäufigkeiten liefern (aber viele Einträge mit Rechtschreibfehlern enthält) und finstere Sco - Spell Checker -Word -Listen, die ein echtes englisches Vokabular sicherstellen (aber keine Wortfrequenzen enthielten, aber keine Wortfrequenzen enthielten Erforderlich für die Rangfolge von Vorschlägen innerhalb derselben Bearbeitungsentfernung).
Die Frequenz_Dictionary_en_82_765.txt wurde erstellt, indem die beiden unten genannten Listen überschneidet. Durch wechselseitiges Filterung nur die Wörter, die in beiden Listen erscheinen, werden verwendet. Zusätzliche Filter wurden angewendet und die resultierende Liste wurde auf 80.000 häufigste Wörter abgeschnitten.
Sie können Ihr eigenes Frequenzwörterbuch für Ihre Sprache oder Ihre spezialisierte technische Domäne erstellen. Der Symspell Spelling Correction Algorithmus unterstützt Sprachen mit nicht-latinischen Zeichen, z.
Symspell enthält ein englisches Frequenzwörterbuch
Wörterbücher für Chinesisch, Englisch, Französisch, Deutsch, Hebräisch, Italienisch, Russisch und Spanisch befinden sich hier:
Symspell.FrequencyDictionary
Frequenzwörterbücher in vielen anderen Sprachen finden Sie hier:
Frequenzwörter -Repository
Frequenzwörterbücher
Frequenzwörterbücher
C# (ursprünglicher Quellcode)
https://github.com/wolfgarbe/symspell
.NET (Nuget -Paket)
https://www.nuget.org/packages/symspell
Die folgenden Ports oder Neuauflagen von Drittanbietern in andere Programmiersprachen wurden nicht von mir selbst getestet, ob sie einen genauen Port sind, fehlerfrei, identische Ergebnisse liefern oder so schnell wie der ursprüngliche Algorithmus.
Die meisten Ports Ziels Symspell Version 3.0 . Aber Version 6.1. Bietet viel höhere Geschwindigkeit und geringere Speicherverbrauch!
WebAssembly
https://github.com/justinwilaby/spellchecker-wasm
Web -API (Docker)
https://github.com/leonerath/symspellapi (Version 6.3)
C ++
https://github.com/athes21/symspellcpp (Version 6.5)
https://github.com/erhanbaris/symspellplusplus (Version 6.1)
Kristall
https://github.com/chenkovsky/aha/blob/master/src/aha/sym_spell.cr
Gehen
https://github.com/sajari/fuzzy
https://github.com/eskriett/spell
Haskell
https://github.com/cbeav/symspell
Java
https://github.com/mightguy/customized-symspell (Version 6.6)
https://github.com/rxp90/jsymspell (Version 6.6)
https://github.com/lundez/javasymspell (Version 6.4)
https://github.com/rxp90/jsymspell
https://github.com/gpranav88/symspell
https://github.com/searchhub/Predict
https://github.com/jpingarayar/spellblaze
JavaScript
https://github.com/mathieuloUtre/node-symspell (Version 6.6, braucht node.js)
https://github.com/itlenny/symspell.js
https://github.com/dongyuwei/symspell
https://github.com/icecreamyou/symspell
https://github.com/yomguithereal/mnemonist/blob/master/symspell.js
Julia
https://github.com/arkoniak/symspell.jl
Kotlin
https://github.com/wavesonics/symspellkt
Ziel-C
https://github.com/amitbhavsariphone/symspell (Version 6.3)
Python
https://github.com/mammothb/symspellpy (Version 6.7)
https://github.com/viig99/symspellcppy (Version 6.5)
https://github.com/zoho-labs-labs/symspell (Python-Bindungen der Rust-Version)
https://github.com/ne3x7/pysymspell/ (Version 6.1)
https://github.com/ayyuriss/symspell
https://github.com/ppgmg/github_public/blob/master/spell/symspell_python.py
https://github.com/rcourivaud/symspellcompound
https://github.com/esukhia/sympound-python
https://www.kaggle.com/yk1598/symspell-spell-corrector
Rubin
https://github.com/philt/symspell
Rost
https://github.com/Reneklacan/symspell (Version 6.6, kompiliert für WebAssembly)
https://github.com/luketpeterson/fuzzy_rocks (persistierender Datenspeicher, der von RocksDB unterstützt wird)
Scala
https://github.com/semkath/symspell
Schnell
https://github.com/gdetari/symspellswift
Kontextuelle mehrsprachige Rechtschreibprüfung für Benutzeranfragen
Sanat Sharma, Josep Valls-Vargas, Tracy Holloway King, Francois Guerin, Chirag Arora (Adobe)
https://arxiv.org/abs/2305.01082
Ein kontextsensitiver Echtzeit-Zaubersprüche mit Sprachanpassungsfähigkeit
Prabhakar Gupta (Amazon)
https://arxiv.org/abs/1910.11242
Speaker: Ein Meta-Daten angereicherter Sprechkorpus deutscher Staats- und Bundesparlamente
Kai-Robin Lange und Carsten Jentsch
https://arxiv.org/pdf/2410.17886
Ein erweitertes Sequenz -Tagging -Vokabular für die grammatikalische Fehlerkorrektur
Stuart Mesham, Christopher Bryant, Marek Rei, Zheng Yuan
https://arxiv.org/abs/2302.05913
Deutsches parlamentarisches Korpus (Gerparcor)
Giuseppe Abrami, Mevlüt Bagci, Leon Hammerla, Alexander Mehler
https://arxiv.org/abs/2204.10422
IOCR: Informierte optische Charaktererkennung für Wahlstimmzettel erzielt
Kenneth U. Oyibo, Jean D. Louis, Juan E. Gilbert
https://arxiv.org/abs/2208.00865
Amazigh-Zaubersprüche mit Damerau-Levenshtein-Algorithmus und N-Gramm
Youness Chaabi, Fadoua Ataa Allah
https://www.sciencedirect.com/science/article/pii/s1319157821001828
Übersicht über Abfragekorrektur für thailändische geschäftsorientierte Informationsabrufe
Phongsathorn KittiWorapanya, Nuttapong Saelek, Anuruth Lertpiya, Tawunrat Chalothorn
https://ieeexplore.ieee.org/document/9376809
Symspell- und LSTM-basierte Zauberprüfern für Tamil
Selvakumar Murugantamil Arasan Bakthavatchalamtamil Arasan BakthavatchalaKannan Sankarasubbu
https://www.researchgate.net/publication/349924975_symspell_and_lstm_based_spell-_checkers_for_tamil
Symspell4burmese: Symmetrische Rechtschreibung Korrekturalgorithmus (Symspell) für die burmesische Rechtschreibprüfung
Ei Phyu Phyu Mon; Ye kyaw dhu; Als als yu; Aye wai oo
https://ieeexplore.ieee.org/document/9678171
Zauberprüfung Indonesien Menggunakan Norvig Dan Symspell
Yasir Abdur Rohman
https://medium.com/@yasirabd/spell-check-indonesia-menggunakan-norvig-dan-symspell-4fa583d62c24
Analisis Perbandingan Metode Burkhard Keller Tree Dan Symspell Dalam Zauberkorrektur Bahasa Indonesien
Muhammad Hafizh Ferdiansyah, I Kadek Dwi Nuryana
https://ejournal.unesa.ac.id/index.php/jinacs/article/download/50989/41739
Verbesserung des Dokumentenabrufs mit Rechtschreibkorrektur für schwache und hergestellte indonesische Hadith
Muhammad Zaky Ramadhankemas M lhaksmanakemas m lhaksmana
https://www.researchgate.net/publication/342390145_impreving_document_retrieval_with_spelling_correction_for_weak_and_fabricated_indonesian-translated_hadith
Symspell 을 이용한 한글 맞춤법 교정 김희규 김희규
https://heegegyukim.medium.com/symspell%EC%9d%84-%EC%9d%B4%EC%9A%A9%ED%95%9C-%. %EB%A7%9E%EC%B6%A4%EB%B2%95-%EA%B5%90%EC%A0%95-3DEF9CA00805
Gebrochene gebrochene Texte. Ein heuristisches Verfahren zur Korrektur von OCR -Daten
Jens Bjerring-Hansen, Ross Deans Kristensen-McLachla2, Philip Diderichsen und Dorte Haltrrup Hansen
https://ceur-ws.org/vol-3232/paper14.pdf
In Richtung der natürlichen Sprachverarbeitung als Rechtschreibkorrektur für offline handgeschriebene Texterkennungssysteme
Arthur Flor de Sousa Neto; Byron Lite Dantas Bezerra; und Alejandro Héctor Toselli
https://www.mdpi.com/2076-3417/10/21/7711
Wann kann OCR nach Korrektur für die genannte Entitätserkennung verwendet werden?
Vinh-Nam Huynh, Ahmed Hamdi, Antoine Doucet
https://hal.science/hal-03034484v1/
Automatische Fehlerkorrektur: Bewertung der Leistung von Zaubersprüchen -Tools
A. Tolegenova
https://journals.sdu.edu.kz/index.php/nts/article/view/690
Zhaw-CAI: Ensemble-Methode zur schweizerischen Deutschen Sprache zu Standard-Deutsch Text
Malgorzata Anna Ulasik, Manuela Hurlimann, Bogumila Dubel, Yves Kaufmann,
Silas Rudolf, Jan Deriu, Katarna Mlynchyk, Hans-Peter Hutter und Mark Cieliebak
https://ceur-ws.org/vol-2957/sg_paper3.pdf
Cyrillic Word -Fehlerprogramm basierend auf maschinellem Lernen
Battumur, K., Dulamragchaa, U., Enkhbat, S., Altanhuyag, L. & Tumurbaatar, P.
https://mongoliajol.info/index.php/jimdt/article/view/2661
Schnelle ungefähre String -Suche nach Wikification
Szymon Olewniczak, Julian Szymanski
https://www.icccs-meeting.org/archive/iccs2021/papers/127440334.pdf
RumedSpellChecker: Korrektur von Rechtschreibfehlern für die natürliche russische Sprache in elektronischen Gesundheitsakten mithilfe maschineller Lerntechniken
Dmitrii Pogrebnoi, Anastasia Funkner, Sergey Kovalchuk
https://link.springer.com/chapter/10.1007/978-3-031-36024-4_16
Ein erweitertes Sequenz -Tagging -Vokabular für die grammatikalische Fehlerkorrektur
Stuart Mesham, Christopher Bryant, Marek Rei, Zheng Yuan
https://aclanthology.org/2023.findings-eac.119.pdf
Lightning-Spast-adaptive Immunrezeptor-Ähnlichkeitssuche durch symmetrische Löschung suchen
Touchchai Chotisorayuth, Andreas Tiffeau-Masches
https://arxiv.org/html/2403.09010v1
Enthüllung von getarnter Toxizität: Ein neuartiges Vorverarbeitungsmodul für verbesserte Inhalts Moderation
Johnny Chan, Yuming Li
https://www.sciencedirect.com/science/article/pii/s2215016124001225
bycycle
-> bicycle
(statt by cycle
)inconvient
-> inconvenient
(anstelle von i convent
)Symspell wird von seex