Файл: Основы проектирования программ. Этапы создания программного обеспечения..pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.04.2023

Просмотров: 40

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

2.3 Проверка качества работы корректора Питера Норвига.

Листинг корректора, реализованный на языке программирования Pithon представлен в Приложении 1.

Чтобы проверить качество модели, нужно сгенерировать список ошибок. Для этого возьмем исходный словарь и сделаем в нем ошибку (удалим, заменим, вставим, транспонируем букву в слове). Это будет список ошибок глубиной 1.

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

Ncorrect/N, где

Ncorrect — кол-во правильных исправлений,

N- общее число слов для проверки.

Листинги программ для для генерации ошибок в слове и проверки качества корректора, реализованные на языке программирования Pithon, представлены в приложениях 2 и 3 соответственно.

2.4 Результаты проверки качества работы корректора.

Для проверки качества работы корректора в качестве словаря был выбран рассказ, состоящий из 11 174 слов. Количество уникальных слов в тексте – 3 009. Для слов с одной ошибкой частота правильных исправлений ~ 95%. Для слов с двумя ошибками частота правильных исправлений ~ 76%. Скорость работы для слов с одной ошибкой ~ 3823 слова в секунду. Скорость работы для слов с двумя ошибками ~ 9 слов в секунду.

Как видно из результатов проверки, корректор довольно точно и быстро находит правильное исправление для слова, в котором одна ошибка. Однако если в слове две ошибки, качество и скорость корректора падают очень.

Рассмотрим достоинства и недостатки данного корректора:

Достоинства:

  1. Относительно простая реализация.
  2. Неплохое качество модели.

Недостатки:

  1. В подавляющем большинстве случаев работает очень медленно (несколько секунд для одного слова). Это может сказаться на качестве в онлайн использовании, где необходимо исправить ошибку за миллисекунды.
  2. Данный корректор исправляет лишь одно слово за раз, то есть он не учитывает контекст между словами в строке.
  3. Для качественной работы, требуется объемный словарь.

ЗАКЛЮЧЕНИЕ

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

В настоящие время, во многих поисковых системах используется неявный поиск в тексте, связанный с ошибками в запросах пользователей. В результате выполнения работы был реализован корректор Питера Норвига. Данный корректор работает довольно точно, однако для применения онлайн он мало пригоден.

БИБЛИОГРАФИЯ

  1. Большакова, Е.И. Автоматическая обработка текстов на естественном языке и анализ данных: учеб. пособие/ Е.И. Большакова [и др.] — М.: Изд-во НИУ ВШЭ, 2017. — 269 с.
  2. Черненький В.М. Методика идентификации пассажира по установочным данным/ В.М. Черненький, Ю. Е. Гапанюк// Инженерный журнал: наука и инновации .— 2012 .— №3
  3. Сходство Джаро — Винклера // Википедия. [2018—2018]. Дата обновления: 25.04.2018. URL: https://ru.wikipedia.org/?oldid=92306663 (дата обращения: 25.04.2018).
  4. Расстояние Хэмминга // Википедия. [2018—2018]. Дата обновления: 12.04.2018. URL: https://ru.wikipedia.org/?oldid=92055373 (дата обращения: 12.04.2018)

Приложение 1

Листинг программы «корректор Питера Норвига»

import re

from collections import Counter

#заполнение словаря

def words(text): return re.findall(r'\w+', text.lower())

WORDS = Counter(words(open('slovar.txt').read()))

#вероятность появления слова

def P(word, N=sum(WORDS.values())):

return WORDS[word] / N

#функция корекции слова

def correction(word):

return max(candidates(word), key=P)

#просмотр кандидатов

def candidates(word):

return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])

#функция определения множества знакомых слов

def known(words):

return set(w for w in words if w in WORDS)

#функция создающая все возможные преобразования слова с глубиной 1

def edits1(word):

letters = 'йцукенгшщзхъфывапролджэячсмитьбю'

splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]

deletes = [L + R[1:] for L, R in splits if R]

transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]

replaces = [L + c + R[1:] for L, R in splits if R for c in letters]

inserts = [L + c + R for L, R in splits for c in letters]

return set(deletes + transposes + replaces + inserts)

#функция создающая все возможные преобразования слова с глубиной 1

def edits2(word):

return (e2 for e1 in edits1(word) for e2 in edits1(e1))