У моей библиотеки теперь есть название — Az — и репозиторий на ГитХабе:
За морфологию отвечает модуль Az.Morph. А в виде модуля Az.Tokens я сделал токенизатор. Он умеет (настраиваемо) парсить не только обычный plain-text, но и HTML-, вики- и Markdown-разметку (последние две пока не очень уверенно). А ещё, например, выделяет в отдельные токены ссылки, емэйлы, хэштеги и упоминания через @.
Предсказатели для несловарных слов пока не делал. Зато я немного развил идею замен (е на ё).
Во-первых, если в слове есть повторы букв, сплошняком или разделенные дефисами (гоооол или го-о-о-ол), то в словаре найдется нормальный, сжатый до одной буквы вариант слова. Это у меня называется "заикание", stutter. Предельное число повторов можно ограничить (хотя по умолчанию стоит Infinity, т.к. в самих словах число букв конечно).
Во-вторых, можно искать даже слова с опечатками. Сейчас, правда, из четырех видов опечаток поддерживаются три (слово «пример» найдется по запросам «притмер», «пирмер», «пнимер», но не найдется, если буква пропущена — «пимер»). При этом чтобы дополнительно сузить число вариантов, считается, что напечатать одну букву вместо другой можно только если они расположены рядом на клавиатуре. Как и «заиканиями», можно задавать предельное число опечаток на слово (но тут Infinity явно не стоит указывать). Например, я придумал «автоматический» режим — сначала ищется слово «как есть», без опечаток совсем; затем, если ничего не нашлось, и в слове хотя бы 5 букв, то с одной опечаткой; наконец, если и с одной опечаткой не нашлось вариантов, и в слове хотя бы 10 букв, то ищется с двумя допустимыми опечатками. Статистики у меня нет, но по ощущениям кажется, что при анализе текстов в сети подобный механизм может сильно пригодиться (пусть и ценой некоторого замедления разбора). Пока не знаю, как я это совмещу с предсказателями, но понятно, что по числу опечаток имеет понижать score, по которому сортируются результаты.
воскресенье, 10 апреля 2016 г., 19:36:34 UTC+3 пользователь Denis Olshin написал: