Создаем автокорректор текста на Python (аналог т9). Работаем с пакетом nltk. |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2022-03-20 12:35 Библиотека NLTK, или NLTK, — пакет библиотек и программ для символьной и статистической обработки естественного языка. Эта статья поможет вам создать простую программу автокоррекции тектса на python. Этот проект заключается в создании двух разных рекомендательных систем правописания, которые смогут принимать входные данные пользователя и рекомендовать правильно написанное слово. Звучит круто! Natural Language Toolkit nltk расшифровывается как Natural Language Toolkit, и всю информацию о возможностях данной библиотеки можно сделать, можно найти здесь. В частности, мы будем использовать методы: words, edit_distance, jaccard_distance и ngrams. edit_distance, jaccard_distance относятся к функциям-метрикам, которые будут использоваться для определения слова, наиболее похожего на ввод пользователя. N-грамма — это непрерывная последовательность из n элементов заданного слова текста или речи. Например: «Белый дом» является биграммой и не означает в прямом смысле дом белого цвета. Кроме того, мы также будем использовать pandas для работы с данными. import nltk words.words() дает список правильно написанных слов, который был включен в библиотеку nltk . spellings_series — это проиндексированный список этих слов. correct_spellings = words.words() spellings_series = pandas.Series(correct_spellings) spellings_series Метрика: расстояние Жаккара Это мера того, насколько непохожи два набора, я попытался объяснить это простым языком ниже: Рассматриваемая строка будет итеративно сравниваться с каждым словом в spellings_series. Расстояние Жаккара обычно используется для вычисления матрицы размера n x n для кластеризации и многомерного масштабирования n наборов выборок. Это расстояние является метрикой на совокупности всех конечных множеств. d ? (A, B) = 1 - J ? (A, B) Расстояние Жаккара является мерой того, насколько непохожи два набора сдлва, и может быть найдено как дополнение к индексу Жаккара (т. е. расстояние Жаккара = 100% - индекс Жаккара). Мы собираемся использовать пустой список с циклом for для итеративного перебора всех слов со списком spellings_series. Функция jaccard будет принимать аргументы entries and gram_number, где entries относятся к рассматриваемым словам, а gram_number устанавливает количество используемых n-грамм (подробнее здесь). N-грамма — последовательность из n элементов. С семантической точки зрения, это может быть последовательность звуков, слогов, слов или букв. На практике чаще встречается N-грамма как ряд слов, устойчивые словосочетания называют коллокацией. Последовательность из двух последовательных элементов часто называют биграмма, последовательность из трёх элементов называется триграмма. Не менее четырёх и выше элементов обозначаются как N-грамма, N заменяется на количество последовательных элементов. Spellings создаст список возможных слов на основе первой буквы строки. Использование этой функции предполагает, что первая буква не напечатана неправильно. Далее, Distances будет итеративно вычислять соответствующие расстояния Жаккара для слов в написании с помощью встроенной функции jaccard_distance. Наконец, closest даст результирующее слово с лучшим соответствием через функцию min на расстояниях. Затем это слово будет добавлено в список результатов, и этот список будет возвращен после завершения работы функции. def jaccard(entries, gram_number): Теперь, с нашей замечательной новой функцией жаккарда, мы можем создать рекомендатель слов(аналог т9), JDreco. Эта функция по умолчанию принимает список строк «cormulent», «incidence», «validrate» и возвращает предлагаемый список слов. def JDreco(entries=['cormulent', 'incendenece', 'validrate']): Поздравляем, Ваша первая рекомендательная модель готова! Метрика: редактирования расстояние , также известное как расстояние Левенштейна. Расстояние Левенштейна (редакционное расстояние, дистанция редактирования) — метрика, измеряющая по модулю разность между двумя последовательностями символов. Она определяется как минимальное количество односимвольных операций (а именно вставки, удаления, замены), необходимых для превращения одной последовательности символов в другую. В общем случае, операциям, используемым в этом преобразовании, можно назначить разные цены. Широко используется в теории информации и компьютерной лингвистике. Этот метод оценивает, насколько непохожи две строки, на основе минимального количества операций, необходимых для преобразования одной строки в другую. Как и раньше, эта функция по умолчанию будет принимать тот же список слов, что и в первой программе. Функция итеративно сравнивает записи со списком правильных слов и возвращает Расстояние Левенштейна Затем слово с наименьшим расстоянием будет считаться наиболее правильным словом. def editreco(entries=['cormulent', 'incendenece', 'validrate']): Вторая рекомендованная модель завершена! Ввод пользователя Теперь давайте запустим наши модели в работу. Мы попробуем составить список из 3 слов: версия с ошибкой “Three words please”— «threa woeds pleese», посмотрим, как пойдет. В приведенном ниже коде пользователю предлагается ввести три отдельных слова для создания пользовательского ввода списка. userinput = [] Вывод 1 программы : результата вывода ‘thread’, ‘woe’, ‘plea’. JDreco(userinput) Вывод 2 программы : результата вывода ‘tarea’, ‘Moed’, ‘please’ editreco(userinput) Дальнейшие улучшения Результаты были так далеки от того, что я ожидал! Похоже, что editreco работает лучше, правильно предлагая «пожалуйста», по сравнению с JDreco. Это происходити в основном потому, что алгоритм в настоящее время слишком «механический» и оценивает слова исключительно по отдельным буквам. Я считаю, что это показывает, что создание автозамены на уровне Google определенно потребует много времени и усилий. Некоторые будущие улучшения, которые я буду делать , которые улучшит предложения, будут учитывать грамматику и семантику слов с помощью популярного средства машинного обучения Pytorch. Спасибо за внимание! https://t.me/ai_machinelearning_big_data - лучший ресурс для изучения машинного обучения https://t.me/pythonl - канал для изучения Python Источник: zen.yandex.ru Комментарии: |
|