Kontextbezogene Wortprüfung für bessere Vorschläge
Es ist wichtig zu verstehen, dass es eine große Aufgabe ist, herauszufinden, ob ein Kandidat einen Rechtschreibfehler begangen hat.
Rechtschreibfehler werden grob in Nichtwortfehler (NWE) und Echtwortfehler (RWE) eingeteilt. Wenn die falsch geschriebene Zeichenfolge ein gültiges Wort in der Sprache ist, wird sie RWE genannt, andernfalls handelt es sich um NWE.
-- Monojit Choudhury et. al. (2007)
Dieses Paket konzentriert sich derzeit auf die Korrektur von Wort- oder Nichtwortfehlern (Out of Vocabulary, OOV) mithilfe des BERT-Modells. Die Idee bei der Verwendung von BERT bestand darin, den Kontext bei der OOV-Korrektur zu verwenden. Um dieses Paket zu verbessern, möchte ich die Funktionalität zur Identifizierung von RWE erweitern, das Paket optimieren und die Dokumentation verbessern.
Das Paket kann mit pip installiert werden. Sie benötigen Python 3.6+
pip install contextualSpellCheck
Hinweis: Informationen zur Verwendung in anderen Sprachen finden Sie im 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.'
Oder Sie können die spaCy-Pipeline manuell hinzufügen!
>> > 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 .
Nachdem Sie der Pipeline contextual spellchecker
hinzugefügt haben, können Sie die Pipeline normal verwenden. Auf die Vorschläge zur Rechtschreibprüfung und andere Daten kann über Erweiterungen zugegriffen werden.
>> > 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 : []}
Um die Verwendung zu vereinfachen, bietet contextual spellchecker
benutzerdefinierte Spacy-Erweiterungen, die Ihr Code nutzen kann. Dadurch wird es für den Benutzer einfacher, an die gewünschten Daten zu gelangen. contextualSpellCheck bietet Erweiterungen auf doc
, span
und token
Ebene. Die folgenden Tabellen fassen die Erweiterungen zusammen.
spaCy.Doc
-EbeneVerlängerung | Typ | Beschreibung | Standard |
---|---|---|---|
doc._.contextual_spellCheck | Boolean | Um zu prüfen, ob contextualSpellCheck als Erweiterung hinzugefügt wird | True |
doc._.performed_spellCheck | Boolean | Um zu überprüfen, ob contextualSpellCheck Rechtschreibfehler erkannt und eine Korrektur durchgeführt hat | False |
doc._.suggestions_spellCheck | {Spacy.Token:str} | Wenn Korrekturen durchgeführt werden, wird die Zuordnung des Rechtschreibfehler-Tokens ( spaCy.Token ) zum vorgeschlagenen Wort ( str ) zurückgegeben. | {} |
doc._.outcome_spellCheck | str | korrigierter Satz ( str ) als Ausgabe | "" |
doc._.score_spellCheck | {Spacy.Token:List(str,float)} | Wenn Korrekturen identifiziert werden, wird die Zuordnung des Rechtschreibfehler-Tokens ( spaCy.Token ) mit den vorgeschlagenen Wörtern ( str ) und der Wahrscheinlichkeit dieser Korrektur zurückgegeben | None |
spaCy.Span
-Level-ErweiterungenVerlängerung | Typ | Beschreibung | Standard |
---|---|---|---|
span._.get_has_spellCheck | Boolean | Um zu überprüfen, ob contextualSpellCheck in diesem Zeitraum Rechtschreibfehler erkannt und eine Korrektur durchgeführt hat | False |
span._.score_spellCheck | {Spacy.Token:List(str,float)} | Wenn Korrekturen identifiziert werden, wird die Zuordnung des Rechtschreibfehler-Tokens ( spaCy.Token ) mit den vorgeschlagenen Wörtern ( str ) und der Wahrscheinlichkeit dieser Korrektur für Token in diesem span zurückgegeben | {spaCy.Token: []} |
spaCy.Token
-EbeneVerlängerung | Typ | Beschreibung | Standard |
---|---|---|---|
token._.get_require_spellCheck | Boolean | Um zu überprüfen, ob contextualSpellCheck Rechtschreibfehler erkannt und eine Korrektur für dieses token durchgeführt hat | False |
token._.get_suggestion_spellCheck | str | Wenn Korrekturen durchgeführt werden, wird das vorgeschlagene Wort zurückgegeben ( str ) | "" |
token._.score_spellCheck | [(str,float)] | Wenn Korrekturen identifiziert werden, werden vorgeschlagene Wörter ( str ) und die Wahrscheinlichkeit ( float ) dieser Korrektur zurückgegeben | [] |
Derzeit gibt es eine einfache GET-API, die Ihnen den Einstieg erleichtert. Sie können die App lokal ausführen und damit spielen.
Abfrage: Sie können den Endpunkt http://127.0.0.1:5000/?query=YOUR-QUERY verwenden. Hinweis: Ihr Browser kann die Textkodierung verarbeiten
GET Request: http://localhost:5000/?query=Income%20was%20$9.4%20milion%20compared%20to%20the%20prior%20year%20of%20$2.7%20milion.
Antwort:
{
"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
an Wenn Ihnen das Projekt gefällt, bitte ⭑ das Projekt und zeigen Sie Ihre Unterstützung! Auch wenn Sie das Gefühl haben, dass das aktuelle Verhalten nicht Ihren Erwartungen entspricht, können Sie gerne ein Problem melden. Wenn Sie bei einer der oben genannten Aufgaben helfen können, öffnen Sie bitte eine PR mit den erforderlichen Änderungen an Dokumentation und Tests.
Wenn Sie contextualSpellCheck in Ihrer wissenschaftlichen Arbeit verwenden, erwägen Sie bitte, die Bibliothek mithilfe des folgenden BibTex-Eintrags zu zitieren:
@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 }
}
Nachfolgend sind einige der Projekte/Arbeiten aufgeführt, auf die ich mich bei der Entwicklung dieses Pakets bezogen habe