การค้นหาการสะกดคำและการค้นหาฟัซซี่: เร็วขึ้น 1 ล้านเท่า ผ่านอัลกอริทึมการแก้ไขการสะกดคำแบบสมมาตร
อัลกอริทึมการแก้ไขการสะกดคำแบบสมมาตรช่วยลดความซับซ้อนของการแก้ไขการสร้างผู้สมัครและการค้นหาพจนานุกรมสำหรับระยะทาง Damerau-Levenshtein ที่กำหนด มันเป็นคำสั่งหกขนาดเร็วขึ้น (กว่าวิธีมาตรฐานที่มีการลบ + transposes + แทนที่ + เม็ดมีด) และภาษาอิสระ
ตรงข้ามกับอัลกอริทึมอื่น ๆ เท่านั้นที่จำเป็นต้องลบเท่านั้นไม่จำเป็นต้องใช้ transposes + แทนที่ + เม็ดมีด transposes + แทนที่ + เม็ดมีดของคำอินพุตจะถูกแปลงเป็นการลบคำศัพท์พจนานุกรม การแทนที่และเม็ดมีดมีราคาแพงและขึ้นอยู่กับภาษา: เช่นภาษาจีนมี 70,000 ตัวอักษร unicode han!
ความเร็วมาจาก การสร้างผู้สมัครที่ถูกลบอย่างไม่แพงอย่างเดียว และ การคำนวณล่วงหน้า
คำตัวอักษรเฉลี่ย 5 ตัวมี ข้อผิดพลาดในการสะกดคำประมาณ 3 ล้านรายการ ภายในระยะการแก้ไขสูงสุด 3
แต่ Symspell จำเป็นต้องสร้าง เพียง 25 ลบ เพื่อครอบคลุมพวกเขาทั้งหมดทั้งในการคำนวณล่วงหน้าและเวลาค้นหา เวทมนตร์
หากคุณชอบ Symspell ให้ลอง Seekstorm- ไลบรารีการค้นหาข้อความแบบเต็มรูปแบบย่อยและเซิร์ฟเวอร์การเช่าหลายครั้งใน Rust (โอเพ่นซอร์ส)
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
การค้นหา ให้การแก้ไขการสะกดคำอย่างรวดเร็วของคำเดียว
0.033 มิลลิวินาที/คำ (แก้ไขระยะทาง 2) และ 0.180 มิลลิวินาที/คำ (แก้ไขระยะทาง 3) (แกนเดียวใน 2012 MacBook Pro)
เร็วกว่า BK-Tree 1,870 เท่า (ดูเบนช์มาร์ก 1: ขนาดพจนานุกรม = 500,000, ระยะการแก้ไขสูงสุด = 3, คำค้นหาที่มีระยะการแก้ไขแบบสุ่ม = 0 ... ระยะการแก้ไขสูงสุด, verbose = 0)
เร็วกว่าอัลกอริทึมของ Norvig 1 ล้านเท่า (ดูเกณฑ์มาตรฐาน 2: ขนาดพจนานุกรม = 29,157, ระยะการแก้ไขสูงสุด = 3, ข้อกำหนดการสืบค้นที่มีระยะการแก้ไขคงที่ = ระยะการแก้ไขสูงสุด, verbose = 0)
อัลกอริทึมการแก้ไขการสะกดคำที่เร็วขึ้น 1,000 เท่า
การจับคู่สตริงโดยประมาณที่รวดเร็วกับระยะทางแก้ไขขนาดใหญ่ในข้อมูลขนาดใหญ่
การทำความสะอาดข้อมูลที่รวดเร็วมากของชื่อผลิตภัณฑ์ชื่อ บริษัท และชื่อถนน
สารประกอบย่อยวินาทีรับการแก้ไขการสะกดคำอัตโนมัติ
Symspell vs. BK-Tree: 100x การค้นหาสตริงฟัซซี่ที่เร็วกว่าและการตรวจสอบการสะกดคำ
การแบ่งส่วนคำที่รวดเร็วสำหรับข้อความที่มีเสียงดัง
การตัดแต่ง Radix Trie - Radix Trie บนสเตียรอยด์
LookupCompound รองรับการแก้ไขการสะกดคำ อัตโนมัติ ของ สารประกอบ การสะกดคำอัตโนมัติของสตริง อินพุตหลายคำ
1. การแยกสารประกอบและการสลายตัว
การค้นหา () ถือว่าทุกสตริงอินพุตเป็น คำเดียว LookupCompound ยังรองรับ การแยก / decompounding ผสม กับสามกรณี:
ข้อผิดพลาดการแยกข้อผิดพลาดการต่อการเชื่อมต่อข้อผิดพลาดในการทดแทนข้อผิดพลาดในการเปลี่ยนข้อผิดพลาดการลบและข้อผิดพลาดในการแทรกสามารถผสมภายในคำเดียวกัน
2. การแก้ไขการสะกดคำอัตโนมัติ
ตัวอย่าง:
- 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 มิลลิวินาที / คำ (แก้ไขระยะทาง 2) 5000 คำ / วินาที (Single Core ใน 2012 MacBook Pro)
WordSegmentation แบ่งสตริงออกเป็นคำโดยการแทรกช่องว่างที่หายไปในตำแหน่งที่เหมาะสม
ตัวอย่าง:
- 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
แอปพลิเคชัน:
ผลงาน:
4 มิลลิวินาทีสำหรับการแบ่งกลุ่มสตริงถ่าน 185 เป็น 53 คำ (Single Core ใน 2012 MacBook Pro)
คำเดียว + Enter: คำแนะนำการสะกดคำแสดง
ป้อนโดยไม่ต้องป้อนข้อมูล: ยกเลิกโปรแกรม
หลายคำ + Enter: แสดงคำแนะนำการสะกดคำ
ป้อนโดยไม่ต้องป้อนข้อมูล: ยกเลิกโปรแกรม
สตริงที่ไม่มีช่องว่าง + ป้อน: แสดงข้อความที่แบ่งส่วนคำ
ป้อนโดยไม่ต้องป้อนข้อมูล: ยกเลิกโปรแกรม
โครงการสาธิต Democompound และ SegmentationDemo สามารถสร้างได้ด้วยรหัส Visual Studio ฟรีซึ่งทำงานบน Windows, MacOS และ 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 ( ) ;
Symspell เป้าหมาย. NET มาตรฐาน v2.0 และสามารถใช้ใน:
โครงการ Symspell, Demo, Democompound และ Benchmark สามารถสร้างได้ด้วยรหัส Visual Studio ฟรีซึ่งทำงานบน Windows, MacOS และ Linux
คุณภาพพจนานุกรมเป็นสิ่งสำคัญยิ่งสำหรับคุณภาพการแก้ไข เพื่อให้บรรลุแหล่งข้อมูลทั้งสองนี้ถูกรวมเข้าด้วยกันโดยสี่แยก: Google Books ข้อมูล ngram ซึ่งให้ความถี่คำที่เป็นตัวแทน (แต่มีหลายรายการที่มีข้อผิดพลาดในการสะกดคำ) และหน้าบึ้ง - รายการคำที่มุ่งเน้นการสะกดคำซึ่งทำให้มั่นใจได้ว่าคำศัพท์ภาษาอังกฤษของแท้ จำเป็นสำหรับการจัดอันดับคำแนะนำภายในระยะการแก้ไขเดียวกัน)
ความถี่ _dictionary_en_82_765.txt ถูกสร้างขึ้นโดยการตัดรายการสองรายการที่กล่าวถึงด้านล่าง โดยการกรองซึ่งกันและกันจะใช้เฉพาะคำเหล่านั้นที่ปรากฏในรายการทั้งสองเท่านั้น มีการใช้ตัวกรองเพิ่มเติมและรายการผลลัพธ์ที่ถูกตัดทอนเป็น≈ 80,000 คำที่พบบ่อยที่สุด
คุณสามารถสร้างพจนานุกรมความถี่ของคุณเองสำหรับภาษาหรือโดเมนทางเทคนิคเฉพาะของคุณ อัลกอริทึมการแก้ไขการสะกดคำ Symspell สนับสนุนภาษาที่มีอักขระที่ไม่ใช่ละตินเช่นซิริลลิกจีนหรือจอร์เจีย
Symspell รวมพจนานุกรมความถี่ภาษาอังกฤษ
พจนานุกรมสำหรับจีน, อังกฤษ, ฝรั่งเศส, เยอรมัน, ฮีบรู, อิตาลี, รัสเซียและสเปนตั้งอยู่ที่นี่:
symspell.frequencydictionary
พจนานุกรมความถี่ในภาษาอื่น ๆ อีกมากมายสามารถพบได้ที่นี่:
พื้นที่เก็บข้อมูลคำศัพท์ความถี่
พจนานุกรมความถี่
พจนานุกรมความถี่
C# (ซอร์สโค้ดดั้งเดิม)
https://github.com/wolfgarbe/symspell
.NET (แพ็คเกจ NUGET)
https://www.nuget.org/packages/symspell
พอร์ตของบุคคลที่สามต่อไปนี้หรือการพิจารณาใหม่ไปยังภาษาการเขียนโปรแกรมอื่น ๆ ยังไม่ได้รับการทดสอบด้วยตัวเองไม่ว่าจะเป็นพอร์ตที่แน่นอนไม่มีข้อผิดพลาดให้ผลลัพธ์ที่เหมือนกันหรือเร็วเท่ากับอัลกอริทึมดั้งเดิม
พอร์ตส่วนใหญ่เป้าหมาย Symspell เวอร์ชัน 3.0 แต่ เวอร์ชัน 6.1 ให้ ความเร็วที่สูงขึ้นและการใช้หน่วยความจำที่ต่ำกว่า!
การใช้เว็บ
https://github.com/justinwilaby/spellchecker-wasm
Web API (Docker)
https://github.com/leonerath/symspellapi (เวอร์ชัน 6.3)
C ++
https://github.com/athes21/symspellcpp (เวอร์ชัน 6.5)
https://github.com/erhanbaris/symspellplusplus (เวอร์ชัน 6.1)
คริสตัล
https://github.com/chenkovsky/aha/blob/master/src/aha/sym_spell.cr
ไป
https://github.com/sajari/fuzzy
https://github.com/eskriett/spell
Haskell
https://github.com/cbeav/symspell
ชวา
https://github.com/mightguy/customized-symspell (เวอร์ชัน 6.6)
https://github.com/rxp90/jsymspell (เวอร์ชัน 6.6)
https://github.com/lundez/javasymspell (เวอร์ชัน 6.4)
https://github.com/rxp90/jsymspell
https://github.com/gpranav88/symspell
https://github.com/searchhub/predict
https://github.com/jpsingarayar/spellblaze
จาวาสคริปต์
https://github.com/mathieuloutre/node-symspell (เวอร์ชัน 6.6 ต้องการ 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
จูเลีย
https://github.com/arkoniak/symspell.jl
Kotlin
https://github.com/wavesonics/symspellkt
วัตถุประสงค์ -C
https://github.com/amitbhavsariphone/symspell (เวอร์ชัน 6.3)
งูหลาม
https://github.com/mammothb/symspellpy (เวอร์ชัน 6.7)
https://github.com/viig99/symspellcppy (เวอร์ชัน 6.5)
https://github.com/zoho-labs/symspell (การผูก Python ของเวอร์ชันสนิม)
https://github.com/ne3x7/pysymspell/ (เวอร์ชัน 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
ทับทิม
https://github.com/philt/Symspell
สนิม
https://github.com/reneklacan/symspell (เวอร์ชัน 6.6, รวบรวมไปยัง webassembly)
https://github.com/luketpeterson/fuzzy_rocks (Datastore ถาวรได้รับการสนับสนุนโดย RocksDB)
สกาล่า
https://github.com/semkath/symspell
ฉับพลัน
https://github.com/gdetari/symspellswift
การสะกดคำหลายภาษาหลายภาษาสำหรับการสอบถามผู้ใช้
Sanat Sharma, Josep Valls-Vargas, Tracy Holloway King, Francois Guerin, Chirag Arora (Adobe)
https://arxiv.org/abs/2305.01082
ตัวตรวจสอบการสะกดแบบเรียลไทม์ที่ละเอียดอ่อนบริบทที่มีความสามารถในการปรับภาษา
Prabhakar Gupta (Amazon)
https://arxiv.org/abs/1910.11242
Speakger: คลังคำปราศรัยของเมตาดาต้าที่ได้รับการเสริมสร้าง
Kai-Robin Lange และ Carsten Jentsch
https://arxiv.org/pdf/2410.17886
คำศัพท์การติดแท็กลำดับเพิ่มเติมสำหรับการแก้ไขข้อผิดพลาดทางไวยากรณ์
Stuart Mesham, Christopher Bryant, Marek Rei, Zheng Yuan
https://arxiv.org/abs/2302.05913
คลังข้อมูลรัฐสภาเยอรมัน (Gerparcor)
Giuseppe Abrami, Mevlüt Bagci, Leon Hammerla, Alexander Mehler
https://arxiv.org/abs/2204.10422
IOCR: การรับรู้ตัวละครแบบออพติคอลสำหรับการนับการเลือกตั้ง
Kenneth U. Oyibo, Jean D. Louis, Juan E. Gilbert
https://arxiv.org/abs/2208.00865
ตัวตรวจสอบการสะกดคำ Amazigh โดยใช้อัลกอริทึม Damerau-Levenshtein และ N-Gram
Youness Chaabi, Fadoua Ataa Allah
https://www.sciencedirect.com/science/article/pii/S1319157821001828
การสำรวจการแก้ไขแบบสอบถามสำหรับการดึงข้อมูลเชิงธุรกิจไทย
Phongsathorn Kittiworapanya, Nuttapong Saelek, Anuruth Lertpiya, Tawunrat Chalothorn
https://ieeexplore.ieee.org/document/9376809
Symspell และการสะกดคำที่ใช้ LSTM สำหรับทมิฬ
Selvakumar Murugantamil Arasan Bakthavatchalamtamil Arasan Bakthavatchalammalaikannan Sankarasubbu
https://www.researchgate.net/publication/349924975_symspell_and_lstm_based_spell-_checkers_for_tamil
Symspell4burmese: อัลกอริทึมการแก้ไขการสะกดคำแบบสมมาตร (symspell) สำหรับการตรวจสอบการสะกดคำพม่า
EI Phyu Phyu Mon; Ye Kyaw Thu; กว่าหยู; aye wai oo
https://ieeexplore.ieee.org/document/9678171
ตรวจสอบการสะกดคำ Indonesia 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 การแก้ไขคาถา Bahasa อินโดนีเซีย
Muhammad Hafizh Ferdiansyah ฉัน kadek dwi nuryana
https://ejournal.unesa.ac.id/index.php/jinacs/article/download/50989/41739
การปรับปรุงการดึงเอกสารด้วยการแก้ไขการสะกดคำสำหรับหะดีษ
Muhammad Zaky Ramadhankemas M Lhaksmanakemas M Lhaksmana
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%B8%80- %eb%A7%9E%EC%B6%A4%EB%B2%95-%EA%B5%90%EC%A0%95-3DEF9CA00805
การซ่อมแซมข้อความที่แตกหัก ขั้นตอนการแก้ปัญหาสำหรับการแก้ไขข้อมูล OCR
Jens Bjerring-Hansen, Ross Deans Kristensen-McLachla2, Philip Diderichsen และ Dorte Haltrup Hansen
https://ceur-ws.org/vol-3232/paper14.pdf
ต่อการประมวลผลภาษาธรรมชาติเป็นการแก้ไขการสะกดคำสำหรับระบบการจดจำข้อความที่เขียนด้วยลายมือออฟไลน์
Arthur Flor de Sousa Neto; Byron Leite Dantas Bezerra; และ Alejandro Héctor Toselli
https://www.mdpi.com/2076-3417/10/21/7711
เมื่อใดควรใช้ OCR หลังการแก้ไขสำหรับการจดจำเอนทิตีที่มีชื่อ?
Vinh-Nam Huynh, Ahmed Hamdi, Antoine Doucet
https://hal.science/hal-030344484v1/
การแก้ไขข้อผิดพลาดอัตโนมัติ: การประเมินประสิทธิภาพของเครื่องมือตรวจสอบการสะกดคำ
A. Tolegenova
https://journals.sdu.edu.kz/index.php/nts/article/view/690
Zhaw-Cai: วิธีการทั้งชุดสำหรับคำพูดภาษาสวิสเยอรมันเป็นข้อความมาตรฐานภาษาเยอรมัน
Malgorzata Anna Ulasik, Manuela Hurlimann, Bogumila Dubel, Yves Kaufmann,
Silas Rudolf, Jan Deriu, Katsiarna Mlynchyk, Hans-Peter Hutter และ Mark Cieliebak
https://ceur-ws.org/vol-2957/sg_paper3.pdf
โปรแกรมข้อผิดพลาดคำ Cyrillic ขึ้นอยู่กับการเรียนรู้ของเครื่อง
Battumur, K. , Dulamragchaa, U. , Enkhbat, S. , Altanhuyag, L. , & Tumurbaatar, P.
https://mongoliajol.info/index.php/jimdt/article/view/2661
การค้นหาสตริงโดยประมาณที่รวดเร็วเพื่อหา wikification
Szymon Olewniczak, Julian Szymanski
https://www.iccs-meeting.org/archive/iccs2021/papers/127440334.pdf
RumedSpellChecker: การแก้ไขข้อผิดพลาดในการสะกดคำสำหรับภาษารัสเซียธรรมชาติในบันทึกสุขภาพอิเล็กทรอนิกส์โดยใช้เทคนิคการเรียนรู้ของเครื่องจักร
Dmitrii Pogrebnoi, Anastasia Funkner, Sergey Kovalchuk
https://link.springer.com/chapter/10.1007/978-3-031-36024-4_16
คำศัพท์การติดแท็กลำดับเพิ่มเติมสำหรับการแก้ไขข้อผิดพลาดทางไวยากรณ์
Stuart Mesham, Christopher Bryant, Marek Rei, Zheng Yuan
https://aclanthology.org/2023.findings-ecl.119.pdf
การค้นหาความคล้ายคลึงกันของตัวรับภูมิคุ้มกันแบบปรับตัวได้เร็วโดยการค้นหาการลบแบบสมมาตร
Touchchai Chotisorayuth, Andreas Tiffeau-Mayer
https://arxiv.org/html/2403.09010v1
การเปิดเผยความเป็นพิษที่ปลอมตัว: โมดูลการประมวลผลล่วงหน้าใหม่สำหรับการปรับการควบคุมเนื้อหาที่เพิ่มขึ้น
Johnny Chan, Yuming Li
https://www.sciencedirect.com/science/article/pii/S2215016124001225
bycycle
-> bicycle
(แทนที่จะ by cycle
)inconvient
-> inconvenient
(แทนที่จะเป็น i convent
)Symspell ได้รับการสนับสนุนจาก Seekstorm - การค้นหาประสิทธิภาพสูงเป็นบริการและการค้นหา API