Comprobador de palabras contextuales para mejores sugerencias
Es fundamental comprender que identificar si un candidato tiene un error ortográfico es una gran tarea.
Los errores de ortografía se clasifican en términos generales como errores no relacionados con palabras (NWE) y errores con palabras reales (RWE). Si la cadena mal escrita es una palabra válida en el idioma, entonces se llama RWE; de lo contrario, es NWE.
--Monojit Choudhury et. Alabama. (2007)
Actualmente, este paquete se centra en la corrección de palabras fuera de vocabulario (OOV) o errores sin palabras (NWE) utilizando el modelo BERT. La idea de utilizar BERT era utilizar el contexto al corregir OOV. Para mejorar este paquete, me gustaría ampliar la funcionalidad para identificar RWE, optimizar el paquete y mejorar la documentación.
El paquete se puede instalar usando pip. Necesitarías Python 3.6+
pip install contextualSpellCheck
Nota: Para uso en otros idiomas, consulte la carpeta 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.'
¡O puede agregarlo manualmente a la tubería 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 .
Después de agregar contextual spellchecker
en la canalización, la utiliza normalmente. Se puede acceder a las sugerencias del corrector ortográfico y a otros datos mediante extensiones.
>> > 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 : []}
Para facilitar el uso, contextual spellchecker
proporciona extensiones espaciales personalizadas que su código puede consumir. Esto facilita que el usuario obtenga los datos deseados. contextualSpellCheck proporciona extensiones a nivel de doc
, span
y token
. Las siguientes tablas resumen las extensiones.
spaCy.Doc
Extensión | Tipo | Descripción | Por defecto |
---|---|---|---|
doc._.contextual_spellCheck | Boolean | Para comprobar si contextualSpellCheck se agrega como extensión | True |
doc._.realizado_spellCheck | Boolean | Para comprobar si contextualSpellCheck identificó algún error ortográfico y realizó la corrección | False |
doc._.suggestions_spellCheck | {Spacy.Token:str} | si se realizan correcciones, devuelve la asignación del token de error ortográfico ( spaCy.Token ) con la palabra sugerida ( str ) | {} |
doc._.outcome_spellCheck | str | oración corregida ( str ) como salida | "" |
doc._.score_spellCheck | {Spacy.Token:List(str,float)} | si se identifican correcciones, devuelve el mapeo del token de error ortográfico ( spaCy.Token ) con las palabras sugeridas ( str ) y la probabilidad de esa corrección | None |
spaCy.Span
Extensión | Tipo | Descripción | Por defecto |
---|---|---|---|
span._.get_has_spellCheck | Boolean | Para verificar si contextualSpellCheck identificó algún error ortográfico y realizó la corrección en este lapso | False |
span._.score_spellCheck | {Spacy.Token:List(str,float)} | si se identifican correcciones, devuelve el mapeo del token de error ortográfico ( spaCy.Token ) con las palabras sugeridas ( str ) y la probabilidad de esa corrección para los tokens en este span | {spaCy.Token: []} |
spaCy.Token
Extensión | Tipo | Descripción | Por defecto |
---|---|---|---|
token._.get_require_spellCheck | Boolean | Para comprobar si contextualSpellCheck identificó algún error ortográfico y realizó la corrección en este token | False |
token._.get_suggestion_spellCheck | str | si se realizan correcciones, devuelve la palabra sugerida ( str ). | "" |
token._.score_spellCheck | [(str,float)] | si se identifican correcciones, devuelve palabras sugeridas ( str ) y probabilidad ( float ) de esa corrección. | [] |
Actualmente, existe una API GET sencilla para empezar. Puedes ejecutar la aplicación en tu local y jugar con ella.
Consulta: puede utilizar el punto final http://127.0.0.1:5000/?query=YOUR-QUERY Nota: su navegador puede manejar la codificación de texto
GET Request: http://localhost:5000/?query=Income%20was%20$9.4%20milion%20compared%20to%20the%20prior%20year%20of%20$2.7%20milion.
Respuesta:
{
"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 te gusta el proyecto, ¡por favor ⭑ el proyecto y muestra tu apoyo! Además, si cree que el comportamiento actual no es el esperado, no dude en plantear un problema. Si puede ayudar con alguna de las tareas anteriores, abra un PR con los cambios necesarios en la documentación y las pruebas.
Si está utilizando contextualSpellCheck en su trabajo académico, considere citar la biblioteca usando la siguiente entrada 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 }
}
A continuación se muestran algunos de los proyectos/trabajos a los que me referí mientras desarrollaba este paquete.