Verificador de palavras contextuais para melhores sugestões
É fundamental entender que identificar se um candidato apresenta erro ortográfico é uma grande tarefa.
Os erros ortográficos são amplamente classificados como erros de não palavras (NWE) e erros de palavras reais (RWE). Se a sequência incorreta for uma palavra válida no idioma, ela será chamada de RWE, caso contrário, será NWE.
--Monojit Choudhury e outros. al. (2007)
Este pacote atualmente se concentra na correção de palavras ou erros sem palavras (NWE) fora do vocabulário (OOV) usando o modelo BERT. A ideia de usar o BERT era usar o contexto na correção do OOV. Para melhorar este pacote, gostaria de estender a funcionalidade para identificar RWE, otimizando o pacote e melhorando a documentação.
O pacote pode ser instalado usando pip. Você precisaria de python 3.6+
pip install contextualSpellCheck
Nota: Para uso em outros idiomas, verifique a pasta 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 você pode adicionar manualmente ao 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 .
Depois de adicionar contextual spellchecker
no pipeline, você usa o pipeline normalmente. As sugestões de verificação ortográfica e outros dados podem ser acessados por meio de extensões.
>> > 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 o uso, contextual spellchecker
fornece extensões espaciais personalizadas que seu código pode consumir. Isso torna mais fácil para o usuário obter os dados desejados. contextualSpellCheck fornece extensões no nível doc
, span
e token
. As tabelas abaixo resumem as extensões.
spaCy.Doc
Extensão | Tipo | Descrição | Padrão |
---|---|---|---|
doc._.contextual_spellCheck | Boolean | Para verificar se contextualSpellCheck foi adicionado como extensão | True |
doc._.performed_spellCheck | Boolean | Para verificar se o contextualSpellCheck identificou algum erro ortográfico e realizou a correção | False |
doc._.suggestions_spellCheck | {Spacy.Token:str} | se as correções forem realizadas, ele retorna o mapeamento do token de erro ortográfico ( spaCy.Token ) com a palavra sugerida ( str ) | {} |
doc._.outcome_spellCheck | str | frase corrigida ( str ) como saída | "" |
doc._.score_spellCheck | {Spacy.Token:List(str,float)} | se forem identificadas correções, ele retorna o mapeamento do token de erro ortográfico ( spaCy.Token ) com palavras sugeridas ( str ) e probabilidade dessa correção | None |
spaCy.Span
Extensão | Tipo | Descrição | Padrão |
---|---|---|---|
span._.get_has_spellCheck | Boolean | Para verificar se o contextualSpellCheck identificou algum erro ortográfico e realizou a correção neste período | False |
span._.score_spellCheck | {Spacy.Token:List(str,float)} | se forem identificadas correções, ele retorna o mapeamento do token de erro ortográfico ( spaCy.Token ) com palavras sugeridas ( str ) e probabilidade dessa correção para tokens neste span | {spaCy.Token: []} |
spaCy.Token
Extensão | Tipo | Descrição | Padrão |
---|---|---|---|
token._.get_require_spellCheck | Boolean | Para verificar se o contextualSpellCheck identificou algum erro ortográfico e realizou a correção neste token | False |
token._.get_suggestion_spellCheck | str | se correções forem realizadas, retorna a palavra sugerida ( str ) | "" |
token._.score_spellCheck | [(str,float)] | se forem identificadas correções, ele retorna palavras sugeridas ( str ) e probabilidade ( float ) dessa correção | [] |
Atualmente, existe uma API GET simples para você começar. Você pode executar o aplicativo em seu local e brincar com ele.
Consulta: você pode usar o endpoint http://127.0.0.1:5000/?query=YOUR-QUERY Nota: seu navegador pode lidar com a codificação de texto
GET Request: http://localhost:5000/?query=Income%20was%20$9.4%20milion%20compared%20to%20the%20prior%20year%20of%20$2.7%20milion.
Resposta:
{
"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
Se você gostou do projeto, por favor ⭑ o projeto e mostre seu apoio! Além disso, se você achar que o comportamento atual não é o esperado, sinta-se à vontade para levantar uma questão. Se você puder ajudar em alguma das tarefas acima, abra um PR com as alterações necessárias na documentação e nos testes.
Se você estiver usando contextualSpellCheck em seu trabalho acadêmico, considere citar a biblioteca usando a entrada BibTex abaixo:
@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 }
}
Abaixo estão alguns dos projetos/trabalhos aos quais me referi durante o desenvolvimento deste pacote