より適切な提案のための文脈に応じた単語チェッカー
候補者のスペルミスかどうかを特定するのは大変な作業であることを理解することが不可欠です。
スペル ミスは、非ワード エラー (NWE) とリアル ワード エラー (RWE) に大別されます。スペルミスした文字列がその言語で有効な単語である場合は RWE と呼ばれ、そうでない場合は NWE と呼ばれます。
-- モノジット・チョードリー他アル。 (2007)
このパッケージは現在、BERT モデルを使用した語彙不足 (OOV) 単語または非単語エラー (NWE) の修正に焦点を当てています。 BERT を使用するという考えは、OOV を修正するときにコンテキストを使用することでした。このパッケージを改善するには、RWE を識別する機能を拡張し、パッケージを最適化し、ドキュメントを改善したいと考えています。
パッケージは pip を使用してインストールできます。 Python 3.6以降が必要です
pip install contextualSpellCheck
注:他の言語で使用する場合は、 examples
フォルダーを確認してください。
>> > import contextualSpellCheck
>> > import spacy
>> > nlp = spacy . load ( "en_core_web_sm" )
>> >
>> > ## We require NER to identify if a token is a PERSON
>> > ## also require parser because we use `Token.sent` for context
>> > nlp . pipe_names
[ 'tok2vec' , 'tagger' , 'parser' , 'ner' , 'attribute_ruler' , 'lemmatizer' ]
>> > contextualSpellCheck . add_to_pipe ( nlp )
>> > nlp . pipe_names
[ 'tok2vec' , 'tagger' , 'parser' , 'ner' , 'attribute_ruler' , 'lemmatizer' , 'contextual spellchecker' ]
>> >
>> > doc = nlp ( 'Income was $9.4 milion compared to the prior year of $2.7 milion.' )
>> > doc . _ . outcome_spellCheck
'Income was $9.4 million compared to the prior year of $2.7 million.'
または、spaCy パイプラインに手動で追加することもできます。
>> > import spacy >> > import contextualSpellCheck >> > >> > nlp = spacy . load ( "en_core_web_sm" ) >> > nlp . pipe_names [ 'tok2vec' , 'tagger' , 'parser' , 'ner' , 'attribute_ruler' , 'lemmatizer' ] >> > # You can pass the optional parameters to the contextualSpellCheck >> > # eg. pass max edit distance use config={"max_edit_dist": 3} >> > nlp . add_pipe ( "contextual spellchecker" ) < contextualSpellCheck . contextualSpellCheck . ContextualSpellCheck object at 0x1049f82b0 > >> > nlp . pipe_names [ 'tok2vec' , 'tagger' , 'parser' , 'ner' , 'attribute_ruler' , 'lemmatizer' , 'contextual spellchecker' ] >> > >> > doc = nlp ( "Income was $9.4 milion compared to the prior year of $2.7 milion." ) >> > print ( doc . _ . performed_spellCheck ) True >> > print ( doc . _ . outcome_spellCheck ) Income was $ 9.4 million compared to the prior year of $ 2.7 million .
パイプラインにcontextual spellchecker
を追加した後は、パイプラインを通常どおり使用します。スペルチェックの候補やその他のデータには、拡張機能を使用してアクセスできます。
>> > doc = nlp ( u'Income was $9.4 milion compared to the prior year of $2.7 milion.' )
>> >
>> > # Doc Extention
>> > print ( doc . _ . contextual_spellCheck )
True
>> > print ( doc . _ . performed_spellCheck )
True
>> > print ( doc . _ . suggestions_spellCheck )
{ milion : 'million' , milion : 'million' }
>> > print ( doc . _ . outcome_spellCheck )
Income was $ 9.4 million compared to the prior year of $ 2.7 million .
>> > print ( doc . _ . score_spellCheck )
{ milion : [( 'million' , 0.59422 ), ( 'billion' , 0.24349 ), ( ',' , 0.08809 ), ( 'trillion' , 0.01835 ), ( 'Million' , 0.00826 ), ( '%' , 0.00672 ), ( '##M' , 0.00591 ), ( 'annually' , 0.0038 ), ( '##B' , 0.00205 ), ( 'USD' , 0.00113 )], milion : [( 'billion' , 0.65934 ), ( 'million' , 0.26185 ), ( 'trillion' , 0.05391 ), ( '##M' , 0.0051 ), ( 'Million' , 0.00425 ), ( '##B' , 0.00268 ), ( 'USD' , 0.00153 ), ( '##b' , 0.00077 ), ( 'millions' , 0.00059 ), ( '%' , 0.00041 )]}
>> >
>> > # Token Extention
>> > print ( doc [ 4 ]. _ . get_require_spellCheck )
True
>> > print ( doc [ 4 ]. _ . get_suggestion_spellCheck )
'million'
>> > print ( doc [ 4 ]. _ . score_spellCheck )
[( 'million' , 0.59422 ), ( 'billion' , 0.24349 ), ( ',' , 0.08809 ), ( 'trillion' , 0.01835 ), ( 'Million' , 0.00826 ), ( '%' , 0.00672 ), ( '##M' , 0.00591 ), ( 'annually' , 0.0038 ), ( '##B' , 0.00205 ), ( 'USD' , 0.00113 )]
>> >
>> > # Span Extention
>> > print ( doc [ 2 : 6 ]. _ . get_has_spellCheck )
True
>> > print ( doc [ 2 : 6 ]. _ . score_spellCheck )
{$: [], 9.4 : [], milion : [( 'million' , 0.59422 ), ( 'billion' , 0.24349 ), ( ',' , 0.08809 ), ( 'trillion' , 0.01835 ), ( 'Million' , 0.00826 ), ( '%' , 0.00672 ), ( '##M' , 0.00591 ), ( 'annually' , 0.0038 ), ( '##B' , 0.00205 ), ( 'USD' , 0.00113 )], compared : []}
使用を簡単にするために、 contextual spellchecker
は、コードで使用できるカスタムの spacy 拡張機能が用意されています。これにより、ユーザーは必要なデータを簡単に取得できるようになります。 contextSpellCheck は、 doc
、 span
、およびtoken
レベルでの拡張機能を提供します。以下の表は拡張機能をまとめたものです。
spaCy.Doc
レベルの拡張機能拡大 | タイプ | 説明 | デフォルト |
---|---|---|---|
doc._.contextual_spellCheck | Boolean | contextSpellCheck が拡張機能として追加されているかどうかを確認するには | True |
doc._.performed_spellCheck | Boolean | contextSpellCheck がスペルミスを特定し、修正を実行したかどうかを確認するには | False |
doc._.suggestions_spellCheck | {Spacy.Token:str} | 修正が実行されると、スペルミストークン ( spaCy.Token ) と推奨単語 ( str ) のマッピングが返されます。 | {} |
doc._.outcome_spellCheck | str | 出力として修正された文( str ) | "" |
doc._.score_spellCheck | {Spacy.Token:List(str,float)} | 修正が特定された場合は、スペルミストークン ( spaCy.Token ) と推奨単語 ( str ) のマッピングとその修正の確率を返します。 | None |
spaCy.Span
レベルの拡張機能拡大 | タイプ | 説明 | デフォルト |
---|---|---|---|
span._.get_has_spellCheck | Boolean | contextSpellCheck がスペルミスを特定し、このスパンで修正を実行したかどうかを確認するには | False |
span._.score_spellCheck | {Spacy.Token:List(str,float)} | 修正が特定された場合は、スペルミストークン ( spaCy.Token ) と推奨単語 ( str ) のマッピングと、このspan 内のトークンの修正の確率を返します。 | {spaCy.Token: []} |
spaCy.Token
レベルの拡張機能拡大 | タイプ | 説明 | デフォルト |
---|---|---|---|
token._.get_require_spellCheck | Boolean | contextSpellCheck がスペルミスを識別し、このtoken の修正を実行したかどうかを確認するには | False |
token._.get_suggestion_spellCheck | str | 修正が実行された場合は、提案された単語 ( str ) が返されます。 | "" |
token._.score_spellCheck | [(str,float)] | 修正が特定された場合は、その修正の推奨単語 ( str ) と確率 ( float ) を返します。 | [] |
現時点では、簡単に開始できる GET API が用意されています。ローカルでアプリを実行して遊ぶことができます。
クエリ: エンドポイント http://127.0.0.1:5000/?query=YOUR-QUERY を使用できます。 注: ブラウザはテキスト エンコーディングを処理できます。
GET Request: http://localhost:5000/?query=Income%20was%20$9.4%20milion%20compared%20to%20the%20prior%20year%20of%20$2.7%20milion.
応答:
{
"success" : true ,
"input" : " Income was $9.4 milion compared to the prior year of $2.7 milion. " ,
"corrected" : " Income was $9.4 milion compared to the prior year of $2.7 milion. " ,
"suggestion_score" : {
"milion" : [
[
" million " ,
0.59422
],
[
" billion " ,
0.24349
],
...
],
"milion:1" : [
[
" billion " ,
0.65934
],
[
" million " ,
0.26185
],
...
]
}
}
candidateRanking
の最大編集距離を指定するプロジェクトが気に入ったら、⭑ プロジェクトに登録してサポートを示してください。また、現在の動作が期待どおりではないと思われる場合は、お気軽に問題を提起してください。上記のタスクのいずれかをご協力いただける場合は、ドキュメントとテストに必要な変更を記載した PR を開いてください。
学術的な研究で contextSpellCheck を使用している場合は、以下の BibTex エントリを使用してライブラリを引用することを検討してください。
@misc { Goel_Contextual_Spell_Check_2021 ,
author = { Goel, Rajat } ,
doi = { 10.5281/zenodo.4642379 } ,
month = { 3 } ,
title = { {Contextual Spell Check} } ,
url = { https://github.com/R1j1t/contextualSpellCheck } ,
year = { 2021 }
}
以下は、このパッケージの開発中に参照したプロジェクト/作品の一部です。