Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

LLlapucT

Задача о морфологическом разборе слова (Visual Prolog 5.2)

Рекомендованные сообщения

Великие программисты продоты, хелпуйте, нужно решить задачу:

Выделить в заданном слове приставку, корень, суффикс и окончание. :hmm:

Поделиться сообщением


Ссылка на сообщение

это практически нереально

все лингвистические задачи ниибаца трудные.

Тут человек сам не всегда знает, как правильно выделить корень, а ты хочешь комп научить.


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

предлагаю создать списки приставок, корней, суффов и окончей

а потом генерить случайные слова и по совпадениям выделять части слова :nate:


1319992710_flyingburningcat.gif

Поделиться сообщением


Ссылка на сообщение

жаль только корней так много, что не сосчитать, да еще и чередования всякие

А суффиксы могут включать в себя вообще только отдельные звуки, по типу  - (кому?) ча[йа]м


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

предлагаю создать списки приставок, корней, суффов и окончей

а потом генерить случайные слова и по совпадениям выделять части слова :nate:

а если как нибудь обойтись без списка корней, проверить на всё: приставку, суф, окончание, а то, что останется записать как корень?

жаль только корней так много, что не сосчитать, да еще и чередования всякие

А суффиксы могут включать в себя вообще только отдельные звуки, по типу  - (кому?) ча[йа]м

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

Поделиться сообщением


Ссылка на сообщение

Для машин, подобного рода задачи решаются только словарем. Не видел еще ни одного стоящего алгоритма для морфемного анализа.


 

влюбляемся

n4e8e0dcca2bcb.gif

 

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

Поделиться сообщением


Ссылка на сообщение

а кто нибудь код, похожий на рабочий, может намошнить?  :nate:

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

подсказали алгоритм

берешь слово(W), отделяешь от его начала по одному символу и прикрепляешь эти символы к другой строке(P), изначально пустой. Каждый раз после прикрепления символа ищешь слово P в базе данных приставок. База данных приставок заполняется сразу(найдешь полный список в учебнике русского языка) :

p("пре").

p("при").

и т.д.

Если слово P совпало с какой-то приставкой - то больше искать не надо(приставка найдена). Приставка - это P, а то, что осталось от W - это остальная часть слова.

 

Затем от W аналогичным образом отделяешь окончание и суффикс. То что останется - это основа.

 

Очевидно, что на словах типа "приз" такой алгоритм работать не будет, он выделит приставку ПРИ и основу З. Но, скорее всего, вам для сдачи лабораторной надо - тогда и так сойдет.

кто нибудь может это представить в виде кода?

Поделиться сообщением


Ссылка на сообщение

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

 

КОД

domains

morf=morf(prist,kor,suf,okonch,rod,chislo)

prist=prist(string)

kor=kor(string)

suf=suf(string)

okonch=okonch(string)

rod=rod(string)

chislo=chislo(string)

slist=string*

 

facts

koren(string)

pristavka(string)

suffiks(string)

okonchanie(string,rod,chislo)

 

clauses

koren("uch").

 

pristavka("vy").

pristavka("iz").

pristavka("ob").

 

suffiks("i").

suffiks("l").

 

okonchanie("a",rod("zh"),chislo("ed")).

okonchanie("o",rod("sr"),chislo("ed")).

okonchanie("i",rod("net"),chislo("mn")).

 

predicates

analiz(string,morf)

nondeterm vydelit_pristavku(string,prist,string)

nondeterm vydelit_koren(string,kor,string)

nondeterm vydelit_suffiks(string,suf,string,string)

nondeterm vydelit_okonch(string,okonch,rod,chislo,string)

 

clauses

analiz(Slovo,morf(Prist,Koren,Suf,Okonch,Rod,Chislo)):-

vydelit_pristavku(Slovo,Prist,Slovo1),

vydelit_koren(Slovo1,Koren,Slovo2),

vydelit_suffiks(Slovo2,Suf,"",Slovo3),

vydelit_okonch(Slovo3,Okonch,Rod,Chislo,Ost),

Ost="",

!.

 

vydelit_pristavku(Slovo,prist(Prist),Ost):-

pristavka(Prist),

str_len(Prist,Len),

frontstr(Len,Slovo,Prist1,Ost),

Prist1=Prist.

vydelit_pristavku(Ost,prist("net"),Ost).

 

vydelit_koren(Slovo,kor(Koren),Ost):-

koren(Koren),

str_len(Koren,Len),

frontstr(Len,Slovo,Koren1,Ost),

Koren1=Koren.

 

vydelit_suffiks(Slovo,Suffiks,Tek,Ost):-

suffiks(Suf),

not(searchstring(Tek,Suf,_)),

str_len(Suf,Len),

frontstr(Len,Slovo,Suf1,Slovo1),

Suf1=Suf,

concat(Tek,Suf,Tek1),

vydelit_suffiks(Slovo1,Suffiks,Tek1,Ost).

vydelit_suffiks(Slovo,suf(Suffiks),Suffiks,Slovo):-Suffiks<>"".

vydelit_suffiks(Slovo,suf("net"),"",Slovo).

 

vydelit_okonch(Slovo,okonch(Okonch),Rod,Chislo,Ost):-

okonchanie(Okonch,Rod,Chislo),

str_len(Okonch,Len),

frontstr(Len,Slovo,Okonch1,Ost),

Okonch1=Okonch.

vydelit_okonch(Slovo,okonch("net"),rod("muzh"),chislo("ed"),Slovo).

 

goal

analiz("izuchila",X).

 

помогите сделать так, чтобы корень писался как остаток после нахождения приставок, суффиксов и окончания

(базу  приставок, суффиксов и окончаний офк дополню потом)

Поделиться сообщением


Ссылка на сообщение

морф - корень, дизайнер - окончание, приставки и суффикса нет, и не благодарите :avtorklif:

Поделиться сообщением


Ссылка на сообщение

морф - корень, дизайнер - окончание, приставки и суффикса нет, и не благодарите :avtorklif:

слишком тонко или я не догнал смысловой нагрузки в твоем предложении :avtorklif:

Поделиться сообщением


Ссылка на сообщение

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

 

ЧЁТКО

domains
morf=morf(prist,kor,suf,okonch,rod,chislo)
prist=prist(string)
kor=kor(string)
suf=suf(string)
okonch=okonch(string)
rod=rod(string)
chislo=chislo(string)
slist=string*

facts
koren(string)
pristavka(string)
suffiks(string)
okonchanie(string,rod,chislo)

clauses
pristavka("vy").
pristavka("pere").
pristavka("na").
pristavka("iz").
pristavka("ob").
pristavka("bez").
pristavka("bes").
pristavka("za").
pristavka("pre").
pristavka("pri").
pristavka("u").
pristavka("s").
pristavka("pod").

suffiks("ennost").
suffiks("onn").
suffiks("enn").
suffiks("ann").
suffiks("lan").
suffiks("ak").
suffiks("st").
suffiks("ek").
suffiks("k").
suffiks("v").
suffiks("i").
suffiks("l").
suffiks("a").

okonchanie("yi",rod("muzh"),chislo("ed")).
okonchanie("oi",rod("muzh"),chislo("ed")).
okonchanie("ii",rod("muzh"),chislo("ed")).
okonchanie("ye",rod("net"),chislo("mn")). 
okonchanie("a",rod("zh"),chislo("ed")).
okonchanie("o",rod("sr"),chislo("ed")).
okonchanie("i",rod("net"),chislo("mn")).
okonchanie("y",rod("net"),chislo("mn")).

predicates
analiz(string,morf)
nondeterm vydelit_pristavku(string,prist,string)
nondeterm vydelit_koren(string,kor,string)
nondeterm vydelit_suffiks(string,suf,string)
nondeterm vydelit_okonch(string,okonch,rod,chislo,string)

clauses

analiz(Slovo,morf(Prist,kor(Ost),Suf,Okonch,Rod,Chislo)):-
        vydelit_pristavku(Slovo,Prist,Slovo1),
        vydelit_okonch(Slovo1,Okonch,Rod,Chislo,Slovo2),
        vydelit_suffiks(Slovo2,Suf,Ost),
        !.
        
vydelit_pristavku(Slovo,prist(Prist),Ost):-
        pristavka(Prist),
        concat(Prist,Ost,Slovo).
vydelit_pristavku(Ost,prist(""),Ost).                

vydelit_koren(Slovo,kor(Koren),Ost):-
        koren(Koren),
        concat(Koren,Ost,Slovo).
        
vydelit_suffiks(Slovo,suf(Suffiks),Ost):-
        suffiks(Suf),
        concat(Slovo1,Suf,Slovo),
        vydelit_suffiks(Slovo1,suf(Suffiks1),Ost),
        concat(Suffiks1,Suf,Suffiks),!.
vydelit_suffiks(Slovo,suf(""),Slovo).

vydelit_okonch(Slovo,okonch(Okonch),Rod,Chislo,Ost):-
        okonchanie(Okonch,Rod,Chislo),
        concat(Ost,Okonch,Slovo).
vydelit_okonch(Slovo,okonch(""),rod("muzh"),chislo("ed"),Slovo).

goal
analiz("izuchila",X).
%analiz("perelez",X).
%analiz("zamechatelnyi",X).

 

Поделиться сообщением


Ссылка на сообщение

ага


мой - железнопопик

в мире доты неизвестен как LadyLama

 

Положение о медведях

1
тот который в очках должен быть первым, типо пиздатый

негр в середине крутит педали

с топором сзади контролит негра

 

 

2

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

 

 

Eclips: "Я ХЭД ГЛОБАЛ МОДЕРАТОР СУКА"

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...