上下文單字檢查器提供更好的建議
重要的是要明白,識別候選人是否存在拼字錯誤是一項艱鉅的任務。
拼字錯誤大致分為非單字錯誤 (NWE) 和真實單字錯誤 (RWE)。如果拼字錯誤的字串是該語言中的有效單詞,則稱為 RWE,否則稱為 NWE。
——莫諾吉特·喬杜里等人等人。 (2007)
該軟體包目前專注於使用 BERT 模型糾正詞彙外 (OOV) 單字或非單字錯誤 (NWE)。使用 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
提供了您的程式碼可以使用的自訂 spacy 擴充功能。這使得用戶更容易獲得所需的數據。 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 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 }
}
以下是我在開發此套件時提到的一些專案/工作