Синонимайзер: оптимизируем базу

Только что мне удалось произвести оптимизацию кода для импорта словаря в базу. Если раньше на компьютере с двухъядерным интелом на 2.4GHz из словаря в текстовом виде за секунду импортировалось около 10 строк, то теперь за ту же секунду испортируется 250-300 строк. Таким образом на импорт словаря из 5700 строк уходит около 20 секунд.
Continue reading »

Чистка базы продолжается

Итак, после нескольких дней работы над улучшением работы синонимайзера было принято решение очистить базу от “лишних” синонимов. Дело в том, что большинство синонимов представляют собой семантические пары. Кроме того, многие синонимические пары встречаются не слишком часто, чтобы включать их в словарь.
Continue reading »

Результат оптимизации

Итак, после того, как все приготовления были произведены, можно приступать к тестированию производительности. Возьмем наш текст про мышонка Феликса и прогоним его через наш синонимайзер. В результате получилось следующее:

  • символов с пробелами: 3239
  • символов без пробелов: 2706
  • всего русских слов: 539
  • неповторяющихся слов: 372
  • неповторяющихся слов, имеющих хотя бы один синоним: 275
  • всего найдено синонимов: 11868
  • неповторяющихся синонимов: 5372
  • время выполнения: 38.2 секунды (320 слов в секунду)

Continue reading »

Практика оптимизации

Итак, перейдем от теории к практике. Посте того, как было решено оптимизировать базу на предмет оптимизации, я произвел следующие шаги:

  • нашел в словаре все слова, для которых морфологический движок содержит базовые формы. Из 310 тысяч таких слов оказалось всего 56 тысяч.
  • определил, к какому классу (существительное, прилагательное, наречие и т.д.) относится каждое из слов.
  • добавил две таблички, одна из которых содержит все возможные варианты всех существительных (просклонял их по числу и падежу). Всего оказалось 250 тысяч возможных вариантов без учетов повторений для 26 тысяч имен существительных, имеющих базовую форму. Вторая табличка - индекс, содержащий все варианты чисел и падежей и ссылающийся на таблицу вариантов существительных. Индекс содержит 318 тысяч записей, по количеству всех словоформ имен существительных (с повторными ссылками на таблицу слов)
  • то же самое сделал для имен прилагательных. Правда, из-за того, что склонять имена прилагательные нужно не только по числу и падежу, но еще и по роду, времени и сравнительной форме, то количество вариантов превысило 10 миллионов. Придется разделить индекс на несколько частей (скорее всего на столько, на сколько букв начинаются варианты), чтобы ускорить поиск.

Continue reading »

Принципы оптимизации

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