- pyspellchecker 0.7.2
- Installation
- Quickstart
- Non-English Dictionaries
- Dictionary Creation and Updating
- Additional Methods
- The following are less likely to be needed by the user but are available:
- Credits
- Как проверить правописание с помощь Python pyenchant?
- Проверка орфографии в Python
- Введение
- Установка библиотеки PySpellChecker
- Проверка правописания слова
- Проверка предложения на орфографические ошибки
- Заключение
pyspellchecker 0.7.2
Pure Python Spell Checking based on Peter Norvig’s blog post on setting up a simple spell checking algorithm.
It uses a Levenshtein Distance algorithm to find permutations within an edit distance of 2 from the original word. It then compares all permutations (insertions, deletions, replacements, and transpositions) to known words in a word frequency list. Those words that are found more often in the frequency list are more likely the correct results.
pyspellchecker supports multiple languages including English, Spanish, German, French, Portuguese, Arabic and Basque. For information on how the dictionaries were created and how they can be updated and improved, please see the Dictionary Creation and Updating section of the readme!
pyspellchecker supports Python 3
pyspellchecker allows for the setting of the Levenshtein Distance (up to two) to check. For longer words, it is highly recommended to use a distance of 1 and not the default 2. See the quickstart to find how one can change the distance parameter.
Installation
The easiest method to install is using pip:
pip install pyspellchecker
git clone https://github.com/barrust/pyspellchecker.git pyspellchecker -m build
For python 2.7 support, install release 0.5.6 but note that no future updates will support python 2.
Quickstart
After installation, using pyspellchecker should be fairly straight forward:
If the Word Frequency list is not to your liking, you can add additional text to generate a more appropriate list for your use case.
If the words that you wish to check are long, it is recommended to reduce the distance to 1. This can be accomplished either when initializing the spell check class or after the fact.
Non-English Dictionaries
pyspellchecker supports several default dictionaries as part of the default package. Each is simple to use when initializing the dictionary:
The currently supported dictionaries are:
- English — ‘en’
- Spanish — ‘es’
- French — ‘fr’
- Portuguese — ‘pt’
- German — ‘de’
- Russian — ‘ru’
- Arabic — ‘ar’
- Basque — ‘eu’
- Latvian — ‘lv’
Dictionary Creation and Updating
The creation of the dictionaries is, unfortunately, not an exact science. I have provided a script that, given a text file of sentences (in this case from OpenSubtitles) it will generate a word frequency list based on the words found within the text. The script then attempts to *clean up* the word frequency by, for example, removing words with invalid characters (usually from other languages), removing low count terms (misspellings?) and attempts to enforce rules as available (no more than one accent per word in Spanish). Then it removes words from a list of known words that are to be removed. It then adds words into the dictionary that are known to be missing or were removed for being too low frequency.
The script can be found here: scripts/build_dictionary.py` . The original word frequency list parsed from OpenSubtitles can be found in the `scripts/data/` folder along with each language’s include and exclude text files.
Any help in updating and maintaining the dictionaries would be greatly desired. To do this, a discussion could be started on GitHub or pull requests to update the include and exclude files could be added.
Additional Methods
On-line documentation is available; below contains the cliff-notes version of some of the available functions:
correction(word) : Returns the most probable result for the misspelled word
candidates(word) : Returns a set of possible candidates for the misspelled word
known([words]) : Returns those words that are in the word frequency list
unknown([words]) : Returns those words that are not in the frequency list
word_probability(word) : The frequency of the given word out of all words in the frequency list
The following are less likely to be needed by the user but are available:
edit_distance_1(word) : Returns a set of all strings at a Levenshtein Distance of one based on the alphabet of the selected language
edit_distance_2(word) : Returns a set of all strings at a Levenshtein Distance of two based on the alphabet of the selected language
Credits
- Peter Norvig blog post on setting up a simple spell checking algorithm
- P Lison and J Tiedemann, 2016, OpenSubtitles2016: Extracting Large Parallel Corpora from Movie and TV Subtitles. In Proceedings of the 10th International Conference on Language Resources and Evaluation (LREC 2016)
Как проверить правописание с помощь Python pyenchant?
Даже очень грамотный человек может сделать опечатку в слове или допустить нелепую ошибку. Этот факт не всегда остаётся замеченным при перепроверке. Использование специализированных инструментов может обеспечить корректность текстов без прямого участия человека.
Рассмотрим вопрос применения модуля Python pyenchant для обнаружения ошибок в словах и возможность их исправления.
При подготовке различной текстовой документации, договоров, отчётов и т.д. важно соблюдать правописание. Используемые в настоящее время программные средства, в частности MS Office Word, подсвечивают слова, в которых допущены ошибки. Это очень удобно и, что немаловажно, наглядно.
Но нам может понадобиться автоматизировать обнаружение ошибок в текстах при отсутствии упомянутых выше программных средств. Либо, при их наличии, делать это, не открывая документ/множество документов. Или же искомый текст может быть попросту очень длинным, его проверка займёт много времени.
На помощь приходят небезызвестный язык программирования Python и модуль pyenchant, который не только позволяет проверять правописание слов, но и предлагает варианты исправления.
Для установки модуля используется стандартная команда:
Код для проверки правописания слова довольно прост:
import enchant # при импроте пишем именно enchant (не pyenchant) dictionary = enchant.Dict(«en_US») print(dictionary.check(«driver»))
Намеренно допустим ошибку в проверяемом слове:
Мы можем вывести список возможных исправлений слова:
Вывод: [‘driver’, ‘drainer’, ‘Rivera’]
Читатель скорее всего заинтересуется, предоставляет ли модуль возможность проверять правописание слов русского языка, и ответ – да. Однако, по умолчанию это недоступно, нам нужен словарь. Он может быть найден, например, в пакете LibreOffice по пути его установки:
Здесь нам нужны два файла: «ru_RU.aff» и «ru_RU.dic». Их необходимо разместить в папке модуля enchant, где хранятся словари для других языков по пути
Теперь, при создании объекта Dict достаточно передать строку «ru_RU», и мы сможем работать со словами русского языка.
Вернёмся к нашему примеру с ошибочно написанным словом driver. При помощи метода suggest() мы получили список возможных исправлений, и вручную мы конечно же легко сможем выбрать нужный вариант.
Но что, если мы хотим автоматизировать и этот процесс?
Давайте использовать модуль Python difflib, который позволяет сравнивать строковые последовательности. Попробуем выбрать из списка слово «driver»:
import enchant import difflib woi = «draiver» sim = dict() dictionary = enchant.Dict(«en_US») suggestions = set(dictionary.suggest(woi)) for word in suggestions: measure = difflib.SequenceMatcher(None, woi, word).ratio() sim[measure] = word print(«Correct word is:», sim[max(sim.keys())])
Немного прокомментируем код. В словаре sim будут храниться значения степеней сходства (диапазон от 0 до 1) предложенных методом suggest() класса Dict слов с искомым словом («draiver»). Данные значения мы получаем в цикле при вызове метода ratio() класса SequenceMatcher и записываем в словарь. В конце получаем слово, которое максимально близко к проверяемому.
Вывод: Correct word is driver
Выше мы работали с отдельными словами, но будет полезно разобраться, как работать с целыми блоками текста. Для этой задачи нужно использовать класс SpellChecker:
from enchant.checker import SpellChecker checker = SpellChecker(«en_US») checker.set_text(«I have got a new kar and it is ameizing.») print([i.word for i in checker])
Как видно, это не сложнее работы с отдельными словами. Кроме того, класс SpellChecker предоставляет возможность использовать фильтры, которые будут игнорировать особые последовательности, не являющиеся ошибочными, например, адрес электронной почты. Для этого необходимо импортировать класс или классы фильтров, если их несколько, и передать список фильтров параметру filters классу SpellChecker:
from enchant.checker import SpellChecker from enchant.tokenize import EmailFilter, URLFilter checker_with_filters = SpellChecker(«en_US», filters=[EmailFilter]) checker_with_filters.set_text(«Hi! My neim is John and thiz is my email: johnnyhatesjazz@gmail.com.») print([i.word for i in checker_with_filters])
Как видно, адрес электронной почты не был выведен в качестве последовательности, содержащей ошибки в правописании.
Таким образом, комбинируя возможности модулей enchant и difflib, мы можем получить действительно мощный инструмент, позволяющий не только обнаруживать ошибки, но и подбирать варианты исправления с довольно высокой точностью, а также вносить эти исправления в текст.
Следующая статья: как правильно забивать гвозди микроскопом
Может не догоняю чего то. Но есть же Word, подчеркнёт все что надо
Говоря о pyenchant, мы подразумеваем прежде всего автоматизацию, например, это может быть подготовка текстовых данных для машинного обучения. При работе с машинным обучением важна чистота данных, сами данные могут храниться в большом количестве простых текстовых файлах. Довольно затратно будет копировать тексты из каждого файла в документ Word и вручную просматривать все подчёркнутые слова. Также pyenchant может пригодиться при разработке приложения для полностью автоматического поиска и/или исправления «ошибочных» слов: загрузил «грязный» документ, получил «чистый».
В статье освещаем инструмент, который может быть полезен в работе. От Word и других аналогичных программ не предлагаем отказываться.
Проверка орфографии в Python
Статьи
Введение
В статье напишем код небольшой программы для проверки орфографии при помощи языка программирования Python.
Установка библиотеки PySpellChecker
PySpellChecker – это библиотека Python, которая позволяет проверять орфографию на различных языках, включая русский. Она использует словарь слов Aspell для проверки правописания и поддерживает проверку орфографии.
Для установки библиотеки нужно перейти в терминал, или же командную строку, прописать pip install pyspellchecker, нажать Enter и ждать установки. После инсталляции модуля мы импортируем из него класс SpellChecker:
from spellchecker import SpellChecker
Проверка правописания слова
Инициализируем класс SpellChecker и укажем русский язык:
from spellchecker import SpellChecker spell = SpellChecker(language='ru')
Дадим пользователю возможность ввести проверяемое слово:
from spellchecker import SpellChecker spell = SpellChecker(language='ru') word = input("Введите слово для проверки орфографии: ")
Зададим условие, в котором при помощи метода correction() проверим правильность написания слова. Если слово написано верно, то выведем соответствующее сообщение в консоль, если нет, то укажем на ошибку и выведем возможные варианты правильного написания слова:
from spellchecker import SpellChecker spell = SpellChecker(language='ru') word = input("Введите слово для проверки орфографии: ") if spell.correction(word) == word: print("Слово написано верно!") else: print("Ошибка в написании слова") print("Возможные варианты:") print(spell.candidates(word)) # Ввод: Приет # Вывод: # Ошибка в написании слова # Возможные варианты: #
Проверка предложения на орфографические ошибки
Создадим экземпляр класса SpellChecker, после чего в переменную text сохраним текст с орфографической ошибкой:
from spellchecker import SpellChecker spell = SpellChecker(language='ru') text = 'Эта фраза содержит орфографическую ошибку'
Далее при помощи метода unknown() извлечём слова, в которых предположительно находится ошибка и сохраним их в mistakes:
from spellchecker import SpellChecker spell = SpellChecker(language='ru') text = 'Эта фраза содержит орфографическую ошибку' mistakes = spell.unknown(text.split())
Создадим цикл, в котором пройдёмся по предположительно неверно написанным словам. Внутри цикла выведем эти слова, и возможное правильное их написание:
from spellchecker import SpellChecker spell = SpellChecker(language='ru') text = 'Это предлжение содержт ошибку' mistakes = spell.unknown(text.split()) for mistake in mistakes: print(f'Ошибка: "" \nПравильное написание: ') # Вывод: # Ошибка: "предлжение" # Правильное написание: предложение # Ошибка: "содержт" # Правильное написание: содержит
Заключение
В ходе статьи мы с Вами научились проверять текст на наличие орфографических ошибок. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂