Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1230194832
Xmen
2008-12-25 11:47
2009.02.08
Время ожедания сервера


2-1228830704
abhtr
2008-12-09 16:51
2009.02.08
UPPER не работает с русскими буквами


15-1229002101
Ru
2008-12-11 16:28
2009.02.08
PGP Virtual Disk


2-1230097256
alshtam
2008-12-24 08:40
2009.02.08
упала база данных firebird


15-1229422288
cosinus
2008-12-16 13:11
2009.02.08
Вопрос про базы данных... Ламерский.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский