Форум: "Начинающим";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];
ВнизАлгоритм для выделенияслов из строки Найти похожие ветки
← →
bioss © (2008-12-23 17:59) [0]Ув. Мастера, подскажите пожалуйста простой и эффективный алгоритм выделения слов из строки. Есть переменная содержащая строку, слова этой строки надо занести в массив.
← →
Медвежонок Пятачок © (2008-12-23 18:00) [1]алгоритм?
простой.
находишь очередной разделитель слова и берешь все что слева от него.
← →
Eraser © (2008-12-23 18:12) [2]> [0] bioss © (23.12.08 17:59)
TStringList.Delimiter = ""
+ F1
← →
Медвежонок Пятачок © (2008-12-23 18:14) [3]это не алгоритм :)
← →
Ega23 © (2008-12-23 18:28) [4]
> Ув. Мастера, подскажите пожалуйста простой и эффективный
> алгоритм выделения слов из строки.
Что есть слово?
Есть строки:Мама мыла раму
иМама мыла раму
Ну с ними, в принципе, тривиально. А как быть со строкой:Он закричал: "Стой, собака!"
?
Или:Из компетентных источников (а точнее - ММВБ) стало известно, то курс одной коровы составит 3.14159 барана.
Вот когда ты ответишь себе на все эти вопросы и разрисуешь это на бумажке - я тебя уверяю, самому стыдно станет, что этот вопрос задал.
← →
interbase (2008-12-23 18:48) [5]
> Ega23 © (23.12.08 18:28) [4]
блин, а я уже вторую неделю травы купить не могу:(
← →
Ega23 © (2008-12-23 20:37) [6]
> блин, а я уже вторую неделю травы купить не могу:(
Ты зря смеёшься. Каков должен быть результат "выделения слов из строки" строки ""Пи" примерно равно 3.14159. Вот так!
"
Каков будет разбор на лексемы?{""Пи"", "примерно", "равно", "3", "14159", "Вот", "так"}
?
Или{"Пи", "примерно", "равно", "3.14159", "Вот", "так"}
?
Если ты считаешь, что это очень простая задачка, то ты ОЧЕНЬ сильно заблуждаешься.
← →
Johnmen © (2008-12-23 20:53) [7]
> Ega23 © (23.12.08 20:37) [6]
А что есть "слово"?
← →
Leonid Troyanovsky © (2008-12-23 21:14) [8]
> Johnmen © (23.12.08 20:53) [7]
> А что есть "слово"?
Сначала было Слово.
--
Regards, LVT.
← →
programmer90 (2008-12-23 22:06) [9]
> > А что есть "слово"?
Если за слово условно взять то что разделяется пробелами то можно записть так :var
words:arrray [1..100] of string[40];
wcount:byte; //кол-во слов в тексте
str:string; //сама строка
lstr,i:byte; //длина строки
....
str:=("Мама мыла раму");
lstr:=length(str); i:=1;wcount:=1;
repeat
repeat
words[wcount]:=words[wcount]+str[i]; inc(i);
until (str[i]=" ") or (i>lstr) ;
inc(wcount); inc(i);
until (i>lstr);
К слову, слово состоит из букв, пробел не входит состав слова,и знаки пунктуации тоже)))надо только действовать
Подумайте как усовершенствовать алгоритм, чтобы обрести полную независимость...
← →
Eraser © (2008-12-23 22:17) [10]> [9] programmer90 (23.12.08 22:06)
> К слову, слово состоит из букв, пробел не входит состав
> слова,и знаки пунктуации тоже)))надо только действовать
> Подумайте как усовершенствовать алгоритм, чтобы обрести
> полную независимость...
кстати в Д2009 появился замечательный класс TCharacter, там есть функции TCharacter.IsLetter(), TCharacter.IsLetterOrDigit() и т.п.
← →
Тын-Дын © (2008-12-23 22:38) [11]Супротив всего флуда, что тут был, скажу, что слово - это комбинация буквенных символов. Этого достаточно для реализации алгоритма.
И это достаточно просто.
← →
Германн © (2008-12-24 01:39) [12]
> Тын-Дын © (23.12.08 22:38) [11]
>
> Супротив всего флуда, что тут был, скажу, что слово - это
> комбинация буквенных символов. Этого достаточно для реализации
> алгоритма.
> И это достаточно просто.
>
Тогда дай ссылку на точное определение выдуманного тобой термина "буквенный символ".
Или дай своё описание данного термина. Но тогда уж не обессудь! :)
Отметелим по полной, если что не так скажешь!
А ведь если скажешь, то, уверен, что не грамотно. :)
P.S. Не хочу "враждовать" с тобой. Может тебе лучше перейти на другой форум? Их есть.
← →
Ega23 © (2008-12-24 09:56) [13]
> это комбинация буквенных символовxFF
← →
{RASkov} © (2008-12-24 11:39) [14]> [0] bioss © (23.12.08 17:59)
> Ув. Мастера, подскажите пожалуйста простой и эффективный
> алгоритм выделения слов из строки.
Примерно [2]
т.е. методами TStringList"a можно простенько реализовать задуманное...
Иначе... тут вот недалеко flunkkkk решает подобную задачу.... у него даже код скопитырнутый есть по выдергиванию слов...
Или flunkkkk и биосс - это одно и тоже?)
← →
Медвежонок Пятачок © (2008-12-24 11:42) [15]это все не алгоритмы. алгоритм один единственный.
идем в цикле по строке и ищем очередной разделитель слова или границу слова.
← →
Ega23 © (2008-12-24 11:45) [16]
> А что есть "слово"?
двубайтовое беззнаковое целое?
← →
{RASkov} © (2008-12-24 11:55) [17]> у него даже код скопитырнутый есть по выдергиванию слов...
Т.е. я не хочу сказать, что "его" код хорошее, грамотное и красивое решение...
> идем в цикле по строке и ищем очередной разделитель слова
> или границу слова.
запоминаем начало слова(это когда встречается первый неразделитель) когда после этого встретили разделитель, то
Slovo:=Copy(Text, Nachalo, CurrNomCh-Nachalo);
Nachalo - первый символ в слове.
CurrNomCh - текущий номер символа в общем тексте, например: for CurrNomCh:= 1 to Length(Text) do...
Для этой задачи нужно запоминать последнее и текущее состояние символа в строке(т.е. можно булевый флаг) Примерно:
OldFlag:=Flag;
Flag:=Ch = Razdelitel;
И анализируя их изменения делать выводы о очередном слове....
← →
{RASkov} © (2008-12-24 11:59) [18]> это когда встречается первый неразделитель
> Flag:=Ch = Razdelitel;
Тут я ошибся.... Т.е. тут можно "ловить" как разделители, так и не разделители....
При условии:
"когда встречается первый неразделитель"
должно быть так:
Flag:=Ch <> Razdelitel;
или вариант:
Flag:= not (Ch In Razdelitels);
где Razdelitels - это уже не один, а группа символов разделителей type TRazdelitels = Set of Char;
← →
Ega23 © (2008-12-24 12:38) [19]
> Тут я ошибся.... Т.е. тут можно "ловить" как разделители,
> так и не разделители....
> При условии:
> "когда встречается первый неразделитель"
> должно быть так:Пи = 3.14159
Сколько слов?
← →
{RASkov} © (2008-12-24 12:58) [20]> [19] Ega23 © (24.12.08 12:38)
> Сколько слов?
Зависит от того, какие разделители указаны.... Это в простом случае.... В "сложном", нужно еще учитывать где эти разделители, например, в находясь цифрах - точка может быть и не разделителем...
Автору проще нужно же :)
← →
Ega23 © (2008-12-24 13:08) [21]
> например, в находясь цифрах - точка может быть и не разделителем.
Да вот не только в цифрах.А.С.Пушкин
, например.
> Автору проще нужно же :)
Дык в том-то и дело, что неизвестно, что нужно автору. Просто в первых же постах пошло, что это сделать - элементарно. Авотфиг. Не всё так просто, на самом деле.
← →
Johnmen © (2008-12-24 13:47) [22]
> Пи = 3.14159
> Сколько слов?
Двубайтовых беззнаковых целых?
← →
Ega23 © (2008-12-24 13:53) [23]
> Двубайтовых беззнаковых целых?
Уел. ЗачОт. :)
← →
Johnmen © (2008-12-24 13:56) [24]:)
Я к тому, что пока нет четкого определения, что есть "слово", про которое спрашивал автор, обсуждение бессмысленно...
← →
clickmaker © (2008-12-24 14:01) [25]тут обратил внимание, что Блокнот считает словом все кроме пробела
← →
Ega23 © (2008-12-24 14:03) [26]
> Я к тому, что пока нет четкого определения, что есть "слово",
> про которое спрашивал автор, обсуждение бессмысленно...
Заметь, я это ещё в [4] спросил... :)
← →
AndreyV © (2008-12-25 09:14) [27]> [21] Ega23 © (24.12.08 13:08)
> Дык в том-то и дело, что неизвестно, что нужно автору. Просто
> в первых же постах пошло, что это сделать - элементарно.
> Авотфиг. Не всё так просто, на самом деле.
Вот ещё пример:
Как-то - непросто поступить с символои "-".
Сколько слов?
← →
Ega23 © (2008-12-25 09:58) [28]
> Сколько слов?
Это ты меня спрашиваешь? Так я не знаю. Определения "слово" ещё не было... :)))
← →
AndreyV © (2008-12-25 10:43) [29]> [28] Ega23 © (25.12.08 09:58)
> Это ты меня спрашиваешь?
Нет. Я тебя только повторяю. :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.005 c