Здравствуйте, уважаемые читатели блога о контент-анализе!
Сегодня хочу поделиться описанием бесплатной программы для извлечения контекстов употребления слов в массиве текстов. Программку дописал вчера. Для использования понадобится установить JAVA и MYSQL сервер (не стоит пугаться — это не сложно).
Суть конкорданса в получении фрагментов текстов, в которой употреблена актуальная лексика. Например, у вас есть огромный массив текстов, в каждом из которых озвучивается какая-то интересная вам тема. При этом текст не обязательно посвящен только этой теме. Для того, чтобы получить фрагменты текстов, в которых звучит нужная вам тема и отсеять неактуальные фрагменты текстов используются софт для конкорданса. В самом простом виде пользователь вводит в поиск слово, и программа показывает ему каждый из фрагментов, где это слово употребляется.
Соответственно, он может искать и словосочетания, и слова в разных словоформах (или система сама найдет все словоформы искомого слова), может искать несколько слов, задавая максимальное расстояние между ними, просматривать частотное распределение слов в массиве текстов, чтобы лучше понять, какую лексику можно искать в первую очередь. Здесь могут использоваться списки стоп-слов. Ну и т.д. Пример такой программы я уже описывал — Concordance. Функционал у нее богатый, но есть и недостатки. Программа платная (демо версия действует 30 дней, если мне не изменяет память), были какие-то проблемы с экспортом результатов (если он там вообще есть — просто не помню), программа на английском — а это не всегда для всех удобно, были проблемы с кодировкой. И еще, поскольку я недавно начал изучать JAVA (пока что всего 2 месяца), нужна практика в написании своего софта. Вот эта вторая моя программка. Первой был недоделанный недокалькулятор.
Итак. Я подумал-подумал и решил, что не буду особо расписывать установку JAVA и MYSQL — только самые основы, просто потому что не знаю, с чем конкретно при установке могут возникнуть трудности. Поэтому, если возникнут — пишите в комментариях, будем разбираться.
- Для установки JAVA идем на официальный сайт джавы и скачиваем установочный файл. Потом его устанавливаем… Файлик ВОТ ТУТ на момент написания этого поста.
- Для установки MYSQL скачиваем установочный файлик и тоже устанавливаем. Файлик ВОТ ТУТ. Он находится внизу странички:
В процессе установки понадобится создать пользователя и дать ему пароль, насколько я помню. Поэтому стоит создать пользователя и дать ему пароль в процессе установки 🙂 Например, user(пользователь) и pass(пароль).
На сервере MYSQL надо будет создать новую базу данных для работы. Проще всего сделать это так:
- Ищем только что установленную на компьютере программу MYSQL COMMAND LINE CLIENT UNICODE.
2. Открываем ее. Сервер запрашивает пароль (тот, что вы ввели при установке). Надеюсь вы его еще не забыли 🙂 Вводим команду создания новой базы данных CREATE DATABASE smth (smth — это название создаваемой базы данных, с которой вы будете работать. Можете дать ей любое название. Что б не заморачиваться — лучше пусть оно будет состоять только из латинских букв). Энтер. База данных создана.
Ответ сервера должен быть таким, как на скриншоте!
Теперь качаем программку Конкорданс Менеджер 1.0. Скачать ее можно вот тут
Распаковываем архив. В нем есть файл Concor.jar — кликаем по нему 2 раза. Если JAVA установилась корректно, то откроется программка.
В первой вкладке «Конфигурация» надо ввести имя пользователя базы данных, которые у вас были заданы при установке и пароль пользователя. (Если не вводили, это может быть пользователь root без пароля — но лучше, чтобы пользователь был созданным вами). В первые три поля вводим название базы данных, пользователя и пароль. Нажимаем «сохранить и подключиться». Появляется уведомление об успешном подключении к базе данных.
Если допущена ошибка, то появится другое уведомление — сообщение об ошибке подключения. Компьютер задымиться и перезагрузится 15 раз.
Если вы работаете с удаленным сервером MYSQL — кликаете по чексбоксу с подписью «удаленная база данных» и вводите IP сервера базы данных. В остальном всё как с локальной БД.
Теперь переходим на закладку «база данных», где нам надо создать 2 рабочие таблицы — для хранения исходных текстов, и для хранения фрагментов текстов. Вводим их названия и нажимаем кнопочки (те, что слева от полей ввода названий таблиц) создания. Если таблиц с такими именами нет в БД, вы получите 2 сообщения об успешном создании. Если таблица есть — будет сообщение об ошибке. Также на этой странице можно проверить существование таблицы с определенным именем в БД — самое верхнее поле.
Если кто-то хочет создать таблицы вручную или использовать уже существующие, то привожу их структуру:
Вернемся к закладке «конфигурация» и введем названия созданных таблиц в двух пустующих полях. Снова нажмем «сохранить и подключиться».
Соответственно, при последующей работе с программой таблицы уже создавать не надо, если вы продолжаете работу с прежним проектом. Если делаете новый — создайте новые таблицы.
Идем во вкладку «импорт» где можно выбрать txt файлы для импорта в наши таблицы. Можно выбрать файлы, сохраненные в двух кодировках:
Допустим, файлики наши сохранены в кодировке ANSI (угадайте, по какой кнопочке кликнем?))).
Открывается окно выбора файликов. В диалоговом окне выбираем файлики txt и нажимаем «открыть файлы». После этого они попадают в нашу таблицу rawtexts.
Лимит на длину текста в файле — 21 844 символа для UTF-8 (если не ошибаюсь), а на ANSI не знаю. «Война и мир», также находящаяся в папке, чуть-чуть по-больше. Баг — таблицы создаются с неверным типом данных (text), а нужен был Longtext. Наверное, сделаю 1.0.1 версию и уберу найденные баги.
Пока что решение такое (если хотите работать с большими файлами текстов): в командной строке MYSQL пишем команду:
ALTER TABLE `smth`.`rawtexts`
CHANGE COLUMN `raw_text` `raw_text` LONGTEXT NULL DEFAULT NULL;
Где smth — название базы данных (поменяйте на свою) и rawtexts — название таблицы для хранения исходных текстов (поменяйте на своё название таблицы).
Итак. Перейдем в закладку «исходные данные» и убедимся, что файлы загружены (я загрузил «анну каренину» и «войну и мир») Нажимаем «показать исходные тексты». Как видно на скриншоте ниже, кнопка рядом позволяет удалить все тексты из таблицы («очистить таблицу исходных данных»).
Переходим на вкладку «поиск и конкорданс». Здесь мы можем ввести слово, фрагменты исходных текстов с использованием которого мы хотим получить. Также здесь мы вводим количество символов слева и справа от искомого слова (задаем объем фрагмента в символах). Для примера введем слово «наполеон» и 60 символов зададим от этого слова в обе стороны (на самом деле, это мало, лучше 300 или около того. 60 — просто для наглядности). Нажимаем кнопку «искать вхождения».
После окончание операции появляется уведомление о ее завершении. Переходим на закладку «фрагменты» и кликаем по кнопке «показать фрагменты». Видим текстовые фрагменты, где использовано слово «наполеон» и 60 символов вправо и влево от первого символа искомого слова (он первой буквы в слове «наполеон»). Найдены будут фрагменты текстов, где использовано слово наполеон с любым окончанием.
Давайте поищем еще другие слова. Например, слово царь. Здесь нам надо будет ввести в поиск последовательно «царь» => искать вхождения, «царя» => искать вхождения, «царю» => искать вхождения. И пр пр пр. Это неудобно. Если вести в поиск «цар», то может быть найдено что-то совсем не царское, с частью ЦАР. Например, «моЦАРт». Это нехорошо. Поэтому идем на вкладку «частоты» и жмем на кнопку «рассчитать словарь».
Отмечу, что на настоящий момент с огромными массивами текста словарь в этой версии создан не будет (программа в консоли IDE начинает бросаться ошибками о нехватке памяти). Думаю, исправлю в 1.0.1. Поэтому словарь слов для поиска и формирования фрагментов попробуем создать без «войны и мира», только по «Анее Карениной». Итак, мы получили словарь никак не отсортированных слов с указанием их частоты встречаимости в текстах.
Нажмем кнопочку «отсортировать по алфавиту». Слова отсортируются соответствующим образом. Находим слово царь, его словоформы и, может быть, что-то еще царское и отмечаем их галками. После это нажимаем «искать отмеченные слова». Чтобы начать поиск фрагментов, в которых присутствует каждое из слов.
Далее программка запрашивает количество символов «вокруг» слова. Вводим 60 или что-то более адекватное.
Еще здесь есть кнопка СБРОС — это сброс словаря и расчекбоксивание чексбоксов — то есть все выбранные слова больше не будут выбраны. Еще есть сортировка по частоте слов:
Перейдем в закладку фрагменты — посмотрим на то, что было найдено («наполеона» там уже нет — я почистил всю таблицу фрагментов после неудачи с созданием словаря для «войны и мира» и «анны карениной» вместе.
Давайте введем в поиск еще одно слово — «беседк». (По фрагментам я вижу, что оно встречается вместе со словоформами слова «царь», правда, всего 1 раз) — это нужно для демонстрации объединения фрагментов, имеющих общие части.
Предварительно перед объединением, давайте посмотрим на функцию экспорта фрагментов. Переходим снова в закладку «фрагменты», снова обновим данные — там уже прибавилось фрагментов.
И теперь кликнем «экспортировать фрагменты в XLSX». В папке программы появится файл frags.xlsx. Откроем его.
id фрагмента — это просто id, формируемой системой. id текста — это…. id текста из таблицы текстов…
Индекс слова — номер символа в тексте, с которого начинается искомое слово. Начало фрагмента — это номер символа в тексте, с которого начинается текстовый фрагмент с искомым словом. Что такое конец фрагмента — не скажу. Ну, дальше идет сам фрагмент и слово, которое было использовано для поиска и формирования фрагмента. В общем, если это актуально, здесь можно замерить средние расстояния между словами, чтобы определить их связь между собой в массиве текстов. Но это так — к слову просто.
Вернемся к программке и вкладке «поиск и конкорданс». Нажмем «объединить фрагменты». (Важно — при этом действии в результате экспорта в столбцах «искомое слово» и «индекс слова» уже не будет значений).
(КСТАТИ, забыл совсем — в этой вкладке есть кнопка «очистить таблицу от дублей». Допустим вы искали одно и то же слово 2 раза — жмете кнопку и дубли пропадут. Эта функция также запускается перед реализацией объединения фрагментов системой без участия пользователя).
Снова экспортируем фрагменты в эксель и увидим, что некоторые фрагменты были объединены (те, что имели общие части) — пример не особо хороший, но функционал демонстрирует.
Вот такая получилась программка. Предложения и пожелания пишите в комментариях 🙂
P.S. На днях заканчиваю работу с проектом Даздраперма. Решил остановиться на 0.2 версии, даже не доделав ее до конца. Просто не вижу смысла, так как сейчас понимаю, что буду делать ее на JAVA с нуля и некоторое время спустя, когда освою ее по-лучше. И, вероятно, программка будет не браузерной, как сейчас, а десктопной — уж очень мне понравилось эта десктопность 🙂 Даздраперма остается открытой — просто для истории, ну или для каких-то исследований — там всё работает же) В общем она и задумывалась, просто чтобы понять, как стоит делать такой проект. Сейчас понимаю, что он должен быть десктопным и работать с локальной и удаленной базой данных — чтобы была возможность коллективной работы. Должен быть как качественный, так и количественный анализ контента, база проектов и многоязычность. Ну и само собой то, что напридумывал и описал на блоге проекта.
Бай!
Добрый день, я решил попробовать эту программу — но мне не удалось её протестировать.
Причина:
Вторая вкладка «База данных» абсолютно пустая, несмотря на то, что подключение к
базе данных, по сообщению программы, было успешным.
Скриншоты по ссылке http://rghost.ru/8QP4YsV7y
Как тестировалось:
Изначально была система Windows 7 x64 SP1.
Я скачал дистрибутив MySQL (файл mysql-installer-community-5.6.27.0.msi) — последовательно по ссылкам
http://dev.mysql.com/downloads/windows/installer/5.6.html
http://dev.mysql.com/downloads/file.php?id=459310
http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.27.0.msi
Установил MySQL в Full конфигурации, создал пользователя, базу данных по указанному способу через MySQL Console.
На компьютере уже была установлена Java Runtime Environment 7.45, но, как оказалось, программе потребовалась более новая Java.
Я скачал и установил Java 8.60 (файл jre-8u60-windows-i586.exe) — последовательно по ссылкам
http://javadl.sun.com/webapps/download/AutoDL?BundleId=109706
http://sdlc-esd.oracle.com/ESD6/JSCDL/jdk/8u60-b27/jre-8u60-windows-i586.exe?GroupName=JSC&FilePath=/ESD6/JSCDL/jdk/8u60-b27/jre-8u60-windows-i586.exe&BHost=javadl.sun.com&File=jre-8u60-windows-i586.exe&AuthParam=xxxxxxxxxx_yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy&ext=.exe
Запускал программу и по двойному клику и по рекомендуемому в readme.txt способу
через java.exe (конкретно вот так «C:\Program Files (x86)\Java\jre1.8.0_60\bin\java.exe» -jar Concor.jar) —
но результат одинаковый, дальше настройки подключения продвинуться не удалось.
Настройки подключения, кстати, не сохраняются при выходе из программы.
Далее настало время протестировать всё на других, заведомо чистых системах, и в итоге, я пробовал следующие конфигурации и системы, те же настройки и дистрибутивы на:
Windows 7 x64 SP1
Windows 7 x64 SP1 (виртуальная машина VMWare)
Windows 7 x86 SP1
Windows XP SP3 (виртуальная машина VMWare)
Windows XP SP3
Для случая Windows XP следует заметить, что MySQL требует для установки библиотеки .NET 4.0. Тем не менее, после успешной установки .NET и mySQL, последний не удалось настроить, т.к. сервер не запускался. Дальше я просто не стал разбираться —
Windows XP можно считать уже закрытой темой.
Так или иначе, на всех системах программа вела себя одинаково, включая Windows XP.
Добрый день, Александр. Большое спасибо за обратную связь по программке и подробный результат тестирования 🙂 Это моя ошибка — я залил архив, так скажем, альфа версии, где еще не были готовы кнопки создания таблиц. То есть таблицы в общем можно было бы создать вручную, как на скрине структуры таблиц — изначально так и хотел оставить, но, думаю, это было бы слишком неудобно для большинства пользователей. Аналогично в этой версии еще не было функционала на закладке «частоты».
Линк на архив обновил.
Спасибо, что сообщили про обновление версии java — у меня было подозрение, что со старым версиями JRE работать не будет, так как программа не работала ни на одном компьютере в университете (стоит 1.6). Возможно, проблема в GUI, но не уверен.