เครื่องมือตรวจสอบคำตามบริบทเพื่อคำแนะนำที่ดีกว่า
สิ่งสำคัญคือต้องเข้าใจว่าการระบุว่าผู้สมัครสะกดผิดหรือไม่นั้นเป็นงานใหญ่
ข้อผิดพลาดในการสะกดคำจัดกว้างๆ เป็นข้อผิดพลาดที่ไม่ใช่คำ (NWE) และข้อผิดพลาดคำจริง (RWE) หากสตริงที่สะกดผิดเป็นคำที่ถูกต้องในภาษานั้น จะเรียกว่า RWE มิเช่นนั้นจะเป็น NWE
-- โมโนจิต เชาธุรี และ. อัล (2550)
แพ็คเกจนี้มุ่งเน้นไปที่การแก้ไขคำที่ไม่อยู่ในคำศัพท์ (OOV) หรือข้อผิดพลาดที่ไม่ใช่คำ (NWE) โดยใช้โมเดล BERT แนวคิดในการใช้ BERT คือการใช้บริบทเมื่อแก้ไข OOV เพื่อปรับปรุงแพ็คเกจนี้ ฉันต้องการขยายฟังก์ชันการทำงานเพื่อระบุ RWE เพิ่มประสิทธิภาพแพ็คเกจ และปรับปรุงเอกสารประกอบ
สามารถติดตั้งแพ็คเกจได้โดยใช้ pip คุณจะต้องใช้ python 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
ส่วนขยาย | พิมพ์ | คำอธิบาย | ค่าเริ่มต้น |
---|---|---|---|
โทเค็น._.get_require_spellCheck | Boolean | เพื่อตรวจสอบว่า contextualSpellCheck ระบุการสะกดผิดและดำเนินการแก้ไข token นี้หรือไม่ | False |
token._.get_suggestion_spellCheck | str | หากดำเนินการแก้ไข ระบบจะส่งคืนคำที่แนะนำ ( str ) | "" |
token._.score_spellCheck | [(str,float)] | หากมีการระบุการแก้ไข ระบบจะส่งกลับคำที่แนะนำ ( str ) และความน่าจะเป็น ( float ) ของการแก้ไขนั้น | [] |
ปัจจุบันมี GET API ง่ายๆ ที่จะช่วยให้คุณเริ่มต้นได้ คุณสามารถเรียกใช้แอปในพื้นที่ของคุณและเล่นกับมันได้
ข้อความค้นหา: คุณสามารถใช้จุดสิ้นสุดได้ 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 }
}
ด้านล่างนี้คือโครงการ/งานบางส่วนที่ฉันอ้างอิงถึงขณะพัฒนาแพ็คเกจนี้