Comments 44
Интересная статья, спасибо. Порадовал простой и логичный подход, с которым отнеслись к делу, и получили простую функциональность, в принципе, простыми методами.
It's just simple working )
It's just simple working )
а что за проект, если не секрет?
как в питоне можно узнать количество занятой текущим процессом памяти. По возможности кроссплатформенно как-нибудь.
Кросплатформенно никак. Пример кода под unix можно посмотреть в Measurement techniques в Efficient String Concatenation in Python.
делал аналогичное, даже послал в проект, они его загрузили к себе: www.aot.ru/download.php (в конце страницы: Alexander Pak's Morphology)
для питона есть очень мощная библиотека для обработки естественного языка: NLTK — www.nltk.org/
для питона есть очень мощная библиотека для обработки естественного языка: NLTK — www.nltk.org/
Ваш пример меня вдохновил, Вы, можно сказать, первопроходец в этом деле) Однозначно в карму +.
Но писал с нуля, т.к. мне так было проще.
А NLTK — это, насколько мне известно, только английский язык, был интересен именно русский.
Но писал с нуля, т.к. мне так было проще.
А NLTK — это, насколько мне известно, только английский язык, был интересен именно русский.
спасибо :)
По поводу NTLK — по-моему, если в него загрузить грамматику и словари для русского языка, то можно работать и с русским. Другое дело, что для русского нет нормальных словарей, и АОТ — действительно, наиболее развитый открытый источник.
По поводу NTLK — по-моему, если в него загрузить грамматику и словари для русского языка, то можно работать и с русским. Другое дело, что для русского нет нормальных словарей, и АОТ — действительно, наиболее развитый открытый источник.
Насчет NTLK мне показалось, что там не совсем так. В ней куча примочек для синтаксиса, статистики и анализа текста, но, что касается именно морфологии, максимум, что я увидел — стеммер Портера, с некими планами добавления Snowball. Думаю, просто для английского языка это не самая актуальная задача, у них и стеммеры работают более-менее нормально для большого круга задач.
Лемматизацию, к примеру, можно выполнить через интерфейс к WordNet базе, там для каждой словоформы хранится лемма. Проблема опять таки в словаре, проект русского ворднета — project.phil.pu.ru/RussNet/ либо умер либо очень медленно развивается.
Отличная статья — куча важной информации.
Бутявки не кузявые, от бутявок дудонятся
Спасибо, очень интересная статья!
С морфологическим анализом есть несколько тонкостей:
1. Неявно присутствует шаг нормализации текста. — Что считать словом и т.д.
2. У Вас м.а. основан на словарях (и в общем-то это правильно), и следовательно, качество м.а. зависит от словаря.
3. Сам по себе анализ слова — не такая сложная вещь. Гораздо сложнее тонкости вида анализа аббревиатур, сложных слов вроде автошкола или бетономешалка(в зависимости от словарей это одно или два слова), а так же проверка корректности вариантов разборов.
Ну и для хранения словарей намного эффективнее использовать DAWG(directed acyclic word graph), ну или если лень писать, то trie. 150M для морфологии — это черезчур :)
С морфологическим анализом есть несколько тонкостей:
1. Неявно присутствует шаг нормализации текста. — Что считать словом и т.д.
2. У Вас м.а. основан на словарях (и в общем-то это правильно), и следовательно, качество м.а. зависит от словаря.
3. Сам по себе анализ слова — не такая сложная вещь. Гораздо сложнее тонкости вида анализа аббревиатур, сложных слов вроде автошкола или бетономешалка(в зависимости от словарей это одно или два слова), а так же проверка корректности вариантов разборов.
Ну и для хранения словарей намного эффективнее использовать DAWG(directed acyclic word graph), ну или если лень писать, то trie. 150M для морфологии — это черезчур :)
Ага, тут неявно подразумевается еще какой-то код, который разберет текст на слова. И что при разборе он вполне может выудить еще часть информации, например, из того, где стоит это слово (например, сразу после точки) и какие в нем буквы — первая заглавная, все заглавные или все строчные.
Тоже думал, что вместо хэшей деревья/графы какого-то рода будут лучше (за наводку на DAWG и trie спасибо, даже, скорее всего, постараюсь прикрутить, как время будет). Просто изначально была позиция делать все максимально просто и «тупо», если результат не будет устраивать, включать голову. Поэтому и на словообразование «забил», оставив такие слова на растерзание предсказателю по префиксу (авто-школа, хотя тут пример не совсем правильный, слово в словаре). Тем более что словообразования ни в lemmatizer, ни в phpmorphy тоже нет, выезжают на словаре (насколько я знаю).
А вот с проверкой корректности и правда что-нибудь придумать бы, «глазами» можно многого не увидеть. Пока вот решил просто попробовать увеличить число «глаз», выложив тут это все хозяйство.
Тоже думал, что вместо хэшей деревья/графы какого-то рода будут лучше (за наводку на DAWG и trie спасибо, даже, скорее всего, постараюсь прикрутить, как время будет). Просто изначально была позиция делать все максимально просто и «тупо», если результат не будет устраивать, включать голову. Поэтому и на словообразование «забил», оставив такие слова на растерзание предсказателю по префиксу (авто-школа, хотя тут пример не совсем правильный, слово в словаре). Тем более что словообразования ни в lemmatizer, ни в phpmorphy тоже нет, выезжают на словаре (насколько я знаю).
А вот с проверкой корректности и правда что-нибудь придумать бы, «глазами» можно многого не увидеть. Пока вот решил просто попробовать увеличить число «глаз», выложив тут это все хозяйство.
Респект. Ход мыслей отличный. Красиво :) И «Пуськи бятые» очень порадовали. :)
UFO just landed and posted this here
>Из текста предсказатель не справился с именем собственным Калуша, с «Калушата»(они стали мужиками «Калуш» и «Калушат»)
«калушата» — это не имя собственное, это «калушонок» во множественном числе, слово образовано от «Калуша», с помощью "-онок" (не помню точно, вся ли эта часть суффикс), во множественном числе превращается в «калушата». (можно сравнить: «зайчонок — зайчата»). А имена собственные всегда с большой буквы пишутся.
«зюмо» — это наречие (сравните с «далеко», «высоко», «хорошо»), а удвоение для усиления используется.
Спасибо за интересную статью, хочу заниматься чем-нибудь на стыке программирования и лингвистики, но пока серьезных знаний ни в первом, ни во втором не хватает.
«калушата» — это не имя собственное, это «калушонок» во множественном числе, слово образовано от «Калуша», с помощью "-онок" (не помню точно, вся ли эта часть суффикс), во множественном числе превращается в «калушата». (можно сравнить: «зайчонок — зайчата»). А имена собственные всегда с большой буквы пишутся.
«зюмо» — это наречие (сравните с «далеко», «высоко», «хорошо»), а удвоение для усиления используется.
Спасибо за интересную статью, хочу заниматься чем-нибудь на стыке программирования и лингвистики, но пока серьезных знаний ни в первом, ни во втором не хватает.
А какое количество слов можно разобрать с помощью словаря?
очень интересная и сложная предметная область, учитывая многообразие русского языка :)
О, спасибо. А то я планировал lemmatizer`ом пользоваться из питоньих программ. А тут, оказывается, уже нативная реализация готова.
По hg.assembla.com/pymorphy отдаётся HTML`ка с Content-Type: text/plain. Это не хорошо.
На главной странице (http://www.assembla.com/wiki/show/pymorphy ?) прошу указать команду для установки последней версии (hg fetch… ?).
На главной странице (http://www.assembla.com/wiki/show/pymorphy ?) прошу указать команду для установки последней версии (hg fetch… ?).
Спасибо, очень интересно.
Я знал ребят, которые знаимались такими вещами, они широко использовали словарь Лебедева scon155.phys.msu.su/eng/lebedev.html, там есть файл с правилами образования совоформ russian.aff, может быть он и вам пригодится.
Я знал ребят, которые знаимались такими вещами, они широко использовали словарь Лебедева scon155.phys.msu.su/eng/lebedev.html, там есть файл с правилами образования совоформ russian.aff, может быть он и вам пригодится.
Может-быть кому-то пригодится содранный с интернета ботом словарик для имён.
Старался, вроде там довольно много понабралось.
Кому понравится — отпишитесь. :)
(UTF-8)
slil.ru/26554601
Старался, вроде там довольно много понабралось.
Кому понравится — отпишитесь. :)
(UTF-8)
slil.ru/26554601
В encode_dicts.py пришлось заменить одну функию:
def convert_file(in_file, out_file, in_charset, out_charset):
text = codecs.open(in_file, «r», in_charset).read()
codecs.open(out_file, «w», out_charset ).write(text)
def convert_file(in_file, out_file, in_charset, out_charset):
text = codecs.open(in_file, «r», in_charset).read()
codecs.open(out_file, «w», out_charset ).write(text)
Постараюсь помочь с развитием проекта. Но как мне видится, это скорее будет форк, заточенный под мои нужды.
Забыли сказать, что Бутявку придумала Людмила Петрушевская, в далёком 1984-м году.
Вот мне интересно… А в каких-нибудь больших опенсорсных проектах использовались серьезные анализаторы грамматики?
Скажем в OO.Org? Я не влезал никогда глубоко в эту тему; но вроде там только чисто орфографическая проверка слов по словарю в наличии, а более глубокой проверки как в Ms Office — нетуть. Или это я от жизни отстал?
Скажем в OO.Org? Я не влезал никогда глубоко в эту тему; но вроде там только чисто орфографическая проверка слов по словарю в наличии, а более глубокой проверки как в Ms Office — нетуть. Или это я от жизни отстал?
А здесь поддерживается буква Ё?
здесь не очень (просто заменяется на е), в github.com/kmike/pymorphy2 — полностью
mystem предлагает следующую тестовую строку:
«В мурелки шлепают пельсиски. В стакелках светится мычай.»
пельсиски — наречие
А я взял в качестве тест-кейсов русские скороговорки:
Почти круто, всегда можно немножко доработать :-)
«В мурелки шлепают пельсиски. В стакелках светится мычай.»
пельсиски — наречие
А я взял в качестве тест-кейсов русские скороговорки:
- Карл у Клары украл кораллы, а Клара у Карла украла кларнет.
кларнет — глагол - Курил турка трубку, клевала курка крупку: не кури, турка, трубки, не клюй, курка, крупки!
клевала — существительное
кури — существительное
клюй — существительное - Наши поезда — самые поездатые поезда в мире, и никакие другие поезда не перепоездадят наши поезда по поездатости.
поездатые — глагол
Почти круто, всегда можно немножко доработать :-)
Не очень интересно: снятия неоднозначности нет; слова, записанные через дефис — не разбираете правильно («человек-акула», «скажи-ка»); не open-source; словари такие же неполные, как и везде («алешенька» — женский род), склонятора нет (видимо, временно?). Не представляю, кому может понадобиться «голый» морфологический разбор в виде сервиса.
Я, понятно, лицо заинтересованное, но в github.com/kmike/pymorphy2 и словари лучше, и предсказатель умнее, и open-source все.
Я, понятно, лицо заинтересованное, но в github.com/kmike/pymorphy2 и словари лучше, и предсказатель умнее, и open-source все.
Это первый уровень, морфологический. Неоднозначность здесь и не должна сниматься.
Она снимается на последующих уровнях — на синтаксическом и семантическом.
Она снимается на последующих уровнях — на синтаксическом и семантическом.
"Алёшенька" по мнению pymorphy2 — вообще краткое прилагательное женского рода.
Parse(word='алёшенька', tag=OpencorporaTag('ADJS femn,sing'), normal_form='алёшенек', score=0.6976744186046512, methods_stack=((<FakeDictionary>, 'алёшенька', 391, 1), (<KnownSuffixAnalyzer>, 'енька')))
А вот тут очень даже неплохо:
Parse(word='человека-акулы', tag=OpencorporaTag('NOUN,anim,masc sing,gent'), normal_form='человек-акула', score=0.4376812425457545, methods_stack=((<HyphenatedWordsAnalyzer>, ((<DictionaryAnalyzer>, 'человека', 488, 1),), ((<DictionaryAnalyzer>, 'акулы', 53, 1),)),))
Вам однозначно огромный + за проделанную работу.
Sign up to leave a comment.
Кузявые ли бутявки, т.е. пишем морфологический анализатор на Python