مدقق الكلمات السياقية للحصول على اقتراحات أفضل
من الضروري أن نفهم أن تحديد ما إذا كان المرشح خطأ إملائيًا يعد مهمة كبيرة.
يتم تصنيف الأخطاء الإملائية على نطاق واسع على أنها أخطاء غير كلامية (NWE) وأخطاء كلامية حقيقية (RWE). إذا كانت السلسلة التي بها خطأ إملائي كلمة صالحة في اللغة، فإنها تسمى RWE، وإلا فهي NWE.
-- مونوجيت شودري وآخرون. آل. (2007)
تركز هذه الحزمة حاليًا على تصحيح الكلمات أو الأخطاء غير المتعلقة بالكلمات (OOV) باستخدام نموذج BERT. كانت فكرة استخدام BERT هي استخدام السياق عند تصحيح OOV. لتحسين هذه الحزمة، أود توسيع الوظيفة لتحديد RWE، وتحسين الحزمة، وتحسين الوثائق.
يمكن تثبيت الحزمة باستخدام النقطة. سوف تحتاج إلى بيثون 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
امتدادات مخصصة يمكن أن يستهلكها الكود الخاص بك. وهذا يسهل على المستخدم الحصول على البيانات المطلوبة. يوفر contextualSpellCheck امتدادات على مستوى doc
span
والرمز token
. الجداول أدناه تلخص الامتدادات.
spaCy.Doc
امتداد | يكتب | وصف | تقصير |
---|---|---|---|
doc._.contextual_spellCheck | Boolean | للتحقق من إضافة contextualSpellCheck كملحق | True |
doc._.performed_spellCheck | Boolean | للتحقق مما إذا كان contextualSpellCheck قد حدد أي أخطاء إملائية وقام بالتصحيح | 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 | للتحقق مما إذا كان contextualSpellCheck قد حدد أي أخطاء إملائية وقام بالتصحيح في هذا النطاق | False |
span._.score_spellCheck | {Spacy.Token:List(str,float)} | إذا تم تحديد التصحيحات، فسيتم إرجاع تعيين رمز الخطأ الإملائي ( spaCy.Token ) مع الكلمات المقترحة ( str ) واحتمال هذا التصحيح للرموز المميزة في هذا span | {spaCy.Token: []} |
spaCy.Token
امتداد | يكتب | وصف | تقصير |
---|---|---|---|
token._.get_require_spellCheck | Boolean | للتحقق مما إذا كان contextualSpellCheck قد حدد أي أخطاء إملائية وقام بإجراء التصحيح على هذا token | False |
token._.get_suggestion_spellCheck | str | في حالة إجراء التصحيحات، يتم إرجاع الكلمة المقترحة ( str ) | "" |
token._.score_spellCheck | [(str,float)] | إذا تم تحديد التصحيحات، فسيتم إرجاع الكلمات المقترحة ( str ) والاحتمال ( float ) لهذا التصحيح | [] |
في الوقت الحاضر، توجد واجهة برمجة تطبيقات GET بسيطة لتبدأ بها. يمكنك تشغيل التطبيق بلغتك المحلية واللعب به.
الاستعلام: يمكنك استخدام نقطة النهاية 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 مع التغييرات اللازمة على الوثائق والاختبارات.
إذا كنت تستخدم contextualSpellCheck في عملك الأكاديمي، فيرجى التفكير في الاستشهاد بالمكتبة باستخدام إدخال 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 }
}
فيما يلي بعض المشاريع/الأعمال التي أشرت إليها أثناء تطوير هذه الحزمة