Контекстная проверка слов для получения лучших предложений
Важно понимать, что определить, есть ли у кандидата орфографическая ошибка, — большая задача.
Орфографические ошибки в широком смысле подразделяются на несловные ошибки (NWE) и настоящие словесные ошибки (RWE). Если строка с ошибкой является допустимым словом в языке, то она называется RWE, в противном случае — NWE.
-- Моноджит Чоудхури и др. ал. (2007)
В настоящее время этот пакет ориентирован на исправление ошибок в словах или несловах (NWE) за пределами словаря (OOV) с использованием модели 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
Расширение | Тип | Описание | По умолчанию |
---|---|---|---|
token._.get_require_spellCheck | Boolean | Чтобы проверить, выявила ли contextualSpellCheck какие-либо ошибки и выполнила ли исправление этого token | False |
token._.get_suggestion_spellCheck | str | если исправления выполнены, возвращается предложенное слово ( str ) | "" |
token._.score_spellCheck | [(str,float)] | если исправления обнаружены, он возвращает предложенные слова ( str ) и вероятность ( float ) этого исправления. | [] |
В настоящее время существует простой API 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 }
}
Ниже приведены некоторые проекты/работы, на которые я ссылался при разработке этого пакета.