Автоматическая проверка правописания слов в тексте - PullRequest
2 голосов
/ 02 декабря 2008

[EDIT] Короче говоря: Как бы вы написали автоматическую проверку орфографии? Идея состоит в том, что средство проверки создает список слов из известного хорошего источника (словарь) и автоматически добавляет новые слова, когда они используются достаточно часто. Слова, которые не использовались какое-то время, следует исключить. Поэтому, если я удаляю часть сцены, которая содержит «Mungrohyperiofier», контролер должен помнить об этом некоторое время, а когда я набираю «Mung » в другой сцене, он должен предложить ее снова. Если я не использую это слово, скажем, несколько дней, оно должно забыть об этом.

В то же время я бы хотел избежать опечаток в словаре. [/ EDIT]

Я хочу написать текстовый редактор для рассказов SciFi. Редактор должен предлагать завершение слова для любого слова, используемого в любом месте текущей истории. Для редактирования будет предложена только одна сцена истории (так что вы можете легко перемещать сцены).

Это означает, что у меня есть три комплекта:

  1. Набор всех слов во всех других сценах
  2. Набор слов в текущей сцене до Я начал его редактировать
  3. Набор слов в текущем редакторе

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

Когда пользователь редактирует сцену, мы имеем следующие ситуации:

  1. Она удаляет слово. Это слово больше нигде не используется в текущей сцене.
  2. Она печатает новое слово
  3. Она набирает слово, которое уже существует
  4. Она печатает слово, которое уже существует, но делает опечатку
  5. Она исправляет опечатку в слове из набора № 2.
  6. Она исправляет опечатку в слове из набора № 1 (т. Е. Опечатка тоже в другом месте).
  7. Она удаляет слово, которое она планирует использовать снова. Однако после удаления слово больше не входит в наборы № 1 и № 3.

Очевидной стратегией будет перестроение наборов слов при сохранении сцены и создание набора № 1 из файла списка слов для каждой сцены.

Итак, мой вопрос: есть ли умная стратегия, чтобы сохранить слова, которые больше нигде не используются, но все же были в состоянии исключить опечатки? Если возможно, эта стратегия должна работать в фоновом режиме, чтобы пользователь даже не заметил, что происходит (т.е. я хочу избежать необходимости хватать мышь, чтобы выбрать «добавить слово в словарь» из меню).

[РЕДАКТИРОВАТЬ] На основе комментария от горе

Ответы [ 3 ]

2 голосов
/ 03 декабря 2008

Итак, вы хотите написать орфографическую проверку. Вот статья Питера Норвига о написании корректора орфографии . Он описывает простой и надежный корректор правописания. Вы можете использовать уже написанную часть книги, а также список ссылок (скажем, из бесплатного словаря) для языковой модели. Я также хотел бы обратиться к существующим программам проверки правописания с открытым исходным кодом, таким как aspell и hunspell , чтобы получить некоторые идеи.

0 голосов
/ 03 декабря 2008

Напоминает мне о том, что мне сказали о сборке мусора в современных реализациях LISP:

данные при создании помещаются в «пул 1»,

когда необходимо собрать мусор, сборщик мусора ищет в пуле 1 неиспользуемые записи и удаляет их.

Затем все оставшиеся записи перемещаются в пул 2.

Пул 2 проверяется только тогда, когда требуется больше памяти, чем может освободить пул 1.

Данные из пула 2, которые выживают при сборке мусора, помещаются в пул 3 и ... и так далее.

Идея состоит в том, чтобы динамически помещать данные в пул, соответствующий их времени жизни ...

0 голосов
/ 02 декабря 2008

Структура, которую вы должны использовать, это три. Сжатие хвоста / суффикса поможет с памятью. Для отслеживания использования вы можете использовать GC для подсчета псевдо-ссылок.

Для реальных узлов вам, вероятно, понадобится не более 32-разрядного целого числа, 21-разрядного для юникода и остальных для различных других тегов и информации.

...