Синонимайзер: предварительные итоги

В настоящий момент я уже успел сделать следующее:

  • обработчик одиночного текста с учетом морфологии. текст представлен в виде веб-странички с выпадающим списком на месте слов, для которых найден хотя бы один синоним.
  • редактор словаря. Для каждого слова из словаря может быть добавлен новый синоним или удален уже существующий

Continue reading »

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

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

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

Continue reading »

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

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

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

Continue reading »

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

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