Vérificateur de mots contextuel pour de meilleures suggestions
Il est essentiel de comprendre qu’identifier si un candidat a une faute d’orthographe est une tâche ardue.
Les fautes d'orthographe sont généralement classées en erreurs non écrites (NWE) et en erreurs de mots réels (RWE). Si la chaîne mal orthographiée est un mot valide dans la langue, alors elle est appelée RWE, sinon elle est NWE.
--Monojit Choudhury et. al. (2007)
Ce package se concentre actuellement sur la correction des mots hors vocabulaire (OOV) ou des erreurs non-mots (NWE) à l'aide du modèle BERT. L'idée d'utiliser BERT était d'utiliser le contexte lors de la correction d'OOV. Pour améliorer ce package, je souhaite étendre la fonctionnalité d'identification de RWE, en optimisant le package et en améliorant la documentation.
Le package peut être installé à l’aide de pip. Vous auriez besoin de python 3.6+
pip install contextualSpellCheck
Remarque : Pour une utilisation dans d'autres langues, consultez le dossier 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.'
Ou vous pouvez ajouter manuellement au pipeline 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 .
Après avoir ajouté contextual spellchecker
dans le pipeline, vous utilisez le pipeline normalement. Les suggestions de vérification orthographique et d’autres données sont accessibles à l’aide d’extensions.
>> > 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 : []}
Pour faciliter l'utilisation, contextual spellchecker
fournit des extensions spatiales personnalisées que votre code peut utiliser. Cela permet à l'utilisateur d'obtenir plus facilement les données souhaitées. contextualSpellCheck fournit des extensions au niveau doc
, span
et token
. Les tableaux ci-dessous résument les extensions.
spaCy.Doc
Extension | Taper | Description | Défaut |
---|---|---|---|
doc._.contextual_spellCheck | Boolean | Pour vérifier si contextualSpellCheck est ajouté en tant qu'extension | True |
doc._.performed_spellCheck | Boolean | Pour vérifier si contextualSpellCheck a identifié des fautes d'orthographe et effectué une correction | False |
doc._.suggestions_spellCheck | {Spacy.Token:str} | si des corrections sont effectuées, il renvoie le mappage du jeton de faute d'orthographe ( spaCy.Token ) avec le mot suggéré ( str ) | {} |
doc._.outcome_spellCheck | str | phrase corrigée ( str ) en sortie | "" |
doc._.score_spellCheck | {Spacy.Token:List(str,float)} | si des corrections sont identifiées, il renvoie le mappage du jeton de faute d'orthographe ( spaCy.Token ) avec les mots suggérés ( str ) et la probabilité de cette correction | None |
spaCy.Span
Extension | Taper | Description | Défaut |
---|---|---|---|
span._.get_has_spellCheck | Boolean | Pour vérifier si contextualSpellCheck a identifié des fautes d'orthographe et effectué une correction au cours de cette période | False |
span._.score_spellCheck | {Spacy.Token:List(str,float)} | si des corrections sont identifiées, il renvoie le mappage du jeton de faute d'orthographe ( spaCy.Token ) avec les mots suggérés ( str ) et la probabilité de cette correction pour les jetons dans cette span | {spaCy.Token: []} |
spaCy.Token
Extension | Taper | Description | Défaut |
---|---|---|---|
token._.get_require_spellCheck | Boolean | Pour vérifier si contextualSpellCheck a identifié des fautes d'orthographe et effectué une correction sur ce token | False |
token._.get_suggestion_spellCheck | str | si des corrections sont effectuées, il renvoie le mot suggéré ( str ) | "" |
token._.score_spellCheck | [(str,float)] | si des corrections sont identifiées, il renvoie les mots suggérés ( str ) et la probabilité ( float ) de cette correction | [] |
Il existe actuellement une simple API GET pour vous aider à démarrer. Vous pouvez exécuter l'application dans votre local et jouer avec.
Requête : Vous pouvez utiliser le point de terminaison http://127.0.0.1:5000/?query=YOUR-QUERY Remarque : Votre navigateur peut gérer l'encodage du texte
GET Request: http://localhost:5000/?query=Income%20was%20$9.4%20milion%20compared%20to%20the%20prior%20year%20of%20$2.7%20milion.
Réponse:
{
"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
Si vous aimez le projet, n'hésitez pas à ⭑ le projet et à montrer votre soutien ! De plus, si vous pensez que le comportement actuel n’est pas celui attendu, n’hésitez pas à soulever un problème. Si vous pouvez nous aider dans l'une des tâches ci-dessus, veuillez ouvrir un PR avec les modifications nécessaires à la documentation et aux tests.
Si vous utilisez contextualSpellCheck dans votre travail académique, veuillez envisager de citer la bibliothèque en utilisant l'entrée BibTex ci-dessous :
@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 }
}
Vous trouverez ci-dessous quelques-uns des projets/travaux auxquels j'ai fait référence lors du développement de ce package.