- PVSM.RU - https://www.pvsm.ru -
Последнее время на Хабре зачастили статьи про обработку естественного языка.
И так уж совпало, что последнее время я работаю в этой области.
Был очень хорошо освещен sentiment analysis [1], и теггер частей речи pymorphy [2].
Но мне хотелось бы рассказать, какие средства для NLP использовал я, и что я нашел нового, чего здесь еще не было
Первое, Я был удивлен что никто не упомянул про nltk [3], очень полезная вещь. Особенно если вас интересует не русский язык, а другие европейские. Среди умений
А самое главное — отличное пособие для начинающих cookbook [4]. При чем порог вхождения очень низкий не обязательно даже знать сам python, потому что в книжке все очень подробно разжевано. Но без английского не обойтись. Есть правда еще вариант перевода на японский [5], если вы конечно знаете язык. На самом деле там есть очень полезная глава, особенности nltk, при работе с японским, которая должна очень помочь, для разбора языка с Иероглифами.
В общем то все из вышеперечисленного не работает с русским языком что обидно. Сейчас идет процесс перевода nltk cookbook на русский, об этом можно почитать и помочь в google группе [6]
Но самое большое сокровище, которое я нашел в интернете, это freeling [7]
Freeling это библиотека для обработки текстов. Написана на С++, за счет чего имеет не плохую скорость работы. А так же имеет API на всех (ну или почти на всех) языках.
Основные возможности FreeLing:
В настоящее время поддерживаются испанский, каталанский, галисийский, итальянский, английский, русский, португальский и валлийский. К сожалению русский язык обделили и для него не работает распознование и классификация сущностей, но определение частей речи из коробки уже очень неплохо. Подробней о «кросс-язычности» [8].
Что больше всего меня удивило, то что я почти не нашел упоминаний о freeling'е в рунете, при том что есть хороший мануал на русском [9].
Для чего же мне пригодились эти инструменты.
Задача состояла в отнесении текстов к той или иной категории причем автоматически. Для этого первые тексты были протеггированны и отнесены к категориям руками(корпусом назвать это сложно). Новые тексты уже разбирались автоматически, сначала RegExp для выделения нужных тегов по словарику. Потом текст доразбирался при помощи Freeling, сюда входит токенизация и разбор на части речи. И в таком виде хранилось.
Следующий шаг состоял в том, что для каждой категории обучался свой классификатор, к тому моменту с темой классификации был знаком очень поверхностно(спасибо Irokez [10] за статью). По этому использовал, то что первую под руку попалось, Наивный байесовский классификатор из nltk, в качестве параметров(фич), в него передавалось слова по одному(униграммы) и теги, при этом количество теггов удваивалось, так как явно задать веса в Наивном классификаторе нельзя, а теги, намного информативней простых слов. А части речи использовались для фильтрации лишних слов: местоимений, числительных, междометий(был не важен эмоциональный окрас) итд.
Автор: briskly
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/13305
Ссылки в тексте:
[1] sentiment analysis: http://habrahabr.ru/post/149605/
[2] pymorphy: http://habrahabr.ru/post/49421/
[3] nltk: http://ru.wikipedia.org/wiki/Natural_Language_Toolkit
[4] cookbook: https://sites.google.com/site/naturallanguagetoolkit/book
[5] японский: http://www.oreilly.co.jp/books/9784873114705/
[6] google группе: https://groups.google.com/forum/?fromgroups#!forum/nltk-russian
[7] freeling: http://nlp.lsi.upc.edu/freeling/
[8] «кросс-язычности»: http://nlp.lsi.upc.edu/freeling/doc/userman/html/node5.html
[9] русском: http://nlp.lsi.upc.edu/freeling/doc/tagsets/tagset-ru.html
[10] Irokez: http://habrahabr.ru/users/irokez/
Нажмите здесь для печати.