Программа для анализа текстовых файлов
Программные системы анализа текста (САТ, англ. Text processing, TP) позволяют обрабатывать текстовую информацию, позволяя пользователям лучше анализировать настроения клиентов или сотрудников, реализовать актуальную классификацию документов и улучшить текстовый контент.
Сравнение Системы анализа текста
Выбрать по критериям:
IQPLATFORM от Айкумен ИБС
IQPLATFORM – это цифровая аналитическая платформа, позволяет выполнять продвинутую аналитику на базе больших объёмов информации, синтез новых знаний и мониторинг и контроль информационных объектов. Узнать больше про IQPLATFORM
M-Brain Intelligence Plaza от M-Brain
M-Brain Intelligence Plaza – это ИТ-платформа для управления потоками информации о рынках и конкурентах для отделов аналитики, продаж, маркетинга, менеджмента. Хранение в облаке, структурирование и внутрикорпоративная рассылка информации по темам, как: отрасли, компании . Узнать больше про M-Brain Intelligence Plaza
Megaputer PolyAnalyst от Мегапьютер Интеллидженс
PolyAnalyst – это программная платформа визуальной разработки сценариев анализа данных и текстов, а также построения интерактивных отчётов, не требующая навыков программирования для аналитики. Узнать больше про Megaputer PolyAnalyst
Elasticsearch от Elastic NV
Платформа Elasticsearch – это программное обеспечение с открытым исходным кодом, предназначенное для поиска, сбора, анализа и хранения текстовых данных с использованием интеллектуальных алгоритмов. Узнать больше про Elasticsearch
Руководство по покупке Системы анализа текста
Содержание
Что такое Системы анализа текста
Программные системы анализа текста (САТ, англ. Text processing, TP) позволяют обрабатывать текстовую информацию, позволяя пользователям лучше анализировать настроения клиентов или сотрудников, реализовать актуальную классификацию документов и улучшить текстовый контент.
Обзор основных функций и возможностей Системы анализа текста
Администрирование Возможность администрирования позволяет осуществлять настройку и управление функциональностью системы, а также управление учётными записями и правами доступа к системе. Импорт/экспорт данных Возможность импорта и/или экспорта данных в продукте позволяет загрузить данные из наиболее популярных файловых форматов или выгрузить рабочие данные в файл для дальнейшего использования в другом ПО. Многопользовательский доступ Возможность многопользовательской доступа в программную систему обеспечивает одновременную работу нескольких пользователей на одной базе данных под собственными учётными записями. Пользователи в этом случае могут иметь отличающиеся права доступа к данным и функциям программного обеспечения. Наличие API Часто при использовании современного делового программного обеспечения возникает потребность автоматической передачи данных из одного ПО в другое. Например, может быть полезно автоматически передавать данные из Системы управления взаимоотношениями с клиентами (CRM) в Систему бухгалтерского учёта (БУ). Для обеспечения такого и подобных сопряжений программные системы оснащаются специальными Прикладными программными интерфейсами (англ. API, Application Programming Interface). С помощью таких API любые компетентные программисты смогут связать два программных продукта между собой для автоматического обмена информацией. Отчётность и аналитика Наличие у продукта функций подготовки отчётности и/или аналитики позволяют получать систематизированные и визуализированные данные из системы для последующего анализа и принятия решений на основе данных.
Сравнение документов вручную занимает очень много времени и влечет риск ошибок. Найти изменения в разных версиях документа можно в Word или Excel, но удобнее делать это через специальные сервисы сравнения документов. Вот несколько платных и бесплатных инструментов.
Сервис работает только с файлами в формате PDF или со скопированным текстом. Для проверки изменений в документе нужно перетащить обе версии в специальное поле — результаты сравнения выводятся сверху.
В бесплатной версии при сравнении документов сервис сбрасывает форматирование — это мешает работе.
Сервис работает с документами в формате PDF, DOC и DOCX, сохраняет исходное форматирование и заполнение документов, не разбивая строки и абзацы. Кроме того, сервис умеет анализировать программный код и сравнивать таблицы внутри текстов. Сравнение изображений не поддерживается.
Embedika Compare — единственный в этой подборке российский сервис сравнения документов. В нем есть режим обучения, весь его интерфейс — на русском языке.
Загружаемые документы обрабатываются мгновенно и нигде не хранятся, — в том числе и на серверах компании. Документы не попадают в открытый доступ.
В бесплатной онлайн-версии сервиса можно сравнить файлы в форматах PDF, Word и Power Point. Для анализа документа нужно загрузить обе версии в специальное поле — после этого откроется отдельное окно с указанием различий.
Сервис автоматически сравнивает документы в формате PDF и удаляет все данные сразу после закрытия вкладки в браузере.
Результаты сравнения выводятся на всплывающем экране в виде мерцающих кусков текста — из-за этого пользоваться сервисом не слишком удобно. Но, в отличие от других решений, инструмент позволяет сравнивать не только текст и таблицы, но и изображения.
Kaleidoscope — приложение для сравнения текстов, изображений и папок с файлами. У инструмента приятный дизайн, в нем можно редактировать тексты.
Приложение доступно только для iOS и MacOS. Полная версия стоит $69,9 ($19,9 для iPad).
У приложения те же функции, что у Kaleidoscope, — за исключением того, что текст загруженных документов можно редактировать прямо в приложении.
DeltaWalker работает на MacOS и Windows и стоит $39,95.
Сервис сохраняет подробный отчет о сравнениях — но, как утверждают разработчики, не хранит сами файлы. Большинство функций вынесено на панель инструментов, текст и картинки можно редактировать сразу после сравнения.
1) Нужно сперва закоммитить. Представляю, как менеджер или юрист коммитит изменения для сравнения документов на расхождения.
2) Разве гитхаб и гитлаб умеют сравнивать pdf, excel или word? Они умеют сравнивать текстовые данные, а не архивы и бинарники, да ещё и с правильным представлением.
Ну и вообще, не гитхаб и гитлаб, а гит или любая другая система контроля версий.
1) Нужно сперва закоммитить. Представляю, как менеджер или юрист коммитит изменения для сравнения документов на расхождения.
Моя мечта, что все офисные чуваки используют Git :) И пишут свои документы, используя Markdown.
2) Разве гитхаб и гитлаб умеют сравнивать pdf, excel или word? Они умеют сравнивать текстовые данные, а не архивы и бинарники, да ещё и с правильным представлением.
Да ты прав, не умеют. Я об этом не подумал.
Ну и вообще, не гитхаб и гитлаб, а гит или любая другая система контроля версий.
Для решения задач обработки текстов на естественном языке на сегодняшний день существует множество библиотек для python. В данной статье обратимся к библиотеке Stanza от StanfordNLPGroup, основанной на PyTorch. Т.к. анализ текста является важной NLP-задачей, рассмотрим основные методы, реализованные в данной библиотеке.
Для установки библиотеки используем команду pip install stanza.
Для работы с русскоязычным текстом скачиваем соответствующую модель:
Теперь рассмотрим различные этапы анализа (предобработки) текстовых данных.
1. Токенизация.
Разобьём текст на предложения (sentences) и предложения на токены (tokens)
Получаем следующий список предложений и токенов:
====== Предложение 1 ======= id: (1,) text: Об id: (2,) text: орясину id: (3,) text: осёл id: (4,) text: топорище id: (5,) text: точит id: (6,) text: . ====== Предложение 2 ======= id: (1,) text: А id: (2,) text: факир id: (3,) text: выгнав id: (4,) text: гостей id: (5,) text: выть id: (6,) text: акулой id: (7,) text: хочет id: (8,) text: .
2. POS-tagging
Теперь проведём пример с частеречной разметкой (part of speech tagging). При инициализации Pipeline в параметр processors добавляем значение ‘pos’. В качестве результата выводим соответствующие частям речи значения (тэги) в формате universalPOS (upos), а так же дополнительные лексические и грамматические свойства в формате universalmorphologicalfeatures (UFeats)
import stanza ppln = stanza.Pipeline('ru', processors='tokenize,pos') txt = 'Об орясину осёл топорище точит. А факир выгнав гостей выть акулой хочет.' doc = ppln(txt) print(*[f'word:
Результат будет следующим:
word: Об upos: ADP feats: _ word: орясину upos: NOUN feats: Animacy=Inan|Case=Loc|Gender=Masc|Number=Sing word: осёл upos: NOUN feats: Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing word: топорище upos: NOUN feats: Animacy=Inan|Case=Nom|Gender=Masc|Number=Sing word: точит upos: VERB feats: Aspect=Imp|Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act word: . upos: PUNCT feats: _ word: А upos: CCONJ feats: _ word: факир upos: NOUN feats: Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing word: выгнав upos: VERB feats: Aspect=Perf|Tense=Past|VerbForm=Conv|Voice=Act word: гостей upos: NOUN feats: Animacy=Anim|Case=Acc|Gender=Masc|Number=Plur word: выть upos: VERB feats: Aspect=Imp|VerbForm=Inf|Voice=Act word: акулой upos: NOUN feats: Animacy=Anim|Case=Ins|Gender=Fem|Number=Sing word: хочет upos: VERB feats: Aspect=Imp|Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act word: . upos: PUNCT feats:
3. Лемматизация.
Для получения нормальных словарных форм слов, необходимо при инициализации Pipeline в параметр processors добавить значение ‘lemma’. И в результат выводим свойство lemma каждого слова (word).
import stanza ppln = stanza.Pipeline('ru', processors='tokenize,pos,lemma') txt = 'Об орясину осёл топорище точит. А факир выгнав гостей выть акулой хочет.' doc = ppln(txt) print(*[f'word:
Результатом выполнения кода будет:
word: Об upos: о word: орясину upos: орясина word: осёл upos: осел word: топорище upos: топорищ word: точит upos: точить word: . upos: . word: А upos: а word: факир upos: факир word: выгнав upos: выгнать word: гостей upos: гость word: выть upos: выть word: акулой upos: акула word: хочет upos: хотеть word: . upos: .
4. Анализ зависимостей.
По аналогии с предыдущими пунктами добавляем в параметр processors значение ‘depparse’ при инициализации Pipeline. Обработчик depparse строит дерево зависимостей между словами предложений.
import stanza ppln = stanza.Pipeline('ru', processors='tokenize,pos,lemma,depparse') txt = 'Об орясину осёл топорище точит. А факир выгнав гостей выть акулой хочет.' doc = ppln(txt) print(*[f'word:
В результате видим список с зависимостями — каждому слову сопоставляется вершина и тип синтаксического отношения (deprel) в формате Universal Dependencies:
word: Об head id: 2 head: орясину deprel: case word: орясину head id: 5 head: точит deprel: obl word: осёл head id: 5 head: точит deprel: nsubj word: топорище head id: 3 head: осёл deprel: appos word: точит head id: 0 head: root deprel: root word: . head id: 5 head: точит deprel: punct word: А head id: 7 head: хочет deprel: cc word: факир head id: 7 head: хочет deprel: nsubj word: выгнав head id: 7 head: хочет deprel: advcl word: гостей head id: 3 head: выгнав deprel: obj word: выть head id: 3 head: выгнав deprel: xcomp word: акулой head id: 5 head: выть deprel: obl word: хочет head id: 0 head: root deprel: root word: . head id: 7 head: хочет deprel: punct
В данной статье мы рассмотрели инструментарий библиотеки Stanza по анализу (предобработке) текстовых данных.
С учетом мультиязычности данный проект может составить серьёзную конкуренцию другим NLP-библиотекам на python.
Наталья Воскобойникова, руководитель контент-студии WordFactory, написала для ЦП колонку с обзором сервисов для автоматической проверки текстов.
Один из главных трендов в сфере контент-менеджмента последних лет — автоматизация всего: и процесса работы копирайтера, и ее проверки, и даже корректирования результатов его работы.
Мы выбрали 10 сервисов. Взяли свой текст, который порадовал нас во всех отношениях (посещаемость, переходы, количество обращений, продажи), и проверили его в каждой из систем.
Результаты были лестными: нашу заметку признали качественной по ряду параметров: водность, читабельность, спамность.
Были и казусы: один из сервисов посчитал, что наш текст — это и не текст вовсе, а просто набор букв, а другой, что он слишком «водянистый», «заспамленный». Хотя читателей и наших новых клиентов, полученных благодаря этому тексту, подача информации вполне устроила.
Впрочем, обо всем по порядку.
Бета-версия анализатора качества контента. Анализ проводится на базе закона Ципфа, то есть качество текста в данном случае определяется на основании соответствия частоты употребления слов в естественной речи и тексте.
Результат выдается в двух окнах: в одном — график, в другом — частота использования отдельных слов и рекомендации по корректировке.
Скриншоты проверки текста:
Сервис оценил качество нашего текста на «удовлетворительно» и указал, какие слова, по его мнению, встречаются чаще, чем следует.
Что хорошо? Быстро, удобно, наглядно.
Что плохо? Сервис не умеет анализировать тексты длиннее 5 тысяч слов.
Непонятно, что такое эти «читательа» и прочие странные вещи, которые сервис считает синонимами употребленных в тексте слов. Впрочем, мы помним, что перед нами — бета-версия.
Еще один анализатор текста по закону Ципфа с рекомендациями по коррекции частоты встречающихся слов. То есть принцип оценки — тот же, что у предыдущего сервиса.
Скриншот результата проверки текста:
Этот сервис счел, что предложенный для анализа текст выглядит естественно, и высоко оценил его качество.
Что хорошо? Очень наглядно, удобно, с таблицей соответствия и рекомендациями. Есть возможность анализировать текст со страницы сайта, просто указывая ссылку.
Предельный объем текста — 15 тысяч слов. Анализирует также тошноту текста.
Что плохо? Ничего плохого не замечено. Но мы видим, что этот анализатор дал нашему тексту более высокую оценку по сравнению с предыдущим. Может быть, он нам льстит?
Сервис, который умеет анализировать текст по многим параметрам и искать орфографические ошибки. Нас будет интересовать функция проверки водности, то есть слов, которые не несут полезной информации.
Слова-паразиты, вводные фразы, шаблонные обороты — все это «вода». Некоторое ее количество есть в любом тексте, и само по себе это не является проблемой, но до определенного порога. Оптимальным считается показатель водности менее 30%, максимальный предел — 60%.
Скриншоты результата проверки текста:
На первом скриншоте мы видим выделенные слова и фразы, которые сервис назвал «водой», и нельзя сказать, что ход его мыслей всегда очевиден.
А на втором скриншоте, где анализатор собрал совокупные данные по тексту, мы видим, что его водность определена в 44%. Это достаточно много, то есть наш текст, по результатам этого анализа, нуждается в существенной корректировке.
Что хорошо? Удобно и быстро. Вставляем текст, выбираем нужный параметр анализа, получаем результат. Не нужно вставлять текст всякий раз заново, если нужно проанализировать разные параметры.
Заодно с водностью сервис анализирует тошноту, показывает наиболее часто используемые слова, адекватно определяет тематику текста.
Что плохо? Нам трудно поверить, что в тексте действительно 44% воды. Мы, скорее, склонны усомниться в адекватности алгоритмов работы сервиса. Тем более что все прочие сервисы показали водность в два-три раза ниже.
Сервис проверки водности и тошноты со встроенным текстовым редактором. Мы помним, что водность — это слова и обороты, которые не несут информационной нагрузки. А тошнота — это частота слов или фраз, употребляемых в тексте.
На уровень тошноты влияют и ключевые фразы, используемые в тексте для поисковой оптимизации, и любые другие повторяющиеся слова. По уровню тошноты судят о «натуральности» текста и уровне его оптимизации под поисковые запросы. Максимально допустимый коэффициент тошноты текста «для людей» — 7%, оптимальный — 4–6%.
Скриншот результата проверки текста:
Этот сервис полагает, что уровень «воды» в нашем тексте – вполне допустимый, а вот показатель тошноты — на верхнем пределе. Тут же нам показали первую пятерку наиболее употребляемых слов — сразу понятно, над чем нужно поработать, если мы хотим снизить этот показатель.
Что хорошо? На странице с анализатором даются развернутые объяснения понятий водности и тошноты текста и советы по трактовке полученных цифр.
В анализаторе можно включить текстовый редактор с богатой функциональностью, так что можно заниматься редактированием и прочей работой над тестом, не покидая страницы. Размер поля ввода можно регулировать.
Предоставляет информацию о количестве символов в тексте и пяти наиболее используемых словах.
Что плохо? Нет предметных рекомендаций по корректировке водности конкретного текста.
Сервис проверки текстов по многим параметрам, включая уникальность, проверку орфографии, выделение ключевых слов. Нас интересует функция анализа водности и спамности (частоты употребления определенного слова или фразы).
Скриншоты результата проверки текста:
Этот сервис считает, что «воды» в нашем примере мало. А вот слово «уникальность» (его анализатор выделил самым темным цветом) мы повторяем слишком часто, поэтому здесь получился высокий процент заспамленности текста.
Также сервис полагает, что можно пореже использовать и другие слова, которые он выделил более светлой заливкой: «техническая», «смысловая», «текст». Так что, если мы хотим снизить показатель спамности, сервис рекомендует заменить эти слова синонимами или вовсе от них избавиться, поработав над формулировками.
Что хорошо? Дает развернутый анализ текста, выделяет часто употребляемые слова отдельно и в группы. По клику на кнопках «Подробнее» под результатами соответствующих проверок выделяет цветом те фрагменты в тексте, которые считает проблемными.
По клику на «?» предоставляет подробные определения каждого параметра в целом и относительно данного текста в частности.
Что плохо? «Думает» довольно долго. Намного дольше всех предыдущих сервисов.
Попутно с водностью и спамностью он по собственной инициативе проверяет орфографию, и это у него получается плохо – авторам определенно нужно позаботиться о пополнении словаря сервиса (стопорится на словах «инфографика», «Интернет-маркетинг» и так далее)
Сервис, осуществляющий поиск стоп-слов и подсчет их процентного соотношения к общей длине текста. Стоп-слова — это всё то, что не несет самостоятельной смысловой нагрузки, но без чего не бывает связных текстов: предлоги, частицы, междометия, причастия, союзы, а также некоторые наречия, существительные и глаголы.
Слишком большое количество таких слов затрудняет восприятие текста и увеличивает его водность.
Скриншот результата проверки текста:
Сервис выделил только несколько вводных слов и определил общее их количество в 1% с хвостиком, то есть счел, что в этом смысле у нашего текста проблем нет.
Что хорошо? Информативно и просто, по результатам проверки сервис показывает общий процент стоп-слов и подсвечивает их.
Что плохо? Предельный объем текста — 10 тысяч символов.
Сервис проверки текстов, написанных в информационном стиле, главными характеристиками которого являются четкость, предметность, объективность, лаконичность. Тексты, написанные в этом стиле, должны нести полезную информацию и легко читаться.
При помощи данного сервиса тексты проверяются на соответствие информационному стилю, а в качестве бонуса даются рекомендации по корректировке.
Скриншот результата проверки текста:
Сервис уверен, что наш пример не имеет отношения к информационным текстам, определив его качество в 0%. Также он выделил большое количество стоп-слов, не обойдя вниманием наречия и усиливающие определения.
Что хорошо? При клике на подсвеченных словах даются пояснения: что именно в этом фрагменте выглядит спорным, как можно перефразировать оборот, усилить аргументацию, конкретизировать «слабые» места.
Попутно с анализом качества сервис подсчитывает и выделяет стоп-слова, причем очень придирчиво, с запасом.
Что плохо? Нет возможности выделить отдельно стоп-слова. Раз уж сервис умеет их подсчитывать, почему бы не добавить функцию их просмотра отдельным списком?
Качество текста – 0%? Тут явно что-то не так! Может быть, у нас не лучший в мире информационный текст, но этот сервис считает, что он вообще не информационный и не текст.
Сервис проверки качества контента. Находит в текстах канцеляризмы (конструкты и словосочетания, характерные для официально-делового стиля, но не для литературной речи), выделяет «воду», отмечает перебор запятых и другие «некрасивости».
Скриншот результата проверки текста:
Никаких оценок сервис не дает, он лишь указывает на неудачные, с его точки зрения, обороты. Впрочем, он и называется сервисом проверки, а не оценки. Поэтому мы не поняли, понравился ему наш текст или нет. Зато хорошо поняли, как можно его улучшить.
Что хорошо? Очень скрупулезный анализ. Сервис подчеркивает фрагменты, которые, по его мнению, нуждаются в корректировке. По клику на слове дает обоснование, почему считает оборот неудачным, предлагает варианты замены и заметки на близкие темы.
Что плохо? Сама специфика такого анализа не предполагает «цифровых» выражений качества текста, но все-таки их не хватает. Иначе после работы над текстом не с чем сравнить получившийся вариант.
Анализатор эмоциональности текста, написанного на русском или украинском языке. Это не онлайн-сервис, а скачиваемая программа.
Скриншот результата проверки текста:
Все в мире относительно. Мы постарались принять как комплимент оценку «тихий и медлительный», а «нежный» нам даже понравился. Но все-таки, кажется, анализатор хочет сказать, что предложенный пример не способен вдохновлять на подвиги.
Что хорошо? Любопытна сама возможность анализа эмоциональности текста. Есть возможность скачать библиотеку .dll, с которой можно будет оценивать тексты прямо в MS Word.
Что плохо? Нет онлайн-версии. Не указывается, какие именно слова или обороты влияют на эмоциональную окраску текста, поэтому непонятно, что делать с полученной информацией.
Сервис проверки стилистики текста. Определяет наличие тавтологий (необоснованных повторений, тождественных смысловых конструктов) и близко расположенных слов, сходных по смыслу или имеющих похожее звучание.
Скриншот результата проверки текста:
Опять же, тут нет никаких оценок, только указание на проблемные места. Мы их увидели, как и то, что их немного. Чему и порадовались, сочтя испытание благополучно пройденным.
Что хорошо? Очень полезная возможность, если вам надо добиться максимального благозвучия текста. Помогает «причесать» текст после долгой работы над ним, когда глаз «замыливается».
Что плохо? Не всегда очевидно, какие из подсвеченных слов коррелируют между собой. Нет возможности растянуть поле ввода и увидеть весь текст без скроллинга.
Мораль
Выше было много справедливой критики. Мы увидели, как некоторые программы в пух и прах раскритиковали текст, который принес отличный результат.
Некоторые сервисы уже хорошо справляются с проверкой орфографии и пунктуации и даже пытаются анализировать стилистику. Кто знает, возможно, в обозримом будущем они сделают работу копирайтеров проще, а оценку их труда — гораздо точнее.
Чтобы написать колонку для ЦП, ознакомьтесь с требованиями к публикуемым материалам.
Сегодня я продолжу рассказ о применении методов анализа данных и машинного обучения на практических примерах. В прошлой статье мы с вами разбирались с задачей кредитного скоринга. Ниже я попытаюсь продемонстрировать решение другой задачи с того же турнира, а именно «Задачи о паспортах» (Задание №2).
При решении будут показаны основы анализа текстовой информации, а также ее кодирование для построения модели с помощью Python и модулей для анализа данных (pandas, scikit-learn, pymorphy).
Постановка задачи
При работе с большим объёмом данных важно поддерживать их чистоту. А при заполнении заявки на банковский продукт необходимо указывать полные паспортные данные, в том числе и поле «кем выдан паспорт», число различных вариантов написаний одного и того же отделения потенциальными клиентами может достигать нескольких сотен. Важно понимать, не ошибся ли клиент, заполняя другие поля: «код подразделения», «серию/номер паспорта». Для этого необходимо сверять «код подразделения» и «кем выдан паспорт».
Задача заключается в том, чтобы проставить коды подразделений для записей из тестовой выборки, основываясь на обучающей выборке.
Предварительная обработка данных
Загрузим данные и посмотрим, что мы имеем:
passport_div_code | passport_issuer_name | passport_issue_month/year | |
---|---|---|---|
id | |||
1 | 422008 | БЕЛОВСКИМ УВД КЕМЕРОВСКОЙ ОБЛАСТИ | 11M2001 |
2 | 500112 | ТП №2 В ГОР. ОРЕХОВО-ЗУЕВО ОУФМС РОССИИ ПО МО . | 03M2009 |
3 | 642001 | ВОЛЖСКИМ РОВД ГОР.САРАТОВА | 04M2002 |
4 | 162004 | УВД МОСКОВСКОГО РАЙОНА Г.КАЗАНЬ | 12M2002 |
5 | 80001 | ОТДЕЛОМ ОФМС РОССИИ ПО РЕСП КАЛМЫКИЯ В Г ЭЛИСТА | 08M2009 |
Теперь можно посмотреть как пользователи записывают поле «кем выдан паспорт» на примере какого-либо подразделения:
ОТДЕЛЕНИЕМ УФМС РОССИИ ПО РЕСПУБЛИКЕ КАРЕЛИЯ В МЕДВЕЖ. Р-Е
ОТДЕЛЕНИЕМ УФМС РОССИИ ПО Р. КАРЕЛИЯ В МЕДВЕЖЬЕГОРСКОМ РАЙОНЕ
ОТДЕЛЕНИЕМ УФМС РОССИИ ПО РЕСП КАРЕЛИЯ В МЕДВЕЖЬЕГОРСКОМ Р-НЕ
ОТДЕЛЕНИЕМ УФМС РОССИИ ПО РЕСПУБЛИКЕ КАРЕЛИЯ В МЕДВЕЖЬЕГОРСКОМ РАЙОНЕ
ОУФМС РОССИИ ПО РЕСПУБЛИКЕ КАРЕЛИЯ В МЕДВЕЖЬЕГОРСКОМ РАЙОНЕ
УФМС РОССИИ ПО РК В МЕДВЕЖЬЕГОРСКОМ РАЙОНЕ
ОТДЕЛЕНИЕМ УФМС РОССИИ ПО РЕСПУБЛИКЕ КАРЕЛИЯ МЕДВЕЖЬЕГОРСКОМ Р-ОНЕ
ОТДЕЛЕНИЕМ УФМС РОССИИ ПО РК В МЕДВЕЖЬЕГОРСКОМ РАЙОНЕ
ОТДЕЛЕНИЕМ УФМС РОССИИ ПО РЕСПУБЛИКЕ КОРЕЛИЯ В МЕДВЕЖИГОРСКОМ РАЙОНЕ
УФМС РОССИИ ПО Р. КАРЕЛИЯ МЕДВЕЖЬЕГОРСКОГО Р-НА
ОТДЕЛОМ УФМС РОССИИ ПО РЕСПУБЛИКЕ КАРЕЛИЯ В МЕДВЕЖЬЕГОРСКОМ
УФМС РЕСПУБЛИКИ КАРЕЛИИ МЕДВЕЖЬЕГОРСКОГО Р-ОН
МЕДВЕЖЬЕГОРСКИМ ОВД
Как можно заметить нужно на поле действительно заполняется криво. Но для нормально кодирования мы должны привести это поле к более-менее нормальному (однозначному) виду.
Для начала я бы предложил привести все записи к одному регистру, например, чтобы все буквы стали строчными. Это легко сделать с помощью атрибута str, столбца DataFrame'a. Этот атрибут позволяет работать со столбцом как с строкой, а также выполнять различного рода поиск и замену по регулярным выражениям:
passport_div_code | passport_issuer_name | passport_issue_month/year | |
---|---|---|---|
id | |||
19 | 100010 | отделением уфмс россии по республике карелия в. | 04M2008 |
22 | 100010 | отделением уфмс россии по р. карелия в медвежь. | 10M2009 |
5642 | 100010 | отделением уфмс россии по респ карелия в медве. | 08M2008 |
6668 | 100010 | отделением уфмс россии по республике карелия в. | 08M2011 |
8732 | 100010 | отделением уфмс россии по республике карелия в. | 08M2012 |
C регистром определились. Далее надо по возможности избавиться от популярных сокращений, например район, город и т.д. Сделаем это с помощью регулярных выражений. Pandas предоставляет удобное использование регулярных выражений применительно к каждому столбцу. Это выглядит так:
Теперь избавимся от всех лишних символов, кроме русских букв, дефисов и пробелов. Это связано с тем, что паспорт о одинаковым подразделением может выдаваться отделами с разными номерами, и это ухудшит дальнейшую кодировку:
На следующем шаге, надо расшифровать аббревиатуры, типа УВД, УФНС, ЦАО, ВАО и т.д., т.к. этих их в принципе не много, но на качестве дальнейшего кодирования это скажется положительно. Например если у нас будет две записи «УВД» и «управление внутренних дел», то закодированы они будут по разному, т. к. для компьютера это разные значения.
Итак перейдем к расшифровке. И, для начала, заведем словарь сокращений, с помощью которого мы и сделаем расшифровку:
Теперь, собственно произведем расшифровку абривеатур и отформатируем полученные записи:
Предварительный этап обработки поля «кем выдан паспорт» на этом закончим. И перейдем к полю, в котором находится дата выдачи.
Как можно заметить данные в нем хранятся в виде: месяцMгод.
Соответственно можно просто убрать букву «M» и привести поле к числовому типу. Но если хорошо подумать, то это поле можно удалить, т.к. на один месяц в году может приходиться несколько подразделений выдававших паспорт, и соответственно это может испортить нашу модель. Исходя из этого удалим его из выборки:
Теперь мы можем перейти к анализу данных.
Анализ данных
[раз, два, три, четыре]
Длина списка из уникальных ключей и будет длиной нашего закодированного текста (в нашем случае это 4). А номера элементов будут соответствовать, количеству раз встречи данного ключа с данным номером в строке:
раз два три --> [1,1,1,0]
три четыре два два --> [0,2,1,1]
Соответственно после кодировки, применения данного метода мы получим:
Значение |
---|
1,1,1,0 |
0,2,1,1 |
3,0,0,1 |
HashingVectorizer является смесью двух выше описанных методов. В нем можно и регулировать размер закодированной строки (как в FeatureHasher) и настраивать токенизатор (как в CountVectorizer). К тому же его производительность ближе к FeatureHasher.
Итак, вернемся к анализу. Если мы посмотрим по внимательнее на наш набор данных то можно заметить, что есть похожие строки но записанные по разному например: "… республика карелия. " и "… по республике карелия. ".
Соответственно, если мы попробуем применить один из методов кодирования сейчас мы получим очень похожие значения. Такие случаем можно минимизировать если все слова в записи мы приведем к нормальной форме.
Для этой задачи хорошо подходит pymorphy или nltk. Я буду использовать первый, т.к. он изначально создавался для работы с русским языком. Итак, функция которая будет отвечать за нормализацию и очиску строки выглядит так:
- Сначала она преобразовывает строку в список
- Затем для всех слов производит разбор
- Если слово является числительным, предикативном, предлогом, союзом, частицей или междометием не включаем его в конечный набор
- Если слово не попало в предыдущий список, берем его нормальную форму и добавляем в финальный набор
Как можно заметить при создании метода кроме токенизатора мы задаем еще один параметр n_features. Через данный параметр задается длина закодированной строки (в нашем случае строка кодируется при помощи 256 столбцов). Кроме того, у HashingVectorizer есть еще одно преимущество перед CountVectorizer, но сразу может выполнять нормализацию значений, что хорошо для таких алгоритмов, как SVM.
Теперь применим наш кодировщик к обучающему набору:
Построение модели
Для начала нам надо задать значения для столбца, в котором будут содержаться метки классов:
Задача, которую мы решаем сегодня, принадлежит к классу задач классификации со множеством классов. Для решения данной задачи лучше всего подошел алгоритм RandomForest. Остальные алгоритмы показали очень плохие результаты (менее 50%) поэтому я решил не занимать место в статье. При желании любой интересующийся может проверить данные результаты.
Для оценки качества классификации будем использовать количество документов по которым принято правильное решение, т. е.
, где P — количество документов по которым классификатор принял правильное решение, а N – размер обучающей выборки.
В пакете scikit-learn для этого есть функция: accuracy_score
Перед началом построения собственно модели, давайте сократим размерность с помощью «метода главных компонент», т.к. 256 столбцов для обучения довольно много:
Модель будет выглядеть так:
Заключение
В качестве вывода нужно отметить, что полученная точность в 65% близка к угадыванию. Чтобы улучшить нужно при первичной обработке обработать грамматические ошибки и различного рода описки. Данное действие также скажется положительно и на словаре при кодировании поля, т. е. его размер уменьшиться и соответственно уменьшиться длина строки после ее кодировки.
Кроме того этап обучения тестовой выборки опущен специально, т. к. в нем нет ничего особенного, кроме его приведения к нужному виду (это можно легко сделать взяв за основу преобразования обучающей выборки)
В статье я попытался показать минимальный список этапов по обработке текстовой информации для подачи ее алгоритмам машинного обучения. Возможно делающим первые шаги в анализе данных данная информация будет полезной.
Читайте также: