スペル補正とファジー検索:対称削除スペル補正アルゴリズムを介して100万倍高速
対称削除スペル補正アルゴリズムは、特定のDamerau-Levenshtein距離の候補生成と辞書の検索の編集の複雑さを減らします。これは、6桁高速です(削除 +転置 +交換 +挿入物を備えた標準的なアプローチよりも)、言語は独立しています。
他のアルゴリズムとは反対に削除のみが必要であり、転置 +交換 +挿入物はありません。 Transposes +交換 +入力用語の挿入物は、辞書項の削除に変換されます。交換と挿入物は高価で言語に依存しています。たとえば、中国人には70,000のユニコードHAN文字があります!
速度は、安価な削除のみの編集候補生成と事前計算から得られます。
平均5文字の単語には、最大編集距離3のスペルエラーが約300万個あります。
ただし、Symspellは、事前計算と検索時間の両方で、それらすべてをカバーするために25の削除のみを生成する必要があります。魔法!
Symspellが好きな場合は、 SeekStorm -Seectorm-Sub-Millisecondフルテキスト検索ライブラリ&Multi-Tenancy Server in 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のクエリ条件...最大編集距離、冗長= 0))
Norvigのアルゴリズムよりも100万倍高速です(ベンチマーク2:辞書サイズ= 29,157、最大編集距離= 3、固定編集距離=最大編集距離、Verbose = 0
1000xより高速なスペル補正アルゴリズム
ビッグデータの大規模な編集距離と一致する高速近似文字列
製品名、会社名、ストリート名の非常に高速なデータクリーニング
サブミリ秒化合物認識自動スペル補正
Symspell vs. Bk-Tree:100x Faster Fuzzy String Search&Spellチェック
騒々しいテキストの高速単語セグメンテーション
剪定基地トリー - ステロイドの基数トリ
LookupCompoundは、複合ワード入力文字列の複合認識自動スペル補正をサポートします。
1。複合分割と分解
lookup()は、すべての入力文字列を単一用語として想定しています。 LookupCompoundは、3つのケースで複合分割 /分解をサポートしています。
分割エラー、連結エラー、置換エラー、転置エラー、削除エラー、挿入エラーは、同じ単語内で混合することができます。
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のシングルコア)
Wordsegemationは、不足しているスペースを適切な位置に挿入することにより、文字列を単語に分割します。
例:
- 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のchar文字列を53ワードにセグメント化するための4ミリ秒(2012 Macbook Proのシングルコア)
シングルワード +入力:スペルの提案を表示します
入力なしで入力:プログラムを終了します
複数の単語 +入力:スペルの提案を表示します
入力なしで入力:プログラムを終了します
スペースなしの文字列 +入力:表示単語セグメント化されたテキストを表示します
入力なしで入力:プログラムを終了します
Demo、Democompound、およびSegmentationDemoプロジェクトは、Windows、MacOS、Linuxで実行される無料のVisual Studioコードで構築できます。
//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コードで構築できます。
辞書の品質は、補正の品質に最重要です。これを達成するために、2つのデータソースは交差点で組み合わされました。GoogleBooksの代表的な単語頻度(ただし、スペルエラーのある多くのエントリが含まれています)とScowl - Spell Checker志向の単語リストを提供します。同じ編集距離内の提案のランキングに必要です)。
Fuelch_dictionary_en_82_765.txtは、以下に説明する2つのリストと交差することにより作成されました。両方のリストに表示される単語のみを往復的にフィルタリングすることにより、使用されます。追加のフィルターが適用され、結果のリストは約80,000の最も頻繁な単語に切り捨てられました。
言語または専門的な技術ドメインのために独自の頻度辞書を作成できます。 SymSpell Spelling Correction Algorithmは、キリル語、中国語、ジョージアンなどの非ラチン文字を持つ言語をサポートしています。
Symspellには英語の頻度辞書が含まれています
中国語、英語、フランス語、ドイツ語、ヘブライ語、イタリア語、ロシア語、スペイン語の辞書がここにあります:
symspell.frequencydictionary
他の多くの言語の頻度辞書は、こちらにあります:
FrecureWordsリポジトリ
周波数辞書
周波数辞書
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
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
ハスケル
https://github.com/cbeav/symspell
Java
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
JavaScript
https://github.com/mathieuloutre/node-symspell(バージョン6.6、needs 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
Objective-C
https://github.com/amitbhavsariphone/symspell(バージョン6.3)
Python
https://github.com/mammothb/symspellpy(バージョン6.7)
https://github.com/viig99/symspellcpppy(バージョン6.5)
https://github.com/zoho-labs/symspell(python bindings of 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(Amazon)
https://arxiv.org/abs/1910.11242
Speakger:ドイツの州および連邦議会のメタデータ濃縮音声コーパス
Kai-Robin LangeとCarsten Jentsch
https://arxiv.org/pdf/2410.17886
文法誤差補正のための拡張シーケンスタグ付け語彙
スチュアート・メシャム、クリストファー・ブライアント、マレク・レイ、Zheng Yuan
https://arxiv.org/abs/2302.05913
ドイツ議会のコーパス(ガーパーコール)
Giuseppe Abrami、MevlütBagci、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スペルチェッカー
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_baded_spell -_checkers_for_tamil
symspell4burmese:シンメット削除スペル補正アルゴリズム(Symspell)ビルモのスペルチェック
ei phyu phyu mon; Ye Kyaw Thu; yuよりも; aye wai oo
https://ieeexplore.ieee.org/document/9678171
スペルチェックインドネシアMenggunakan Norvig Dan Symspell
ヤシル・アブドゥル・ローマン
https://medium.com/@yasirabd/spell-check-indonesia-menggunakan-norvig-dan-symspell-4fa583d62c24
Analisis Perbandingan Metode Burkhard Keller Tree Dan Symspell Dalam Spell Correction 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_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%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
オフラインの手書きのテキスト認識システムのスペル修正としての自然言語処理に向けて
アーサー・フル・デ・スーザ・ネト。バイロン・レイト・ダンタス・ベゼラ;アレハンドロ・ヘクター・トセッリ
https://www.mdpi.com/2076-3417/10/21/7711
名前付きエンティティ認識にOCR後の修正を使用するのはいつですか?
Vinh-Nam Huynh、Ahmed Hamdi、Antoine Doucet
https://hal.science/hal-03034484v1/
自動エラー修正:スペルチェッカーツールのパフォーマンスの評価
A.トレゲノバ
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-ws.org/vol-2957/sg_paper3.pdf
機械学習に基づくキリル語の単語エラープログラム
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.ics-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
文法誤差補正のための拡張シーケンスタグ付け語彙
スチュアート・メシャム、クリストファー・ブライアント、マレク・レイ、Zheng Yuan
https://aclanthology.org/2023.findings-eacl.119.pdf
対称的な削除ルックアップによる稲妻の適応免疫受容体の類似性検索
Touchchai Chotisorayuth、Andreas Tiffeau-Mayer
https://arxiv.org/html/2403.09010v1
変装した毒性を発表する:強化されたコンテンツモデレートのための新しい前処理モジュール
ジョニー・チャン、くねくねする李
https://www.sciencedirect.com/science/article/pii/S2215016124001225
bycycle
> bicycle
( by cycle
代わりに)inconvient
- > inconvenient
( i convent
の代わりに)SymspellはSeekStormによって寄稿されています - サービス&Search APIとしての高性能検索