2009-05-02 3 views
7

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

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

Тем не менее, моя проблема связана с фактической кодировкой. Мне нужно манипулировать строками текста, которые являются кана. Например:

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

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

+0

Вы ищете в какой-то форме, вытекающие? Простите мое невежество, но это выглядит сложнее (для логотипа), чем то, что вы делаете для обычного языка на основе алфавита. – dirkgently

+0

В этом примере нет корневого слова в основном け す, но я меняю す на し и добавляю て. Другой пример: の む изменение む на ん で, чтобы получить の ん で. Простым примером может быть просто.た べ る, который вы бы бросили る и добавили て, чтобы получить た べ て. Надеюсь, это имеет смысл. – percent20

+0

Ваши примеры (как ни странно!) Дают мне понятие (которое, я уверен, неверно), что все, что вам нужно, это строка replacemnet. Даже регулярное выражение (Unicode) будет работать. – dirkgently

ответ

4

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

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

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

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

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

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

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

На самом деле, прочитав это и поговорив с другом, я снова попытался выполнить базовые манипуляции с строкой b «все это строка», и это сработало. Я понятия не имею, что я делаю, убил первую попытку, но я рад, что это было так просто и неловко, потому что это не работает в первый раз. Спасибо за ответ. – percent20

0

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

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

+0

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

1

Ваш вопрос совершенно не ясен для меня.

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

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

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

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

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

+0

Извините, мой вопрос - это что-то вроде двух вещей в одном. Я нервничал, чтобы начать две разные темы, поэтому я объединил «Что такое некоторые советы для работы с японским языком» и «Как я могу выполнить xyz». Есть ли еще какие-либо советы, которые вы можете предложить своим опытом, было бы здорово. Я не думал о том, чтобы отрываться от слов, не так далеко. В основном я после того, как манипулировать отдельными словами. Однако любые советы по программированию с японским langauge полезны и оценены. Честно говоря, я пытался избежать сопоставления файлов с помощью unicode, но похоже, что нужно использовать один или оба. – percent20

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

MeCab (первоначально на SourceForge) является удивительным: она позволяет принимать текст, как,

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

и получить все виды большой информации обратно

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

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

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

Однако документация все на японском языке, и это немного сложно настроить и выяснить, как форматировать вывод так, как вы хотите. Есть пакеты, доступные для Ubuntu/Debian, и привязки в куче языков, включая Perl, Python, Ruby ...

Апт-РЕПО для убунта:

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: ChaSen, который был написан много лет назад автором MeCab (который, кстати, работает сейчас в google), и Kakasi, который намного менее мощный.

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

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

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

+0

Хотел бы я отметить это как ответ. :(Спасибо за отличную информацию. Я только собирался выполнять свои собственные процедуры сопряжения как упражнение по программированию и лучше изучать ядро ​​вокруг японского langauge. Если я получу дальше на японский язык, я обязательно посмотрю на сегментатора. Спасибо. – percent20

+1

Удивительный пост, спасибо за это. Скалы MeCab – aehlke

+0

Наткнулся на MeCab, играя с C#. Просто хотел добавить, что это потрясающе. Также есть веб-сервис MeCab @ http://mimitako.net/api/mecapi.cgi. О, и «неофициальные» ссылки на C# @ http://en.sourceforge.jp/projects/mecabdotnet/. Cheers! –

2

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

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 глаголов.

0

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

псевдокод:

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. 

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

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

-2

Попробуйте установить мой драгоценный камень (rom2jap). Это в рубине.

gem install rom2jap 

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

require 'rom2jap' 
Смежные вопросы