Koreksi Ejaan & Pencarian Fuzzy: 1 juta kali lebih cepat melalui algoritma Koreksi Ejaan Delete Simetris
Algoritma Koreksi Ejaan Delete Simetris mengurangi kompleksitas pengeditan generasi kandidat dan pencarian kamus untuk jarak Damerau-Levenshtein yang diberikan. Ini adalah enam pesanan besarnya lebih cepat (dari pendekatan standar dengan penghapusan + transpos + menggantikan + sisipan) dan bahasa independen.
Berlawanan dengan algoritma lain yang hanya diperlukan penghapusan, tidak ada transposis + menggantikan + sisipan. Transposes + Mengganti + sisipan istilah input ditransformasikan menjadi penghapusan istilah kamus. Mengganti dan sisipan mahal dan tergantung bahasa: misalnya bahasa Cina memiliki 70.000 karakter unicode han!
Kecepatan berasal dari generasi kandidat edit khusus dihapus dan pra-kalkulasi .
Kata 5 huruf rata -rata memiliki sekitar 3 juta kemungkinan kesalahan ejaan dalam jarak edit maksimum 3,
Tetapi Symspell perlu menghasilkan hanya 25 penghapusan untuk menutupi semuanya, baik pada pra-kalkulasi dan pada waktu pencarian. Sihir!
Jika Anda suka Symspell, coba caristorm -perpustakaan pencarian teks lengkap sub-millisecond & server multi-tenancy di 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
Pencarian memberikan koreksi ejaan yang sangat cepat dari kata tunggal.
0,033 milidetik/kata (edit jarak 2) dan 0,180 milidetik/kata (edit jarak 3) (inti tunggal pada 2012 MacBook Pro)
1.870 kali lebih cepat dari bk-tree (lihat Benchmark 1: Ukuran Kamus = 500.000, jarak edit maksimum = 3, istilah kueri dengan jarak edit acak = 0 ... jarak edit maksimum, verbose = 0)
1 juta kali lebih cepat dari algoritma Norvig (lihat Benchmark 2: Ukuran Kamus = 29.157, jarak edit maksimum = 3, istilah kueri dengan jarak edit tetap = jarak edit maksimum, verbose = 0)
Algoritma koreksi ejaan 1000x lebih cepat
Pencocokan string perkiraan cepat dengan jarak edit besar di Big Data
Pembersihan data yang sangat cepat dari nama produk, nama perusahaan & nama jalan
Sub-milidond Compound Sadar Koreksi Ejaan Otomatis
Symspell vs. BK-Tree: 100x pencarian string fuzzy lebih cepat & pemeriksaan ejaan
Segmentasi kata cepat untuk teks bising
TRIE Radix Pemangkasan - A Radix Trie on Steroids
LookupCompound mendukung koreksi ejaan otomatis senyawa dari string input multi-kata .
1. Pemisahan senyawa & terurai
Lookup () mengasumsikan setiap string input sebagai istilah tunggal . LookupCompound juga mendukung pemisahan senyawa / decompounding dengan tiga kasus:
Kesalahan pemisahan, kesalahan gabungan, kesalahan substitusi, kesalahan transposisi, kesalahan penghapusan dan kesalahan penyisipan dapat dengan dicampur dalam kata yang sama.
2. Koreksi ejaan otomatis
Contoh:
- 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 milidetik / kata (Edit jarak 2) 5000 kata / kedua (inti tunggal pada 2012 MacBook Pro)
Kata -kata membagi string menjadi kata -kata dengan memasukkan spasi yang hilang pada posisi yang sesuai.
Contoh:
- 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
Aplikasi:
Pertunjukan:
4 milidetik untuk segmentasi string 185 char menjadi 53 kata (inti tunggal pada 2012 MacBook Pro)
Kata tunggal + Enter: Tampilkan saran ejaan
Masukkan tanpa input: hentikan program
Beberapa kata + Enter: Tampilkan saran ejaan
Masukkan tanpa input: hentikan program
String Without Spaces + Enter: Tampilkan kata yang tersegmentasi kata
Masukkan tanpa input: hentikan program
Proyek Demo, Democompound dan SegmentationDemo dapat dibangun dengan kode studio visual gratis, yang berjalan pada Windows, MacOS dan Linux.
//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 ( ) ;
Target Symspell .NET Standar v2.0 dan dapat digunakan dalam:
Proyek Symspell, Demo, Democompound, dan Benchmark dapat dibangun dengan kode Visual Studio gratis, yang berjalan di Windows, MacOS dan Linux.
Kualitas kamus adalah yang terpenting untuk kualitas koreksi. Untuk mencapai dua sumber data ini dikombinasikan oleh persimpangan: Google Books NGRAM Data yang memberikan frekuensi kata yang representatif (tetapi berisi banyak entri dengan kesalahan ejaan) dan cemberut - daftar kata yang berorientasi pada pemeriksa ejaan yang memastikan kosa kata bahasa Inggris yang asli (tetapi tidak mengandung frekuensi kata kata Word diperlukan untuk peringkat saran dalam jarak edit yang sama).
Frekuensi_dictionary_en_82_765.txt dibuat dengan memotong dua daftar yang disebutkan di bawah ini. Dengan menyaring secara timbal balik hanya kata -kata yang muncul di kedua daftar yang digunakan. Filter tambahan diterapkan dan daftar yang dihasilkan terpotong ke ≈ 80.000 kata paling sering.
Anda dapat membangun kamus frekuensi Anda sendiri untuk bahasa Anda atau domain teknis khusus Anda. Algoritma Koreksi Ejaan Symspell mendukung bahasa dengan karakter non-Latin, misalnya Cyrillic, Cina atau Georgia.
Symspell termasuk kamus frekuensi bahasa Inggris
Kamus untuk Cina, Inggris, Prancis, Jerman, Ibrani, Italia, Rusia dan Spanyol terletak di sini:
Symspell.frequencydictionary
Kamus frekuensi dalam banyak bahasa lain dapat ditemukan di sini:
Repositori kata frekuensi
Kamus frekuensi
Kamus frekuensi
C# (kode sumber asli)
https://github.com/wolfgarbe/symspell
.Net (paket nuget)
https://www.nuget.org/packages/symspell
Port pihak ketiga berikut atau penerimaan ulang ke bahasa pemrograman lainnya belum diuji sendiri apakah mereka adalah port yang tepat, bebas kesalahan, memberikan hasil yang identik atau secepat algoritma asli.
Sebagian besar port menargetkan Symspell versi 3.0 . Tetapi versi 6.1. Memberikan kecepatan yang jauh lebih tinggi & konsumsi memori yang lebih rendah!
WebAssembly
https://github.com/justinwilaby/spellchecker-wasm
Web API (Docker)
https://github.com/leonerath/symspellapi (versi 6.3)
C ++
https://github.com/athes21/symspellcpp (versi 6.5)
https://github.com/erhanbaris/symspellplusplus (versi 6.1)
Kristal
https://github.com/chenkovsky/aha/blob/master/src/aha/sym_spell.cr
Pergi
https://github.com/sajari/fuzzy
https://github.com/eskriett/spell
Haskell
https://github.com/cbeav/symspell
Jawa
https://github.com/mightguy/customized-symspell (versi 6.6)
https://github.com/rxp90/jsymspell (versi 6.6)
https://github.com/lundez/javasymspell (versi 6.4)
https://github.com/rxp90/jsymspell
https://github.com/gpranav88/symspell
https://github.com/searchhub/predict
https://github.com/jpsingarayar/spellblaze
Javascript
https://github.com/mathieulouttre/node-symspell (versi 6.6, membutuhkan node.js)
https://github.com/itslenny/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
Objektif-C
https://github.com/amitbhavsariphone/symspell (versi 6.3)
Python
https://github.com/mammothb/symspellpy (versi 6.7)
https://github.com/viig99/symspellcpppy (versi 6.5)
https://github.com/zoho-labs/symspell (Python Bindings of Rust Version)
https://github.com/ne3x7/pysymspell/ (versi 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-corector
Rubi
https://github.com/philt/symspell
Karat
https://github.com/reneklacan/symspell (Versi 6.6, Compiles to WebAssembly)
https://github.com/luketpeterson/fuzzy_rocks (Datastore persisten didukung oleh rocksdb)
Scala
https://github.com/semkath/symspell
Cepat
https://github.com/gdetari/symspellswift
Spellchecker multibahasa kontekstual untuk permintaan pengguna
Sanat Sharma, Josep Valls-Vargas, Tracy Holloway King, Francois Guerin, Chirag Arora (Adobe)
https://arxiv.org/abs/2305.01082
Pemeriksa ejaan real-time yang sensitif terhadap konteks dengan kemampuan beradaptasi bahasa
Prabhakar Gupta (Amazon)
https://arxiv.org/abs/1910.11242
Speakger: A Meta-Data Enriched Speech Corpus dari Parlemen Negara Bagian dan Federal Jerman
Kai-Robin Lange dan Carsten Jentsch
https://arxiv.org/pdf/2410.17886
Kosakata penandaan urutan yang diperluas untuk koreksi kesalahan tata bahasa
Stuart Mesham, Christopher Bryant, Marek Rei, Zheng Yuan
https://arxiv.org/abs/2302.05913
Corpus Parlemen Jerman (Gerparcor)
Giuseppe Abrami, Mevlüt Bagci, Leon Hammerla, Alexander Mehler
https://arxiv.org/abs/2204.10422
IOCR: Pengenalan karakter optik yang diinformasikan untuk penghitungan pemilihan pemilihan
Kenneth U. Oyibo, Jean D. Louis, Juan E. Gilbert
https://arxiv.org/abs/2208.00865
Amazigh Spell Checker Menggunakan Algoritma Damerau-Levenshtein dan N-Gram
Youness chaabi, fadoua laha allah
https://www.sciencedirect.com/science/article/pii/s1319157821001828
Survei Koreksi Kueri untuk Pengambilan Informasi Berorientasi Bisnis Thailand
Phongsathorn Kittiworapaya, Nuttapong Saelek, Anurath Lertpiya, Tawunrat Chalothorn
https://ieExplore.ieee.org/document/9376809
Symspell dan LSTM Berbasis Pemeriksa untuk Tamil
Selvakumar Murugantamil Arasan Bakthavatchalamtamil Arasan Bakthavatchalammalaekannan Sankarasubbu
https://www.researchgate.net/publication/349924975_symspell_and_lstm_based_spell-_checkers_for_tamil
Symspell4Burma: Algoritma Koreksi Ejaan Symmetric Delete (Symspell) untuk Pemeriksaan Ejaan Burma
Ei Phyu Phyu Mon; Kamu kyaw thu; Dari yu; Aye wai oo
https://ieexplore.ieee.org/document/9678171
Periksa ejaan Indonesia Menggunakan Norvig Dan Symspell
Yasir Abdur Rohman
https://medium.com/@yasirabd/spell-check-indonesia-mengunakan-norvig-dan-symspell-4fa583d62c24
Analisis Perbandingan Metode Burkhard Keller Tree Dan Symspell Dalam Mantra Koreksi Bahasa Indonesia
Muhammad Hafizh Ferdiansyah, I Kadek Dwi Nuryana
https://ejournal.unesa.ac.id/index.php/jinacs/article/download/50989/41739
Meningkatkan pengambilan dokumen dengan koreksi ejaan untuk hadis yang lemah dan dibuat-buat
Muhammad Zaky Ramadhankemas M Lhaksmanakemas M Lhaksman
https://www.researchgate.net/publication/342390145_improving_document_retrieval_with_spelling_correction_for_weak_and_fabricated_indonesian-translated_hadith
Symspell 을 이용한 한글 맞춤법 교정 김희규
https://heegyukim.medium.com/symspell%ec%9d%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ed%95%9c%AA%B8%80- %EB%A7%9E%EC%B6%A4%EB%B2%95-%EA%B5%90%EC%A0%95-3DEF9CA00805
Memperbaiki teks retak. Prosedur heuristik untuk mengoreksi data OCR
Jens Bjerring-Hansen, Ross Dekan Kristensen-McLachla2, Philip Diderichsen dan Dorte Haltrup Hansen
https://ceur-ws.org/vol-3232/paper14.pdf
Menuju pemrosesan bahasa alami sebagai koreksi ejaan untuk sistem pengenalan teks tulisan tangan offline
Arthur Flor de Sousa Neto; Byron Leite Dantas Bezerra; dan Alejandro Héctor Toselli
https://www.mdpi.com/2076-3417/10/21/7711
Kapan menggunakan OCR pasca koreksi untuk pengakuan entitas yang disebutkan?
Vinh-Nam Huynh, Ahmed Hamdi, Antoine Doucet
https://hal.science/hal-03034484v1/
Koreksi Kesalahan Otomatis: Mengevaluasi Kinerja Alat Pemeriksa Ejaan
A. Tolegenova
https://journals.sdu.edu.kz/index.php/nts/article/view/690
Zhaw-CAI: Metode Ensemble untuk Pidato Jerman Swiss untuk Teks Jerman Standar
Malgorzata Anna Ulasik, Manuela Hurlilann, Bogumila Dubel, Yves Kaufmann,
Silas Rudolf, Jan Deriu, Ksisiaryna Mlynchyk, Hans-Peter Hutter, dan Mark Cieliebak
https://ceur-ws.org/vol-2957/sg_paper3.pdf
Program kesalahan kata Cyrillic berdasarkan pembelajaran mesin
Battumur, K., Dulamragchaa, U., Enkhbat, S., Altanhuyag, L., & Tumurbaatar, P.
https://mongoliajol.info/index.php/jimdt/article/view/2661
Pencarian string perkiraan cepat untuk wikifikasi
Szymon Olewniczak, Julian Szymanski
https://www.iccs-meeting.org/archive/iccs2021/papers/127440334.pdf
RumedSpellChecker: mengoreksi kesalahan ejaan untuk bahasa Rusia alami dalam catatan kesehatan elektronik menggunakan teknik pembelajaran mesin
Dmitrii Pogrebnoi, Anastasia Funkner, Sergey Kovalchuk
https://link.springer.com/chapter/10.1007/978-3-031-36024-4_16
Kosakata penandaan urutan yang diperluas untuk koreksi kesalahan tata bahasa
Stuart Mesham, Christopher Bryant, Marek Rei, Zheng Yuan
https://aclanthology.org/2023.findings-eAcl.119.pdf
Pencarian kesamaan reseptor imun adaptif yang cepat dengan pencarian penghapusan simetris
Touchchai Chotisorayuth, Andreas Tiffeau-Mayer
https://arxiv.org/html/2403.09010v1
Meluncurkan Toksisitas yang disamarkan: Modul pra-pemrosesan baru untuk peningkatan moderasi konten
Johnny Chan, Yuming Li
https://www.sciencedirect.com/science/article/pii/s2215016124001225
bycycle
-> bicycle
(bukan by cycle
)inconvient
-> inconvenient
(bukan i convent
)Symspell disumbangkan oleh Seekstorm - Pencarian Kinerja Tinggi sebagai Layanan & Pencarian API