Автор, статья неплохая, но дайте перварительно общую картину — классы языков. Ту ж иерархию Хомского
К примеру, не очень понятно почему регекспами нельзя обрабатывать вложенность (а если ими нельзя, то чем можно?).
2Nostromo: читал какие-то мгушные лекции, не очень-то понятно. Не могли бы назвать хорошего лектора (по формальным языкам)?
На сколько я помню, он один из соавторов книги «Introduction to Automata Theory, Languages, and Computation». Очень грамотная книга, необходима для понимания computer science.
Жаль.
Похоже, основа та же. Наврятли там использовалась какая-либо грамматика на правилах.
Но текст относительно «чистый» получается. Скорее всего там еще какие-то хитрые алгоритмы поверх идут.
Да, смотрел. Но nltk здесь — как из пушки по воробьям. В данном случае даже морфология не используется — обычная тренировка на корпусе (даже без сглаживания) и подбор слов по вероятности. Может быть, через время напишу «правильный генератор», где буду использовать и морфологию, и синтаксис и, возможно, какие-то элементы семантики.
Может быть обрисуете как вы видите этот модуль, желательно по почте ( at gmail.com)? Может быть что-то придумаем.
Вообще, я как-то писал морфологический анализатор, так же на основе словаря аот. Но в основе у меня лежал трансдьюсер (finite state transducer), базу не использовал. У этого подхода есть плюсы, но есть и минусы. Если интересно — могу подробней по почте.
Вы правы. Рад что внимательно смотрите код :). Сумма тут всегда равна 1. Похоже я взял этот метод из своего кода, который допускает любое значение частоты.
Здесь же можно использовать просто рандом.
Надо сказать, писал я этот код больше года назад. Сейчас вижу, что функция unirand могла бы быть более прозрачна.
Вобщем, да. Цепь маркова, сеть Байеса, как угодно.
Лично мне проще воспринимать подобные модели просто как направленный взвешенный граф, где дуги маркированны вероятностями перехода на следующее состояние.
А на счет ruscorpora.ru, я честно говоря не понимаю смысл проекта. Почему бы не открыть корпус, если таковой имеется. Тем более называется национальным и создается на государственные деньги.
Думаю, снятие неоднозначности не очень подходит для уровня морфологии. Это что-то ближе к синтаксическому анализу, где может уйти большая часть омонимии. К примеру — «краска стекла по стене» и «в машине нет лобового стекла». Здесь выбор виден из контекста. То есть если писать дизамбигуатор только на основе n-граммной статистики, то он будет неточный и очень сильно зависимый от корпуса.
Вообще, мне не лень его написать :), но я на вскидку не вижу чем этот модуль будет полезен.
Может быть. Я слабо знаком с поисковой оптимизацией. Но есть вероятность что они будут рассматриваться как дубли, так как текст становиться ооочень похож на исходный. В этом случае нужно использовать разные корпуса по разным тематикам.
По-моему объяснение этому может быть простое. Точка считается за токен, либо маркирует конец предложение, типа /s.
Последовательности и 'market различны, соответственно мапится будут на различные последовательности другого языка.
ps наврятли они забили на синтаксис, просто у них синтаксический парсер — статистический
Последовательности и <market различны, соответственно мапится будут на различные последовательности другого языка.
ps наврятли они забили на синтаксис, просто у них синтаксический парсер — статистический
К примеру, не очень понятно почему регекспами нельзя обрабатывать вложенность (а если ими нельзя, то чем можно?).
2Nostromo: читал какие-то мгушные лекции, не очень-то понятно. Не могли бы назвать хорошего лектора (по формальным языкам)?
Жаль.
Но текст относительно «чистый» получается. Скорее всего там еще какие-то хитрые алгоритмы поверх идут.
ps но могу и ошибаться
Вообще, я как-то писал морфологический анализатор, так же на основе словаря аот. Но в основе у меня лежал трансдьюсер (finite state transducer), базу не использовал. У этого подхода есть плюсы, но есть и минусы. Если интересно — могу подробней по почте.
Здесь же можно использовать просто рандом.
Надо сказать, писал я этот код больше года назад. Сейчас вижу, что функция unirand могла бы быть более прозрачна.
Но дело похоже в другом: когда «красил» код, похоже, некоторые символы пропали. На этом месте должны были стоять нули:
def unirand(seq):
sum_, freq_ = 0, 0
for item, freq in seq:
sum_ += freq
rnd = uniform(0, sum_)
for token, freq in seq:
freq_ += freq
if rnd < freq_:
return token
Ту же статью можно глянуть тут: linguis.ru/art/trigram, там корректно.
Кстати, может кто знает, как раскрасить питоновский код на хабре? Встроенными средствами у меня не получилось.
Лично мне проще воспринимать подобные модели просто как направленный взвешенный граф, где дуги маркированны вероятностями перехода на следующее состояние.
Вообще, мне не лень его написать :), но я на вскидку не вижу чем этот модуль будет полезен.