더 나은 제안을 위한 상황별 단어 검사기
후보자가 철자 오류인지 식별하는 것이 큰 작업이라는 것을 이해하는 것이 중요합니다.
철자 오류는 크게 NWE(비단어 오류)와 RWE(실제 단어 오류)로 분류됩니다. 철자가 틀린 문자열이 언어에서 유효한 단어인 경우 RWE라고 하며, 그렇지 않으면 NWE라고 합니다.
-- Monojit Choudhury 외. 알. (2007)
이 패키지는 현재 BERT 모델을 사용한 OOV(Out of Vocabulary) 단어 또는 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)} | 수정 사항이 식별되면 추천 단어( str )와 해당 수정 확률이 포함된 맞춤법 오류 토큰( spaCy.Token ) 매핑을 반환합니다. | None |
spaCy.Span
레벨 확장확대 | 유형 | 설명 | 기본 |
---|---|---|---|
span._.get_has_spellCheck | Boolean | contextualSpellCheck가 이 범위에서 맞춤법 오류를 식별하고 수정을 수행했는지 확인하려면 | False |
span._.score_spellCheck | {Spacy.Token:List(str,float)} | 수정 사항이 식별되면 추천 단어( str )와 함께 철자가 틀린 토큰( spaCy.Token ) 매핑과 이 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 }
}
다음은 이 패키지를 개발하는 동안 제가 참고한 프로젝트/작업 중 일부입니다.