Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.08;
Скачать: CL | DM;

Вниз

Алгоритм для выделенияслов из строки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.013 c
2-1229759537
kyn66
2008-12-20 10:52
2009.02.08
Записи Foxpro помеченные на удаление


6-1198580653
Lamer666
2007-12-25 14:04
2009.02.08
POST c авторизацией на WEB по HTTPS


15-1228950052
DDR2
2008-12-11 02:00
2009.02.08
Не работает память...


8-1190545092
Jimmy
2007-09-23 14:58
2009.02.08
Не работает JPEG.Grayscale:=True;


13-1122370594
Tab
2005-07-26 13:36
2009.02.08
vcl программы на delphi 8 for .net?