철자 수정 및 퍼지 검색 : 대칭 삭제 철자 수정 알고리즘을 통해 1 백만 배 더 빠릅니다.
대칭 삭제 철자 수정 알고리즘은 주어진 Damerau-Levenshtein 거리에 대한 후보자 생성 편집 및 사전 조회의 복잡성을 줄입니다. Deletes + Transposes + Replaces + Inserts의 표준 접근 방식보다 6 배 더 빠릅니다.
다른 알고리즘과는 반대로 삭제 만 필요하며 전송 + + 인서트를 대체하지 않습니다. 입력 항의 + 삽입 + 삽입물을 전송합니다. 사전 항의 삭제로 변환됩니다. 대체 및 인서트는 비싸고 언어 의존적입니다. 예 : 중국에는 70,000 개의 유니 코드 한 문자가 있습니다!
속도는 저렴한 삭제 전용 편집 후보자 생성 및 사전 계산 에서 비롯됩니다.
평균 5 글자 단어는 최대 편집 거리 3 내에 약 3 백만 개의 가능한 철자 오류가 있습니다.
그러나 Symspell은 사전 계산 및 조회 시간에 모두 덮을 수 있도록 25 개의 삭제 만 생성하면됩니다. 마법!
Symspell이 마음에 들면 Rust (Open Source)의 필리 초 전체 텍스트 검색 라이브러리 및 멀티 테넌시 서버 인 SeekStorm을 사용해보십시오.
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)
1000 배 빠른 철자 수정 알고리즘
빅 데이터의 큰 편집 거리와 일치하는 빠른 근사 문자열
제품 이름, 회사 이름 및 거리 이름의 매우 빠른 데이터 청소
밀리 초의 화합물이 자동 철자 수정을 인식합니다
Symspell vs. Bk-Tree : 100x 더 빠른 퍼지 스트링 검색 및 맞춤법 검사
시끄러운 텍스트에 대한 빠른 단어 세분화
가지 치기 래딕 트리 - 스테로이드의 라디습니다.
LookupCompound는 다중 단어 입력 문자열의 복합 인식 자동 맞춤법 수정을 지원합니다.
1. 화합물 분할 및 소화
Lookup ()는 모든 입력 문자열을 단일 용어 로 가정합니다. LookupCompound는 또한 세 가지 사례로 화합물 분할 / 분해를 지원합니다.
분할 오류, 연결 오류, 대체 오류, 전치 오류, 삭제 오류 및 삽입 오류는 동일한 단어 내에서 혼합 될 수 있습니다.
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 단어 / 초 (2012 MacBook Pro의 단일 코어)
WordSegentation은 적절한 위치에 누락 된 공간을 삽입하여 문자열을 단어로 나눕니다.
예 :
- 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
응용 프로그램 :
성능:
185 숯 문자열을 53 단어로 분할하기위한 4 밀리 초 (2012 MacBook Pro의 단일 코어)
단일 단어 + 입력 : 철자 제안 표시
입력없이 입력하십시오 : 프로그램을 종료하십시오
다중 단어 + 입력 : 철자 제안 표시
입력없이 입력하십시오 : 프로그램을 종료하십시오
공백이없는 문자열 + 입력 : 단어 세그먼트 텍스트 표시
입력없이 입력하십시오 : 프로그램을 종료하십시오
Windows, MacOS 및 Linux에서 실행되는 무료 Visual Studio Code와 함께 데모, DemoCompound 및 SegmentationDemo 프로젝트를 구축 할 수 있습니다.
//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 및 벤치 마크 프로젝트는 Windows, MacOS 및 Linux에서 실행되는 무료 Visual Studio Code와 함께 구축 할 수 있습니다.
사전 품질은 수정 품질에 가장 중요합니다. 이 두 데이터 소스를 달성하기 위해 교차로에 의해 결합되었습니다. Google Books NGRAM 데이터는 대표적인 단어 주파수를 제공하지만 (철자 오류가있는 많은 항목을 포함 함) - 진정한 영어 어휘를 보장하는 맞춤법 검사기 지향 단어 목록 (단어 주파수가 포함되어 있지 않습니다. 동일한 편집 거리 내에서 제안 순위 순위에 필요합니다).
주파수 _dictionary_en_82_765.txt는 아래에 언급 된 두 목록을 교차시켜 생성되었습니다. 상호 적으로 필터링하여 두 목록에 나타나는 단어 만 사용됩니다. 추가 필터가 적용되었고 결과 목록은 가장 빈번한 단어로 잘라 냈습니다.
언어 또는 전문 기술 도메인에 대해 자신의 주파수 사전을 구축 할 수 있습니다. Symspell Spelling Correction Algorithm은 사이릴, 중국어 또는 그루지야 인과 같은 라틴 문자가없는 언어를 지원합니다.
Symspell에는 영어 주파수 사전이 포함되어 있습니다
중국어, 영어, 프랑스어, 독일어, 히브리어, 이탈리아어, 러시아어 및 스페인어의 사전은 여기에 있습니다.
Symspell.FrequencyDictionary
다른 많은 언어의 주파수 사전은 여기에서 찾을 수 있습니다.
주파수 저장소
주파수 사전
주파수 사전
C# (원본 소스 코드)
https://github.com/wolfgarbe/symspell
.NET (Nuget 패키지)
https://www.nuget.org/packages/symspell
다음의 타사 포트 또는 다른 프로그래밍 언어에 대한 상환은 정확한 포트인지, 오류가 없거나, 동일한 결과를 제공하거나 원래 알고리즘만큼 빠른지 스스로 테스트되지 않았습니다.
대부분의 포트는 Symspell 버전 3.0을 대상으로합니다. 그러나 버전 6.1. 훨씬 더 높은 속도와 낮은 메모리 소비를 제공합니다!
webassembly
https://github.com/justinwilaby/spellchecker-wasm
웹 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
하스켈
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
코 틀린
https://github.com/wavesonics/symspellkt
대상 c
https://github.com/amitbhavsariphone/symspell (버전 6.3)
파이썬
https://github.com/mammothb/symspellpy (버전 6.7)
https://github.com/viig99/symspellcpppy (버전 6.5)
https://github.com/zoho-labs/symspell (Rust 버전의 파이썬 바인딩)
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 (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 (아마존)
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
Damerau-Levenshtein 알고리즘 및 N-Gram을 사용하는 Amazigh Spell Checker
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 : 버마어 맞춤법 검사를위한 Symmetric Delete 철자 수정 알고리즘 (Symspell)
Ei Phyu Phyu Mon; Ye Kyaw Thu; Yu보다; Aye wai oo
https://ieeexplore.ieee.org/document/9678171
철자 검사 인도네시아 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 Indonesia
Muhammad Hafizh Ferdiansyah, I 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_for_weak_and_fabricated_indonesian-translated_hadith
symspell 이용한을 한글 맞춤법 맞춤법 교정 김희규
https://heegyukim.medium.com/symspell%EC%9D%84-%EC%9D%B4%EC%9A9A995%95%9C-%ED%95%9C%EA%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; 바이런 레이트 단타 베스 라; 및 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-03034484v1/
자동 오류 수정 : 맞춤법 검사기 도구의 성능 평가
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, Katsiaryna Mlynchyk, Hans-Peter Hutter 및 Mark Cieliebak
https://ceur-s.org/vol-2957/sg_paper3.pdf
머신 러닝을 기반으로 한 키릴 단어 오류 프로그램
Battumur, K., Dulamragchaa, U., Enkhbat, S., Altanhuyag, L. 및 Dugburbaatar, 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-acl.119.pdf
대칭 결실 조회에 의한 번개 빠른 적응 면역 수용체 유사성 검색
Touchchai Chotisorayuth, Andreas Tiffeau-Mayer
https://arxiv.org/html/2403.09010v1
위장 된 독성 공개 : 향상된 컨텐츠 조정을위한 새로운 사전 처리 모듈
조니 찬, yuming li
https://www.sciencedirect.com/science/article/pii/s2215016124001225
bycycle
> bicycle
( by cycle
대신)inconvient
-> inconvenient
( i convent
대신)Symspell 은 SeekStorm 에서 기여합니다 - 서비스 및 검색 API로서의 고성능 검색