Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2008, 20:32   #1
vince
 
Регистрация: 05.12.2008
Сообщений: 5
Радость [Delphi] Выделение частей речи в тексте

Ребята! Помоги мне пож-ста с написанием проги. Мне нужно, чтобы прога выделяла части речи из текста, например, сущ-ые, глаголы, прилагательные. Как и каким образом это можно сделать?
vince вне форума Ответить с цитированием
Старый 05.12.2008, 20:35   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Первое, что приходит в голову - по окончаниям. Но могут быть нестыковки.
Задача очень не простая.
Arigato вне форума Ответить с цитированием
Старый 05.12.2008, 20:40   #3
vince
 
Регистрация: 05.12.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Первое, что приходит в голову - по окончаниям. Но могут быть нестыковки.
Задача очень не простая.
Я начал проверять по окончаниям, но например окончание у глаголов -АЛ, также есть и в сущ-ых( напр, генерАЛ). Также с прилагательными....
vince вне форума Ответить с цитированием
Старый 05.12.2008, 20:44   #4
vince
 
Регистрация: 05.12.2008
Сообщений: 5
По умолчанию

[I]procedure TForm1.BitBtn7Click(Sender: TObject);
var i,j:integer; b,bb,bbb,bb1,prist,prist3,prist2,pr ist4,syf3,syf7:string;
begin
for i:=0 to Memo1.Lines.Count-1 do
begin
b:=copy(Memo1.Lines[i],length(Memo1.Lines[i])-1,2);
bb:=copy(Memo1.Lines[i],length(Memo1.Lines[i])-2,3);
bb1:=copy(Memo1.Lines[i],length(Memo1.Lines[i])-3,4);
bbb:=copy(Memo1.Lines[i],length(Memo1.Lines[i])-3,5);
syf3:=copy(Memo1.Lines[i],length(Memo1.Lines[i])-3,2); //2 буквы перед окончанием из 2 букв
syf7:=copy(Memo1.Lines[i],length(Memo1.Lines[i])-4,2); //2 буквы перед окончанием из 3 букв
prist2:=copy(Memo1.Lines[i],1,1); {из 1 буквы}
prist3:=copy(Memo1.Lines[i],1,2); {из 2 букв}
prist:=copy(Memo1.Lines[i],1,3); {из 3 букв}
prist4:=copy(Memo1.Lines[i],1,4); {из 4 букв}

{проверяю глаголы}
if
((bb='ать') and (bbb <> 'цать'))or (bb='еть') or (bb='ить') or(bb='оть')
or (bb='уть') or (bb='ють') or(bb='ыть') or (bb='ять')
or (bb='ете')or (bb='ите') or (bb='ает')
or (bb='ишь')or(bb='ешь')or (bb='нул') or (bb='ули')
or (bb='ись') or (bb='йти')
or (((bb='уть') or (bb='ать')or (bb='ить')or (b='ем') or(b='ал') or (b='ил')or (b='ел'))
and ((prist2='с') or (prist2='в') or (prist3='от')or (prist3='об')or (prist3='со')or (prist3='за')or (prist3='по')
or (prist3='до') or (prist='при') or(prist='пре') or (prist='под') or (prist='обо') or(prist4='пере') ))

or (((bb='уть') or (bb='ать')or (bb='ить')or (b='ем') or(b='ал') or (b='ил')or (b='ел'))
and ((prist2='С') or (prist2='В') or (prist3='От')or (prist3='Об')or (prist3='Со')or (prist3='За')or (prist3='По')
or (prist3='До') or (prist='При') or(prist='Пре') or (prist='Под') or (prist='Обо') or(prist4='Пере') ))

or ((b='ть') and (((syf3='ив') or (syf3='ыв')) and ((prist='под') or(prist='при') or (prist='Под') or(prist='При') )))
or ((bb='ать') and (((syf7='ив') or (syf7='ыв')) and ((prist3='По')or (prist3='по') )))
or ((bb='ать') and ((syf7='ов') or (syf7='ев') or (syf7='ич')))
or ((b='ся') and ((prist4='пере') or (prist4='Пере')) )
or ((b='ть') and (syf3='ну'))
or ((b='ал') and ((syf3='ыв') or (syf3='ив')))
or (bb1='ться') or (bb='тся')
and (Memo1.Lines[i] <> Memo4.Lines[j])

then Memo8.Lines.add(Memo1.Lines);
vince вне форума Ответить с цитированием
Старый 05.12.2008, 20:45   #5
vince
 
Регистрация: 05.12.2008
Сообщений: 5
По умолчанию

Вот, что только приходит в голову насчет глаголов...
Может кто то может подсказать, что дальше нада сделать
vince вне форума Ответить с цитированием
Старый 05.12.2008, 21:50   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Всегда будут исключения.
Может это решается полной базой слов?
Arigato вне форума Ответить с цитированием
Старый 05.12.2008, 21:58   #7
vince
 
Регистрация: 05.12.2008
Сообщений: 5
Радость

Цитата:
Сообщение от Arigato Посмотреть сообщение
Всегда будут исключения.
Может это решается полной базой слов?
Вот что Хз, то ХЗ. и где эту базу взять то?!
vince вне форума Ответить с цитированием
Старый 06.12.2008, 11:11   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

У меня есть база русских слов на, примерно, 200000 слов, но там в перемешку, глаголы, прилагательные и существительные.
В инете поискать можно. Хотя, опять же, в такой базе могут быть далеко не все слова.
Arigato вне форума Ответить с цитированием
Старый 07.12.2008, 23:37   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ребята, да расслабьтесь. Подобные задачи решают целые институты, да и то не очень успешно.
Тут же без ИИ качественно не сделаешь - нужно разбирать предложение по смыслу написанного. одним словарём задачу не решишь (да и со словарём будут проблемы - там же морфология, словообразование :-( )
Пример:
У меня разбилось стекло.
Молоко стекло на пол.
Сыпь была по всему телу.
Сыпь крупу в карман.

и т.д. и т.п.

p.s. поищите на форуме. Точно помню, подобная тема поднималась...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа распознавания русской речи - Комбат denis47 Помощь студентам 10 25.06.2016 22:39
Синтез речи. Создание голосового движка (не русского). Gauss Общие вопросы Delphi 2 21.01.2014 10:12
сортировка частей массива(паскаль) Useless Помощь студентам 1 18.11.2008 09:19
Программа для разпознавания речи Иллидан Софт 3 25.03.2008 20:37
Определить сколько раз встречается в тексте самое короткое слово - Delphi 7 Леди Уинтер Помощь студентам 3 08.01.2008 17:56