Есть ли описание алгоритма mecab (парсер японских слов)?

Есть ли где-нибудь документ, описывающий алгоритм Mecab?

Или кто-нибудь может дать простое описание из одного абзаца или одной страницы?

Мне слишком сложно понять существующий код и то, что содержат базы данных.

Мне нужна эта функция на моем бесплатном веб-сайте и в телефонных приложениях для обучения языкам (www.jtlanguage.com). Я также хочу обобщить его для других языков и использовать уже реализованный мной механизм обнаружения конъюгации, и мне он также нужен без лицензионных ограничений. Поэтому я хочу создать свою реализацию (C #).

У меня уже есть словарная база данных, созданная на основе EDICT. Что еще нужно? База данных частоты использования?

Спасибо.


person jtsoftware    schedule 08.05.2019    source источник


Ответы (1)


Некоторые мысли, которые слишком длинные, чтобы уместиться в комментарии.

§ Какие лицензионные ограничения? MeCab имеет двойную лицензию, включая BSD, так что это настолько свободно, насколько это возможно.

§ Также существует Java-версия Mecab под названием Kuromoji, лицензированная Apache, также очень удобная для коммерческого использования.

§ MeCab реализует технику машинного обучения, называемую условными случайными полями для морфологического анализа ( разделение свободного текста на морфемы) и тегирование части речи (маркировка этих морфем) Японский текст. Он может использовать различные словари в качестве обучающих данных, которые вы видели - IPADIC, UniDic и т. Д. Эти словари представляют собой компиляции морфем и частей речи и являются результатом лингвистических исследований, потраченных на многие человеческие годы. Связанная статья принадлежит авторам MeCab.

§ Другие применили другие мощные алгоритмы машинного обучения к проблеме синтаксического анализа японского языка.

  • Kytea может использовать как вспомогательные векторные машины, так и логистическую регрессию для решения одной и той же проблемы. C ++, Apache под лицензией, и статьи есть, чтобы читать.
  • Rakuten MA находится на JavaScript, также имеет широкую лицензию (опять же Apache) и поставляется с обычным словарем. и облегченный для приложений с ограничениями - хотя он не даст вам читать иероглифы. Здесь вы можете найти академические статьи с описанием алгоритма.

§ Учитывая вышесказанное, я думаю, вы можете видеть, что простых словарей, таких как EDICT и JMDICT, недостаточно для проведения расширенного анализа, который делают эти морфологические синтаксические анализаторы. И эти алгоритмы, вероятно, излишни для других, более простых для анализа языков (то есть языков с пробелами).

Если вам нужна мощь этих библиотек, вам, вероятно, лучше написать микросервис, который запускает одну из этих систем (я написал интерфейс REST для Kuromoji под названием clj-kuromoji-jmdictfurigana) вместо того, чтобы пытаться заново реализовать их на C #.

Однако обратите внимание, что, похоже, существуют привязки C # к MeCab: см. Этот ответ.

В нескольких небольших проектах я просто передаю MeCab, а затем читаю и анализирую его вывод. Мой пример TypeScript с использованием UniDic для Node.js.

§ Но, может быть, вам не нужен полный морфологический разбор и тегирование части речи? Вы когда-нибудь использовали Rikaichamp, надстройку Firefox, которая использует JMDICT и другие общедоступные ресурсы с небольшим весом, чтобы добавить глоссы к тексту веб-сайта? (Также существует версия для Chrome.) Он использует гораздо более простой деинфлектор что откровенно ужасно по сравнению с MeCab et al. но часто может выполнить свою работу.

§ У вас возник вопрос о структуре словарей (вы назвали их «базами данных»). Это примечание от Кимтаро (автора Jisho.org) о том, как добавить собственный словарь в IPADIC, может прояснить, по крайней мере, как работает IPADIC: https://gist.github.com/Kimtaro/ab137870ad4a385b2d79. Другие, более современные словари (я обычно использую UniDic) используют разные форматы, поэтому вывод MeCab отличается в зависимости от того, какой словарь вы используете.

person Ahmed Fasih    schedule 09.05.2019
comment
Спасибо, это очень помогает. Да, я запутался в лицензировании. На самом деле я вспоминал проект NMeCab SourceForge, который является собственной версией C # MeCab, то есть GLPv2. Несмотря на свою мощность, я думаю, что MeCab могла бы работать намного лучше. Мне не нравится, как он разбивает спряженные глаголы. Например, 持 っ て お ら れ ま す разбивается на 持 っ - て - お ら - れ - ま す. В постпроцессоре мне пришлось бы попытаться объединить их заново, поскольку у меня есть код, который распознает 持 っ て и お ら れ ま す и дает информацию о перегибе, используя только EDICT. Я собираюсь изучить его еще немного, прежде чем откажусь и воспользуюсь NMeCab. - person jtsoftware; 09.05.2019
comment
Обновлять. Извините, я снял отметку с этого ответа. Я все еще надеюсь на простое объяснение алгоритма. Документ, хотя и хорошо объясняет проблемы, слишком абстрактен в реальном решении, не говоря уже о том, что на самом деле содержится в словарях и как они используются. Кажется, я мог бы составить график всех допустимых путей в предложении, пометив также неизвестные последовательности символов, а затем использовать какое-то взвешивание, чтобы выбрать лучший путь. Откуда берется вес - это мой самый большой вопрос. Это на основе POS? Мне может понадобиться просканировать код. - person jtsoftware; 09.05.2019
comment
Да, морфемы не идеальны для обучения. Бунсэцу лучше: взгляните на JDep.P, который является постпроцессором C ++ для MeCab, который разбивает морфемы на bunsetesu, который на одном сайте определяется как «фонетический разрыв, состоящий из слова и его послелогов или суффиксов». См. Пример вывода JDep.P по адресу gist.github.com/fasiha/fffa8914d25660859ad92dab. В моем программном обеспечении для изучения языка я использую MeCab с бунсэцу для определения спрягаемых фраз (глагольные фразы, такие как 持 っ て あ ら れ ま す (один бунсэцу с UniDic), и い -адъективные фразы). - person Ahmed Fasih; 10.05.2019
comment
Я надеюсь, что кто-то сможет опубликовать достаточно подробный псевдокод, который позволит нам реализовать полный алгоритм MeCab, но я думаю, что шансы очень малы. И даже если бы они это сделали, потребовалось бы много времени, чтобы реализовать всю линейную алгебру и протестировать ее так же тщательно, как MeCab. Из-за этого и поскольку синтаксический анализ должен происходить только при первоначальном создании текста, мои приложения выполняют сетевой вызов API к микросервису, на котором запущен MeCab + JDep.P (или Kuromoji, как указано в ответе), и который возвращает JSON. Я сохраняю этот вывод в базе данных для всей последующей обработки. - person Ahmed Fasih; 10.05.2019