Pemeriksa kata kontekstual untuk saran yang lebih baik
Penting untuk dipahami bahwa mengidentifikasi apakah seorang kandidat mengalami kesalahan ejaan adalah tugas besar.
Kesalahan ejaan secara luas diklasifikasikan menjadi kesalahan bukan kata (NWE) dan kesalahan kata nyata (RWE). Jika string yang salah eja adalah kata yang valid dalam bahasa tersebut, maka disebut RWE, jika tidak maka disebut NWE.
-- Monojit Choudhury dkk. al. (2007)
Paket ini saat ini berfokus pada koreksi kata Di Luar Kosakata (OOV) atau kesalahan non-kata (NWE) menggunakan model BERT. Ide penggunaan BERT adalah menggunakan konteks saat mengoreksi OOV. Untuk meningkatkan paket ini, saya ingin memperluas fungsionalitas untuk mengidentifikasi RWE, mengoptimalkan paket, dan meningkatkan dokumentasi.
Paket dapat diinstal menggunakan pip. Anda memerlukan python 3.6+
pip install contextualSpellCheck
Catatan: Untuk penggunaan dalam bahasa lain, periksa folder 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.'
Atau Anda dapat menambahkan ke pipa spaCy secara manual!
>> > 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 .
Setelah menambahkan contextual spellchecker
di alur, Anda menggunakan alur secara normal. Saran pemeriksaan ejaan dan data lainnya dapat diakses menggunakan ekstensi.
>> > 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 : []}
Untuk mempermudah penggunaannya, contextual spellchecker
menyediakan ekstensi spacy khusus yang dapat digunakan oleh kode Anda. Hal ini memudahkan pengguna untuk mendapatkan data yang diinginkan. kontekstualSpellCheck menyediakan ekstensi pada tingkat doc
, span
, dan token
. Tabel di bawah ini merangkum ekstensinya.
spaCy.Doc
Perpanjangan | Jenis | Keterangan | Bawaan |
---|---|---|---|
doc._.contextual_spellCheck | Boolean | Untuk memeriksa apakah kontekstualSpellCheck ditambahkan sebagai ekstensi | True |
doc._.performed_spellCheck | Boolean | Untuk memeriksa apakah kontekstualSpellCheck mengidentifikasi kesalahan ejaan dan melakukan koreksi | False |
doc._.suggestions_spellCheck | {Spacy.Token:str} | jika koreksi dilakukan, ia mengembalikan pemetaan token salah eja ( spaCy.Token ) dengan kata yang disarankan ( str ) | {} |
doc._.outcome_spellCheck | str | kalimat yang dikoreksi ( str ) sebagai keluaran | "" |
doc._.score_spellCheck | {Spacy.Token:List(str,float)} | jika koreksi teridentifikasi, ia mengembalikan pemetaan token salah eja ( spaCy.Token ) dengan kata-kata yang disarankan ( str ) dan kemungkinan koreksi tersebut | None |
spaCy.Span
Perpanjangan | Jenis | Keterangan | Bawaan |
---|---|---|---|
span._.get_has_spellCheck | Boolean | Untuk memeriksa apakah kontekstualSpellCheck mengidentifikasi kesalahan ejaan dan melakukan koreksi dalam rentang ini | False |
span._.score_spellCheck | {Spacy.Token:List(str,float)} | jika koreksi teridentifikasi, ia mengembalikan pemetaan token salah eja ( spaCy.Token ) dengan kata-kata yang disarankan ( str ) dan kemungkinan koreksi tersebut untuk token dalam span ini | {spaCy.Token: []} |
spaCy.Token
Perpanjangan | Jenis | Keterangan | Bawaan |
---|---|---|---|
token._.get_require_spellCheck | Boolean | Untuk memeriksa apakah kontekstualSpellCheck mengidentifikasi kesalahan ejaan dan melakukan koreksi pada token ini | False |
token._.get_suggestion_spellCheck | str | jika koreksi dilakukan, ia mengembalikan kata yang disarankan ( str ) | "" |
token._.score_spellCheck | [(str,float)] | jika koreksi teridentifikasi, ia mengembalikan kata-kata yang disarankan ( str ) dan probabilitas ( float ) dari koreksi tersebut | [] |
Saat ini, ada GET API sederhana untuk membantu Anda memulai. Anda dapat menjalankan aplikasi di lokal Anda dan memainkannya.
Kueri: Anda dapat menggunakan titik akhir http://127.0.0.1:5000/?query=YOUR-QUERY Catatan: Browser Anda dapat menangani pengkodean teks
GET Request: http://localhost:5000/?query=Income%20was%20$9.4%20milion%20compared%20to%20the%20prior%20year%20of%20$2.7%20milion.
Tanggapan:
{
"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
Jika Anda menyukai proyek ini, silakan ⭑ proyek tersebut dan tunjukkan dukungan Anda! Selain itu, jika Anda merasa perilaku saat ini tidak sesuai harapan, silakan ajukan masalah. Jika Anda dapat membantu dengan salah satu tugas di atas, silakan buka PR dengan perubahan yang diperlukan pada dokumentasi dan tes.
Jika Anda menggunakan kontekstualSpellCheck dalam karya akademis Anda, mohon pertimbangkan untuk mengutip perpustakaan menggunakan entri BibTex di bawah ini:
@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 }
}
Di bawah ini adalah beberapa proyek/pekerjaan yang saya rujuk saat mengembangkan paket ini