Файл: Основы проектирования программ. Этапы создания программного обеспечения..pdf
Добавлен: 25.04.2023
Просмотров: 47
Скачиваний: 5
СОДЕРЖАНИЕ
1.1 Задачи обработки текста на естественном языке
1.2 Подходы решения задач обработки текста на естественном языке
2.1 Математическая модель работы корректора слова
2.2 Принцип работы корректора Питера Норвига
2.3 Проверка качества работы корректора Питера Норвига.
2.3 Проверка качества работы корректора Питера Норвига.
Листинг корректора, реализованный на языке программирования Pithon представлен в Приложении 1.
Чтобы проверить качество модели, нужно сгенерировать список ошибок. Для этого возьмем исходный словарь и сделаем в нем ошибку (удалим, заменим, вставим, транспонируем букву в слове). Это будет список ошибок глубиной 1.
Так же составим список ошибок глубиной 2 (две ошибки в слове). Для каждого слова с ошибкой, запомним правильное написание слова. После чего введем слово с ошибкой в корректор и посчитаем частоту правильных исправлений. Данная частота считается следующим образом:
Ncorrect/N, где
Ncorrect — кол-во правильных исправлений,
N- общее число слов для проверки.
Листинги программ для для генерации ошибок в слове и проверки качества корректора, реализованные на языке программирования Pithon, представлены в приложениях 2 и 3 соответственно.
2.4 Результаты проверки качества работы корректора.
Для проверки качества работы корректора в качестве словаря был выбран рассказ, состоящий из 11 174 слов. Количество уникальных слов в тексте – 3 009. Для слов с одной ошибкой частота правильных исправлений ~ 95%. Для слов с двумя ошибками частота правильных исправлений ~ 76%. Скорость работы для слов с одной ошибкой ~ 3823 слова в секунду. Скорость работы для слов с двумя ошибками ~ 9 слов в секунду.
Как видно из результатов проверки, корректор довольно точно и быстро находит правильное исправление для слова, в котором одна ошибка. Однако если в слове две ошибки, качество и скорость корректора падают очень.
Рассмотрим достоинства и недостатки данного корректора:
Достоинства:
- Относительно простая реализация.
- Неплохое качество модели.
Недостатки:
- В подавляющем большинстве случаев работает очень медленно (несколько секунд для одного слова). Это может сказаться на качестве в онлайн использовании, где необходимо исправить ошибку за миллисекунды.
- Данный корректор исправляет лишь одно слово за раз, то есть он не учитывает контекст между словами в строке.
- Для качественной работы, требуется объемный словарь.
ЗАКЛЮЧЕНИЕ
На сегодняшний день компьютерная лингвистика достигла довольно высоких результатов в создании различных приложений по автоматической обработке текстов на естественном языке. Дальнейшее ее развитие зависит и от разработки новых приложений, и от независимой разработки различных моделей языка.
В настоящие время, во многих поисковых системах используется неявный поиск в тексте, связанный с ошибками в запросах пользователей. В результате выполнения работы был реализован корректор Питера Норвига. Данный корректор работает довольно точно, однако для применения онлайн он мало пригоден.
БИБЛИОГРАФИЯ
- Большакова, Е.И. Автоматическая обработка текстов на естественном языке и анализ данных: учеб. пособие/ Е.И. Большакова [и др.] — М.: Изд-во НИУ ВШЭ, 2017. — 269 с.
- Черненький В.М. Методика идентификации пассажира по установочным данным/ В.М. Черненький, Ю. Е. Гапанюк// Инженерный журнал: наука и инновации .— 2012 .— №3
- Сходство Джаро — Винклера // Википедия. [2018—2018]. Дата обновления: 25.04.2018. URL: https://ru.wikipedia.org/?oldid=92306663 (дата обращения: 25.04.2018).
- Расстояние Хэмминга // Википедия. [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))