This is the fifth part of the “Rebuilding the spellchecker” series, dedicated to explaining how the world’s most popular spellchecker Hunspell works.

Image for post
Image for post

Today, we talk about edit-based suggestions.

Quick recap: The first part described what Hunspell is; and why I decided to rewrite it in Python. In the second and the third parts, we’ve talked about lookup: checking the word’s correctness.

The fourth part introduced suggest, an algorithm for search for corrections. We described that Hunspell performs suggest in two main stages:

  1. Generate edits and test them for the correctness
  2. (If the first stage didn’t produce good enough results) Search…


This is the fourth part of the “Rebuilding the spellchecker” series, dedicated to explaining how the world’s most popular spellchecker Hunspell works.

Image for post
Image for post
© zimmytws (depositphotos)

Today’s topic is suggest!

Quick recap:

  1. In the first part, I’ve described what Hunspell is; and why I decided to rewrite it in Python. It is an explanatory rewrite dedicated to uncovering the knowledge behind the Hunspell by “translating” it into a high-level language, with a lot of comments.
  2. In the second part, I’ve covered the basics of the lookup (word correctness check through the dictionary) algorithm, including affix compression.
  3. In the third part, the rest of the…


Image for post
Image for post
© belchonok (Depositphotos)

This is the third part of the “Rebuilding the spellchecker” series, dedicated to the explanation of how the world’s most popular spellchecker Hunspell works.

Quick recap:

  1. In the first part, I’ve described what Hunspell is; and why I decided to rewrite it in Python. It is an explanatory rewrite dedicated to uncovering the knowledge behind the Hunspell by “translating” it into a high-level language, with a lot of comments.
  2. In the second part I’ve covered the basics of the lookup (word correctness check through the dictionary) algorithm, including affix compression.

This part is a carry-over of lookup algorithm explanation, dedicated…


Image for post
Image for post

This is the second part of the “Rebuilding the spellchecker” series, dedicated to the explanation of how the world’s most popular spellchecker Hunspell works. Initially published in the personal blog.

Quick recap: In the first part, I’ve described what Hunspell is; and why I decided to rewrite it in Python. It is an explanatory rewrite dedicated to uncovering the knowledge behind the Hunspell by “translating” it into a high-level language, with a lot of comments.

Now, let’s dive into how the stuff really works!

There are two main parts of word-by-word spellchecker algorithms:

  1. Check if a word is correct: “lookup”


Image for post
Image for post
© Lamai Prasitsuwan (Shutterstock)

How I decided to write a spellchecker and almost died trying

Originally published at zverok’s blog

A few years ago I had a fun idea for a “weekend project”: a pure-Ruby spellchecker. Ruby is my language of choice, and no-dependencies spellchecker seemed a small useful tool for the CI environment: for example, to check comments/docs spelling without installing any third-party software. I actually could’ve pulled out the project in its limited scope (only English, only spot misspelled words without fixing, limited dictionary) with just a flat list of known words, but that’s not what happened.

Meet the Hunspell

Back then, I decided to make a moderately generic tool, at least able to work with…


Image for post
Image for post

Ровно год назад мы сделали виртуальный Фестиваль Не здесь, он был забавный. И хотя в этом году на повторение события не хватило времени, сил и прочих ресурсов — в сентябре 2016-го Фестиваль Не здесь обязательно будет. А пока хочется рассказать, что это было и как это было.

Задумка

Идея появилась как-то в январе 2014-го. Сейчас тяжело объяснить откуда или почему, но она возникла как-то сразу и целиком: чтение стихов вслух, автором — зачастую способ лучше их услышать и понять; видеозаписывающие устройства «домашнего качества» сейчас есть почти у всех; привычка воспринимать такое видео с собственного экрана — тоже. …


Что говорит Терминатор (и чего он не говорит) / В тексте действительно дофига спойлеров (rather all of them), beware.

Короткое вступление: не очень видно смысл рассуждать о кине с точки зрения хорошее оно или плохое («понравилось»/«не понравилось»). Мне представляется, что современные мейнстримные голливудские фильмы можно исследовать — на обывательском уровне — как разновидность фольклора: что и как авторы пытались рассказать, чтобы окупить бюджет (= чтобы понравилось соплеменникам) в большей степени рассказывает нам о соплеменниках, нежели об авторах.

Канон: будем честны, в него входит только и исключительно «Терминатор-2: Судный день» — широкое и жёсткое полотно о живых и сложных людях, которые…


Этот текст написан ради демонстрации простой мысли: всякому тексту нужна карта, и хорошо бы появились инструменты для автоматического и ручного построения таких карт.

Начнём с общего примера: мы читаем некоторый текст и хотим в нём как-то ориентироваться. В какой мы части? какие ещё части есть? как эти части связаны? где вокруг нас «более интересующие» части текста?..

Такая потребность более характерна для чтения нон-фикшн текстов, когда цель читателя — сориентироваться в новой области, прояснить связь фактов, наскоро заполнить дыры в понимании обширной темы. Но и художественному тексту карта зачастую нужна и полезна.

Где карты?

Если текст — территория «путешествия» (или «освоения»), то какие…

Victor Shepelev

Writing in human (en/ru/ukr) and programming (rb/py/…) languages . Open source, open data, texts processing, text authoring. And stuff.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store