amajisenapai
@amajisenapai
code for fun

Разбор и анализ текста на японском языке, с чего начать?

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

пример, снизу под sentence analysis, сам саит как пример.
обычное предложение:
私たちは彼をよき先輩として尊敬している。
(были бы в предложении пробелы!!! вопроса бы не было)

подскажите с чего начать, базовые основы, python библиотеки?
как определять грамматические конструкции и правила?

сам пока собираю переводы слов, значение кандзи и т. д. с интернета.
парсю пока все в shelve.
  • Вопрос задан
  • 504 просмотра
Решения вопроса 2
Для начала Вы понимаете, что японская грамматика полностью основывается на определении + определяемом? Даже сложные предложения (сложносочинённые и сложноподчинённые) можно рассматривать как определение одного предложения другим. Причём определение всегда стоит перед определяемым (на самом деле есть исключения, но мы здесь их рассматривать не будем — с ними итак всё понятно, можно будет расширить алгоритм по аналогии).

Если понимаете, я бы предложил такой алгоритм:

1. Вначале разбираем предложение на слова. Делается это от первого символа к последнему. Для реализации алгоритма нужны:
1) Словарь со списком слов, причём в словаре должны быть пометки о частях речи + дополнительная информация, например, v1/v5 для глаголов.
2) Список правил для всех форм для всех частей речи в Вашей программе (делается вручную). Например, прошедшая форма v1-глагола 食べる образуется взятием основы (кот. здесь образуется отбросом る) и добавлением た. Получится 食べた. Благодаря этому, когда мы встретим в речи 食べた, мы сможем понять, что это прошедшая форма глагола 食べる. Именно такой принцип используется в расширении Rikaichan для браузера (которое позволяет наводить указатель мыши на слова и смотреть их значения, а также говорит, в какой форме стоит слово).
3) Список исключений (очень мал)

В Вашем случае после разбора на слова получится такое предложение:
私たちは   彼を   よき   先輩として   尊敬   している

2. Идём с конца (можно и с начала, но для реализации будет проще с конца). В конце у нас ожидаемо стоит сказуемое, являющееся определяемым. Для разбора предложения мы хотим установить зависимости между словами. Это сродно расстановке круглых скобок, чтобы явно обозначить, какое слово/предложение зависит от какого.

Итак, вот пример разбора:
私たちは彼をよき先輩として尊敬している — исходная фраза.
私たちは彼をよき先輩として尊敬   している — выделение первого определяемого. Мы знаем, что это определяемое, т. к. это глагол.
私たちは彼をよき先輩として   尊敬   している — выделение определения. 尊敬 является определением слову している. Мы это узнали, т. к. сущ + する говорит о том, что определение определяет прямо следующее за ним слово, а не более позднее слово или определённую фразу. Скобки не ставим: будем считать, что когда скобок нет, все определения являются определениями последнему слову в этой группе.
私たちは彼をよき   先輩として   尊敬   している — 先として является вторым определением к слову している, т. к. сущとして + глагол говорит о том, что сущとして определяет этот глагол. Аналогично, скобки пока не нужны, т. к. оба этих определения относятся к последнему слову в данной группе.
私たちは彼を   よき   先輩として   尊敬   している — よき является третьим определением к слову している, т. к. наречение + глагол говорит нам об этом.
私たちは   彼を   よき   先輩として   尊敬   している — 彼を является четвёртым определением к слову している, т. к. сущを + глагол говорит нам об этом.
私たちは   (彼を   よき   先輩として   尊敬   している) — 私たちは является определением ко всей впереди-стоящей фразы до конца части сложносочинённого или сложноподчинённого предложения. Об этом нам говорит частица は. Соответственно, мы обязаны поставить здесь скобки, т. к. в противном случае 私たちは указывало бы на слово している, а мы хотим, чтобы оно указывало на фразу 彼をよき先輩として尊敬している. Ну вот и готово, мы сделали разбор фразы!
私たちは(彼をよき先輩として尊敬している) — тоже самое без пробелов.

Пример 2 (более сложный):
趣味を仕事にしたら趣味は無くなることになるだろう (после разбития на слова: 趣味を   仕事に   したら   趣味は   無く   なる   ことに   なるだろう)

趣味を仕事にしたら趣味は無くなることに   なるだろう — выделение первого определяемого.
趣味を仕事にしたら趣味は無くなる   ことに   なるだろう — слово ことに является определением для なるだろう (об этом нам говорит конструкция "сущに + глагол").
趣味を仕事にしたら趣味は無く   (なる   ことに)   なるだろう — слово なる является определением для こと (об этом нам говорит конструкция "глагол + сущ"). Поскольку なる относится не к последнему слову в данной группе, мы вынуждены поставить скобки, чтобы было видно, что なる относится к ことに. Как результат у нас вышло, что вся фраза なることに является определением слова なるだろう. В реальной жизни оно так и есть, значит мы всё делаем правильно.
趣味を仕事にしたら趣味は   ((無く   なる)   ことに)   なるだろう — слово 無く является определением для なる (об этом нам говорит конструкция "наречие + глагол"). Обозначаем это с помощью скобок, т. к. если бы мы их не поставили, 無く прилегало бы к конечному слову なるだろう. Кстати, ВАЖНО: мы видим, что это третье слово подряд, которое прилегает прямо к следующему слову (т. е. имеем конструкцию вида a → b → c → d → e и т. д.). В этом нет ничего удивительного: большинство слов будут прилегать прямо к следующему, и есть только 4 исключения из этого правила (будут описаны ниже).
趣味を仕事にしたら   趣味は   (((無く   なる)   ことに)   なるだろう) — слово 趣味は прилегает к всей следующей части сложносочинённого предложения. Об этом нам говорит частица は — она вводит тему для всего последующего предложения, а значит сущは является определением для всего предложения. Обозначаем это скобками: явно стало видно, что 趣味は определяет всё, что стоит далее.
趣味を仕事に   したら   (趣味は   (((無く   なる)   ことに)   なるだろう)) — здесь мы видим глагол в условной форме, что говорит нам о сложносоч/сложноподч предложении, а значит данный глагол снова определяет всё предложение. Соответственно, берём всё предложение в скобки.
趣味を   (仕事に   したら)   (趣味は   (((無く   なる)   ことに)   なるだろう)) — слово 仕事に определяет したら, ибо это сущに + глагол.
(趣味を   仕事に   したら)   (趣味は   (((無く   なる)   ことに)   なるだろう)) — слово 趣味を также определяет したら, ибо это сущを + глагол. Впихиваем его внутрь скобки.
Ну вот и готово. Мы получили все зависимости слов в предложении. Для каждого слова или подфразы мы можем сказать, какое слово/подфразу она определяет. Скобки полностью расставлены. Если убрать пробелы, получится (趣味を仕事にしたら)(趣味は(((無くなる)ことに)なるだろう)). Зная эти зависимости и значения слов, компьютер может понять смысл фразы.

В большинстве случаев определения определяли прямо следующее за ним слово. Но есть случаи, когда это не так:
1. は — влияет на всё последующее (до конца части сложного предложения).
2. Сложные предложения с помощью частиц けど、のに、から、ので и форм したら、すれば — также влияет на всё последующее.
3. Перечисления — несколько определений указывают на одно и тоже слово, т. к. принцип "влияет прямо на следующее слово" здесь немного нарушается.
4. Большая сложность с частицей が. Здесь уже объяснять не буду — додумайте сами. PS. Вроде, неодназностей нет в конструкциях типа сущのない/сущがない. Вероятно, кроме ない можно использовать и другие глаголы.
5. Может быть есть и другие случаи, про которые я не вспомнил.

В целом в итоге принцип должен понятен, думаю.

Разбирать предложение необязательно с конца, можно и с начала, но так может быть сложнее для реализации. Примеры:
私たちは彼をよき先輩として尊敬している — исходная фраза
私たちは   <彼をよき先輩として尊敬している — отделяем первое определение. Также мы встретили частицу は, которая является особым случаем, поэтому введём треугольную скобку, которая говорит о том, что текущее определение влияет на всю фразу (до конца части сложного предложения). Закроем эту скобку, когда достигнем этой части. Положим эту скобку в стек: когда достигнем конца части сложного предложения, закроем скобку на этом месте и уберём её из стека.
私たちは   <[彼を   よき先輩として尊敬している — находим новое определение 彼を. Мы видим, что это именно определение, а не определяемое, т. к. это сущを. Поскольку текущая группа ещё не завершилось (определяемое ещё не найдено), введём квадратные скобки, которые сообщают нам, что мы в поиске определяемого. Аналогично, положим эту скобку в стек, чтобы успешно закрыть её, как только мы найдём первое определяемое. PS. На самом деле аналогичную операцию мы обязаны были проделать и с 私たちは, но поскольку в японском не бывает более одного определения на は (т. е. не бывает более одной темы), я опустил квадратную скобку — её роль итак успешно выполнит треугольная скобка.
私たちは   <[彼を   よき   先輩として尊敬している — находим новое определение (よき). Мы знаем, что это определение, т. к. это наречие.
私たちは   <[彼を   よき   先輩として   尊敬している — находим новое определение (先輩として).
私たちは   <[彼を   よき   先輩として   尊敬   している — находим новое определение (尊敬).
私たちは   <[彼を   よき   先輩として   尊敬   している] — наконец-то находим определяемое. Убираем из стека "[" и закрываем квадратную скобку. В стеке остаётся "<".
私たちは   <[彼を   よき   先輩として   尊敬   している]> — мы видим, что часть сложного или несложного предложения закончилась: это является триггером к закрытию треугольной скобки в стеке.
私たちは   ((彼を   よき   先輩として   尊敬   している)) — разбор предложения окончен. Заменяем треугольные и квадратные скобки на круглые.
私たちは   (彼を   よき   先輩として   尊敬   している) — упрощаем выражение (удаляем лишние скобки).
Готово. Без пробелов будет 私たちは(彼をよき先輩として尊敬している). Мы можем использовать этот результат для компьютерного понимания речи. Как видно, результат вышел аналогичным, как когда мы делали разбор с конца, а не с начала предложения. При этом писать алгоритм именно для компьютера было немного сложнее.

[ПРОДОЛЖЕНИЕ ОТВЕТА В ПЕРВЫХ КОММЕНТАРИЯХ]
Ответ написан
longclaps
@longclaps
Из книжки Python.Text.Processing.with.NLTK.2.0.Cookbook.Jacob.Perkins.2010.pdf
>>> babelfish.available_languages
['Portuguese', 'Chinese', 'German', 'Japanese', 'French', 
'Spanish', 'Russian', 'Greek', 'English', 'Korean', 'Italian']

Копай NLTK, там есть api к Babelfish, может есть и еще к чему.

Кстати тыц - хоть здесь и много битых ссылок, но хотя бы видны названия. Ну и тыц.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы