Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Выделение частей речи из текста ;)


Автор: vince 1.12.2008, 21:17
Ребята! Помогите пож-ста сделать прогу, которая выделяла бы существительные, глаголы и всякую такую хренотень! Зачет никак получить не могу :(

Автор: mr.Anderson 1.12.2008, 22:03
А поточнее нельзя? Полноценный лексический анализатор - штука сложная.

Автор: vince 1.12.2008, 22:10
Поточнее : Дан текст. При нажатии кнопки чтобы  выдавало, что из текста является существительным. Я пытаюсь с делать со словарем, но это ###. Там все существительные в именительном падеже и единст. числа. А препод желает увидеть алгоритм, определяющий части речи.... Кароче я в замешательстве...  Помогите чем можетеsmile

Добавлено через 1 минуту и 2 секунды
И есче, кто нить встречал словарик глаголов?! Если встречал, то киньте ссылочку плиз ;)

Автор: mr.Anderson 1.12.2008, 22:19
Словарь Даля глянь. Там чего только нет... По алгоритму - сложно сказать, теряюсь в догадках... Словарь явно не катит, слишком большой расход памяти, но как еще, с другой стороны... на признаках особо базироваться не получится, ибо ни вопрос не задашь, ничего...

Автор: Данкинг 1.12.2008, 22:28
Цитата(vince @  1.12.2008,  22:10 Найти цитируемый пост)
А препод желает увидеть алгоритм, определяющий части речи

Препод вообще сам способен придумать подобный алгоритм? Мне кажется, что нет, тем более в русском языке. Словарь вот такой могу дать, только вот части речи там не обозначены, но вдруг ты что-нибудь придумаешь...
http://openfile.ru/139317/

Автор: vince 1.12.2008, 22:48
Есче вопросик, вот пишу такую штуку,чтоб сравнить строки из Мемо1 и Мемо2, причем строку из Мемо2 Хочу сравнить без последнего символа, и Делфи выдает ошибку.... Что тут не так?! 

(Memo1.Lines[i] = delete(Memo2.Lines[j],length(Memo2.Lines[j])-1,1))

Автор: Данкинг 1.12.2008, 22:52
Цитата(vince @  1.12.2008,  22:48 Найти цитируемый пост)
Хочу сравнить без последнего символа, и Делфи выдает ошибку.... Что тут не так?! 

1. Один топик - один вопрос;
2. Какую именно ошибку - не судьба написать? smile Проще сначала знать ошибку, а затем уже разбирать код.

Автор: vince 1.12.2008, 23:01
procedure TForm1.BitBtn1Click(Sender: TObject);
var
buf:string[80];
j:integer;
begin
    assignfile(f,'g0.txt');
     reset(f);
     while not EOF(f) do
     begin
     readln(f,buf);
 Memo1.Lines.add(buf);
    end;
assignfile(g,'ru.txt');
reset(g);
while not EOF(g) do
  begin
  readln(g,buf);
  Memo2.Lines.add(buf);
end;
for i:=0 to Memo1.Lines.Count do
     for j:=0 to Memo2.Lines.Count do
     if (Memo1.Lines[i] = Memo2.Lines[j])  
     or (Memo1.Lines[i] = delete(Memo2.Lines[j],length(Memo2.Lines[j])-1,1))    //Error: Constant object cannot be passed as var parameter
     then Memo3.Lines.add(Memo1.Lines[i]);
closefile(f);
closefile(g);
end;

Автор: dsx 1.12.2008, 23:02
Нужно каждое слово "разобрать по составу", а потом, на основе полученного набора, в общем случае состоящего из приставки, суффикса и окончания(корень нас не интересует), анализировать, к какой частью речи это слово может быть. Набор возможных приставок, суффиксов, окончаний нужно задать изначально, их не так уж много.

Автор: Данкинг 1.12.2008, 23:04
Код

for i:=0 to Memo1.Lines.Count-1 do
     for j:=0 to Memo2.Lines.Count-1 do

Автор: vince 1.12.2008, 23:15
Цитата(dsx @ 1.12.2008,  23:02)
Нужно каждое слово "разобрать по составу", а потом, на основе полученного набора, в общем случае состоящего из приставки, суффикса и окончания(корень нас не интересует), анализировать, к какой частью речи это слово может быть. Набор возможных приставок, суффиксов, окончаний нужно задать изначально, их не так уж много.

У тебя есть такой разбор написанный на Delphi?! o_0

Добавлено через 2 минуты и 10 секунд
Цитата(Данкинг @ 1.12.2008,  23:04)
Код

for i:=0 to Memo1.Lines.Count-1 do
     for j:=0 to Memo2.Lines.Count-1 do

Не в том загвоздка... Вот это он не хочет принимать:

 delete(Memo2.Lines[j],length(Memo2.Lines[j])-1,1)

Здесь хочу взять слово без последней буквы..вот....

Автор: Данкинг 1.12.2008, 23:21
Цитата(vince @  1.12.2008,  23:15 Найти цитируемый пост)
Вот это он не хочет принимать:

Т.е. саму ошибку ты принципиально написать не хочешь? smile 

Автор: vince 1.12.2008, 23:25
Цитата(Данкинг @ 1.12.2008,  23:21)
Цитата(vince @  1.12.2008,  23:15 Найти цитируемый пост)
Вот это он не хочет принимать:

Т.е. саму ошибку ты принципиально написать не хочешь? smile

 smile 
А вот и она: 

[Error] Unit1.pas(144): Constant object cannot be passed as var parameter {где delete выскакивает}

[Error] Unit1.pas(145): Operator not applicable to this operand type {далее}
 smile 

Автор: Данкинг 1.12.2008, 23:32
Цитата(vince @  1.12.2008,  23:25 Найти цитируемый пост)
Constant object cannot be passed as var parameter 

Да, у меня тоже такая же. Ну, попробуй так:

Код

copy(Memo2.Lines[j],1,length(trim(Memo2.Lines[j]))-1);

Автор: vince 1.12.2008, 23:42
Цитата(Данкинг @ 1.12.2008,  23:32)
Цитата(vince @  1.12.2008,  23:25 Найти цитируемый пост)
Constant object cannot be passed as var parameter 

Да, у меня тоже такая же. Ну, попробуй так:

Код

copy(Memo2.Lines[j],1,length(trim(Memo2.Lines[j]))-1);

Пасиба! Ща ошибка не выскочила ))) Буду продолжать;)

Автор: dsx 1.12.2008, 23:45
Цитата(vince @ 1.12.2008,  23:15)
Цитата(dsx @ 1.12.2008,  23:02)
Нужно каждое слово "разобрать по составу", а потом, на основе полученного набора, в общем случае состоящего из приставки, суффикса и окончания(корень нас не интересует), анализировать, к какой частью речи это слово может быть. Набор возможных приставок, суффиксов, окончаний нужно задать изначально, их не так уж много.

У тебя есть такой разбор написанный на Delphi?! o_0

Нет, это я просто идею предложил smile Могу че-нить накидать, но только на С++(программирование на Дельфи мне не нравится, в свое время напрогался я на нём). 

Кстати, http://forum.sources.ru/index.php?showtopic=213979 обсуждается эта тема. Предлагается анализировать слово в контексте предложения, но это еще сложнее, потому что порядок слов в русском языке не обределен. Поэтому лучше начать с разбора по составу.

Автор: vince 2.12.2008, 04:03
 smile Я так понял, что на сегодняшний день нереально сделать такую прогу? 
Может все таки найдется тот, кто поможет? Люди ау! Дайте что нить ,что поможет....Плиииииз smile 

Автор: kemiisto 2.12.2008, 12:50
Цитата(vince @  2.12.2008,  02:03 Найти цитируемый пост)
Я так понял, что на сегодняшний день нереально сделать такую прогу?

Тебя - явно не реально. Кстати, такая прога называется не лексический, а морфологический анализатор. http://linguist.nm.ru/stemka/stemka.html тут есть немного информации и исходники на C++.

Автор: vince 2.12.2008, 19:24
Цитата(kemiisto @ 2.12.2008,  12:50)
Цитата(vince @  2.12.2008,  02:03 Найти цитируемый пост)
Я так понял, что на сегодняшний день нереально сделать такую прогу?

Тебя - явно не реально. Кстати, такая прога называется не лексический, а морфологический анализатор. http://linguist.nm.ru/stemka/stemka.html тут есть немного информации и исходники на C++.

Кинь плиз еще раз ссылкуsmile не находит!

Автор: kemiisto 2.12.2008, 19:35
Цитата(vince @  2.12.2008,  17:24 Найти цитируемый пост)
Кинь плиз еще раз ссылкуsmile не находит! 

Странно, с утра сайт был. http://74.125.77.132/search?q=cache:UKic0nvA5NwJ:linguist.nm.ru/stemka/stemka.html+stemka&hl=en&ct=clnk&cd=1 кэш гугла.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)