Как стать автором
Обновить

Как отличить хороший ремонт от плохого, или как мы в SRG сделали из Томита-парсера многопоточную Java-библиотеку

Время на прочтение7 мин
Количество просмотров2.9K
Всего голосов 15: ↑14 и ↓1+13
Комментарии16

Комментарии 16

А что, Томита сильно лучше имеющихся Java решений, или вы просто такие не нашли?
Нам нужно было качественное решение, работающее с русским языком.
Ничего готового на Java, удовлетворяющее нашим требованиям, мы не нашли. Иначе бы не затевали эту эпопею с интеграцией, которая нам стоила ещё тех веселых деньков (и ночей).
А Lucene с поддержкой руской морфологии (RussianAnalyzer) не пробовали? И, если пробовали, то что не устроило?
Приходилось решать похожую задачу. Ничего готового для русского языка не нашли (пришлось на котлине делать свой dsl для граматик + парсер текста).
Если вам известны решения для русского языка на jvm — поделитесь многим будет полезно
А насколько универсальное решение получилось? Оно доступно для использования или закрытое?
Для наших целей — достаточно универсальное. В паблик так и не вышло (и не уверен что выйдет) т.к. подчистить и «упаковать» тоже требует усилий
Я могу навскидку назвать два решения — Spark NLP, и порт pymorphy2. По-моему русский также поддерживается и в Apache OpenNLP.

Но я не знаю ваших потребностей, поэтому было бы неплохо озвучить, что именно вы смотрели, и почему не подошло. Ну, если время есть или будет.
Вот интересно, кто такой умный, что просто ставит минус, и не комментирует?

Я реально разбирал объявления при помощи например Stanford NLP и вот этих моделей для русского. Поэтому когда мне говорят, что для JVM ничего нет — ну это значит откровенно плохо искали. Lucene уже упомянули. Вот это — порт на Java pymorphy2, где русский точно поддерживается, и я это проверял.

Не хочу сказать, что решений много, но штук пять точно наберется.
Всегда интересовало как подобные парсеры относятся к объявлениям вида:

Продается прекрасная квартира. Евроремонт, встроенная кухня, кафель и плитка, импортная французская сантехника, встроенные зеркальные шкафы-купе, стеклопакеты — отсутствуют.

Просто КМК десять неполных объявлений принесут репутации меньше вреда, чем одно ложное.
А Вы в рельности такие объявления встречали или это чисто умозрительный пример? Люди продают и стараются адекватно (насколько умеют) описать ситуацию, а не постебаться. Хотя такого типа бред попадается: «Продам лужу. Большого размера. Много людей поместиться может. Очищенная, фильтрованная. Всей семьей проверяли! Гарантия возврата 15 минут. В комплекте с лужей идет: 1)Бесплатная вода (первые 4 дня, потому что замерзнет скоро), 2)Жена (беременная), 3)Сосед-вейпер+жижа в подарок, 4)Мусорный бак. Лужа просвященная священником, но есть сосед сектант, так что из лужи выходить не стоит. По этому и снизили цену до 500000.»
Но таких мало, так что особого вреда они вряд ли нанесут.
А Вы в рельности такие объявления встречали или это чисто умозрительный пример?
Отсутствующую французскую сантехнику вы, конечно, вряд ли встретите, а вот со стеклопакетами не все так однозначно. Я несколько раз сталкивался с примерами бесполезной автоматизации и очень похоже, что это один из них. Выдуманный пример:

1. Без автоматизации.
— Баба Зина читает объявление.
— Делает экспертную оценку (в уме) и принимает решение: «Можно увеличить цену на N тыс.»

2. С автоматизацией.
— Баба Зина читает объявление (она не может на 100% доверять парсеру).
— Смотрит на результат работы парсера и понимает что он не совсем точен.
— Вносит коррективы.
— Подтверждает изменения.

Кому как, но, по моему, первый способ предпочтительней.

Баба Зина может прочитать одно объявление, ну 100, но несколько миллионов даже 50 баб Зин не осилят.

Кстати, пробовали одно и то же объявление давать трем разным «бабам Зинам». Представте себе, они дали 3 разных ответа по классификации ремонта. Вопрос: какой из трех верить?
Вспомните хотя бы что стало с поисковиками которые тоже просто парсили ключевики. А, между тем, у них было больше информации чем можно извлечь из двухстрочного объявления. Внезапно, в таких системах, обычно, очень большой процент ошибок. Так что ваши данные, скорее всего, нужно называть «условно классифицированными».

Баба Зина может прочитать одно объявление, ну 100, но несколько миллионов даже 50 баб Зин не осилят.

Куда эффективней определить формальный параметры, сделать их в виде списка/чекбоксов и стимулировать пользователей самостоятельно выбирать нужные критерии.

Кстати, пробовали одно и то же объявление давать трем разным «бабам Зинам».

Ну она же не случайный человек (погрешность, конечно, будет, но она будет меньше, чем у парсера).

Давали классифицировать специально обученным людям и сравнивали с парсером. Сами удивились, что парсер оказался более объективным в большинстве случаев.

Дополнение к комментарию выше:
Куда эффективней определить формальный параметры, сделать их в виде списка/чекбоксов и стимулировать пользователей самостоятельно выбирать нужные критерии.

А вот здесь, кстати, ваше решение может быть полезным. Что-то вроде этого:
Пользователь пишет объявление -> элементы списка/чекбоксы заполняются.
Пишут про то что у Tomita «особенная» лицензия из-за использования в продукте библиотеки MyStem, у которой в лицензии Яндекс написал:

Программа может использоваться в коммерческих целях для разработки/создания каких-либо сервисов или программ, включаться и использоваться по прямому функциональному назначению в составе таких сервисов или программ, а также использоваться иным образом в процессе оказания услуг/выполнения работ, за исключением:

  • использование Программы и/или сервисов или программ, созданных на её основе или с её использованием, для создания или распространения массовых рассылок и спама;
  • использование Программы и/или сервисов или программ, созданных на её основе или с её использованием, для поисковой оптимизации сайтов в сети Интернет;
  • использование Программы для создания сервисов или программ или в составе сервисов или программ, предлагающих услуги или функциональность, аналогичную программам и сервисам Правообладателя.


Пользователь не имеет права воспроизводить и распространять Программу за плату, в том числе в составе сборников программных продуктов, без письменного согласия Правообладателя.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий