Советы по программированию на японском языке / Иероглифами [закрыто]

StackOverflow https://stackoverflow.com/questions/815292

Вопрос

У меня есть идея написать несколько веб-приложений, которые помогут мне и, возможно, другим лучше выучить японский, поскольку я изучаю этот язык.

Моя проблема в том, что сайт будет в основном на английском языке, поэтому в нем нужно свободно использовать японские иероглифы, обычно хиригану и катакану, но позже кандзи.Я становлюсь ближе к достижению этой цели;Я выяснил, что страницы и исходные файлы должны иметь типы контента unicode и utf-8.

Однако моя проблема заключается в самом кодировании.Что мне нужно, так это манипулировать текстовыми строками, которые являются kana.Одним из примеров является:

けす Мне нужно взять этот глагол и преобразовать его в te-форму け文て.Я бы предпочел сделать это в javascript, поскольку это поможет в дальнейшем выполнять больше манипуляций, но если мне придется, я просто выполню вызовы DB и сохраню все в DB.

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

Это было полезно?

Решение

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

То, что вы хотите сделать, - это довольно простые манипуляции со строками - за исключением пропущенных разделителей слов, как отмечает Барри, хотя это не техническая проблема.

В принципе, для современного языка программирования с поддержкой Unicode (которым, я полагаю, является JavaScript начиная с версии 1.3) нет реальной разницы между японской каной или кандзи и латинской буквой - все это просто символы.А строка - это просто, ну, строка символов.

Где это становится трудным, так это когда вам приходится конвертировать между строками и байтами, потому что тогда вам нужно обратить внимание на то, какую кодировку вы используете.К сожалению, многие программисты, особенно носители английского языка, склонны замалчивать эту проблему, потому что ASCII является де-факто стандартной кодировкой для латинских букв, а другие кодировки обычно стараются быть совместимыми.Если латинские буквы - это все, что вам нужно, тогда вы можете пребывать в блаженном неведении о кодировках символов, верить, что байты и символы - это по сути одно и то же, и писать программы, которые искажают все, что не является ASCII.

Итак, "секрет" программирования с поддержкой Unicode заключается в следующем:научитесь распознавать, когда и где строки / символы преобразуются в байты и из них, и убедитесь, что во всех этих местах используется правильная кодировка, т.е.тот же, который будет использоваться для обратного преобразования, и тот, который может кодировать все используемые вами символы.UTF-8 постепенно становится стандартом де-факто и обычно должен использоваться везде, где у вас есть выбор.

Типичные примеры (неисчерпывающие):

  • При написании исходного кода с использованием строковых литералов, отличных от ASCII (настройте кодировку в редакторе / IDE)
  • При компиляции или интерпретации такого исходного кода (компилятор / интерпретатор должен знать кодировку)
  • При чтении / записи строк в файл (кодировка должна быть указана где-то в API или в метаданных файла)
  • При записи строк в базу данных (кодировка должна быть указана в конфигурации базы данных или таблицы)
  • При доставке HTML-страниц через веб-сервер (кодировка должна быть указана в заголовках HTML или мета-заголовке страниц;формы могут быть еще более сложными)

Другие советы

  • Везде придерживайтесь Unicode и utf-8.
  • Держитесь подальше от родных японских кодировок:euc-jp, shiftjis, iso-2022-jp, но имейте в виду, что вы, вероятно, столкнетесь с ними в какой-то момент, если продолжите.
  • Познакомьтесь с сегментатором для выполнения сложных задач, таких как анализ POS, сегментация слов и т.д.стандартные инструменты, используемые большинством людей, занимающихся НЛП (обработкой естественного языка), работают с японским языком в порядке популярности / мощности.

МеКаб (первоначально на Кузница источника) это потрясающе:это позволяет вам брать текст, подобный,

「日本語は、とても難しいです。」

и получить обратно всевозможную полезную информацию

kettle:~$ echo 日本語は、難しいです | mecab 
日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
は   助詞,係助詞,*,*,*,*,は,ハ,ワ
、   記号,読点,*,*,*,*,、,、,、
難しい 形容詞,自立,*,*,形容詞・イ段,基本形,難しい,ムズカシイ,ムズカシイ
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
EOS

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

kettle:~$ echo メキシコ料理が食べたい | mecab 
メキシコ    名詞,固有名詞,地域,国,*,*,メキシコ,メキシコ,メキシコ
料理  名詞,サ変接続,*,*,*,*,料理,リョウリ,リョーリ
が   助詞,格助詞,一般,*,*,*,が,ガ,ガ
食べ  動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
たい  助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
EOS

Однако вся документация на японском языке, и ее немного сложно настроить и выяснить, как форматировать выходные данные так, как вы этого хотите.Есть пакеты, доступные для ubuntu / debian, и привязки на множестве языков, включая perl, python, ruby...

Apt-репозитории для ubuntu:

deb http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all
deb-src http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all

Пакеты для установки:$ apt-get install mecab-ipadic-utf8 mecab python-mecab

я думаю, это должно сработать.

Другими альтернативами mecab являются, Чейзен, который был написан много лет назад автором MeCab (который, кстати, работает в Google now), и Какаси, который гораздо менее мощный.

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

MeCab управляется статистически и обучается на большом количестве данных.В нем используется сложная техника машинного обучения, называемая условные случайные поля (CRFs) и результаты действительно неплохие.

Повеселись с японцами.Я не уверен, насколько хорош ваш японский, но если вам нужна помощь с документами для mecab или чего-то еще, не стесняйтесь спрашивать и об этом.Поначалу кандзи могут быть довольно пугающими.

Что вам нужно сделать, так это ознакомиться с правилами грамматики.Имейте массив правил для каждого сопряжения.Давайте возьмем, к примеру, форму 〜て.Псевдокод :

def te_form(verb)
  switch verb.substr(-1, 1) == "る" then return # verb minus ru plus te
  case "る" #return (verb - る) + て
  case "す" #return (verb - す)+して

и т.д.В принципе, разбейте его на глаголы I, II и III типов.

ваш вопрос мне совершенно непонятен.

тем не менее, у меня был некоторый опыт работы с японским языком, поэтому я отдам свои 2 цента.

поскольку в японских текстах нет разделения слов (напримерпробел), самый важный инструмент, который нам пришлось приобрести, - это распознаватель слов на основе словаря.

после того как вы разделили текст, с ним легче манипулировать с помощью "обычных" инструментов.

было только 2 инструмента, которые выполняли вышеуказанное, и в качестве побочного продукта они также работали как теггер (т.е.существительное, глагол и т.д.).

Редактировать:всегда используйте unicode при работе с w languagers.

Если я правильно помню (а я сильно расслабился в тот год, когда изучал японский, так что могу ошибаться), замены, которые вы хотите сделать, определяются одним или двумя последними символами в слове.Если взять ваш первый пример, то любой глагол, оканчивающийся на "す", при таком спрягании всегда будет иметь "して".Аналогично для む -> んで.Не могли бы вы, возможно, установить сопоставление последнего символа (ов) -> сопряженной формы.Возможно, вам придется учитывать исключения, такие как все, что сопряжено с xxって.

Что касается переносимости между языками, вам придется реализовать логику по-разному в зависимости от того, как они работают.Это решение было бы довольно просто реализовать и для испанского языка, поскольку спряжения зависят от того, заканчивается ли глагол на -ar, -er или -ir (с некоторыми глаголами, требующими исключений в вашей логике).К сожалению, это предел моих навыков владения несколькими языками, так что я не знаю, насколько хорошо это будет за пределами этих двух.

Поскольку большинство глаголов в японском языке следуют одному из небольшого набора предсказуемых шаблонов, самый простой и расширяемый способ сгенерировать все формы данного глагола - это заставить глагол знать, какому спряжению он должен следовать, а затем написать функции для генерации каждой формы в зависимости от спряжения.

Псевдокод:

generateDictionaryForm(verb)
  case Ru-Verb: verb.stem + る
  case Su-Verb: verb.stem + す
  case Ku-Verb: verb.stem + く
  ...etc.

generatePoliteForm(verb)
  case Ru-Verb: verb.stem + ります
  case Su-Verb: verb.stem + します
  case Ku-Verb: verb.stem + きます
  ...etc.

Неправильные глаголы, конечно, были бы в особом падеже.

Некоторый вариант этого будет работать для любого другого достаточно обычного языка (т.е.не английский).

Попробуйте установить мой gem (rom2jap).Это на ruby.

gem install rom2jap

Откройте свой терминал и введите:

require 'rom2jap'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top