Как разбить текст на слова в Delphi

Другое   3 Февраль 2012  Автор статьи: admin 

Приведенная в этой статье процедура помогает эффективно разбить текст на отдельные слова.
На вход данной процедуре необходимо подать стоку, содержащую текст, объект типа TStringList, в которую процедура передаст все найденные слова, а также целочисленное значение, указывающее на минимальный размер добавляемых в список слов. Последний параметр является необязательным и по умолчанию равен 3. В ходе работы этой процедуры каждое отдельное слово будет занесено в отдельную строку. Процедура умеет отделять знаки препинания, а также добавлять только слова длиннее определенного значения.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure SplitTextIntoWords(const str: string;
output: Tstringlist; minLength: integer=3{минимальная длина слова});
var
  positionStart, positionEnd: integer;
  wordToAdd: string;
begin
  Assert(Assigned(output));
  output.Clear;
  positionStart := 1;
  while positionStart <= Length(str) do
  begin
    while (positionStart <= Length(str)) and not IsCharAlpha(str[positionStart]) do
      Inc(positionStart);
    if positionStart <= Length(str) then
    begin
      positionEnd := positionStart + 1;
      while (positionEnd <= Length(str)) and IsCharAlpha(str[positionEnd]) do
        Inc(positionEnd);
      wordToAdd := Copy(str, positionStart, positionEnd - positionStart);
      if (Length(wordToAdd) >= minLength) then
      begin
        // добавление слова в список
        output.Add(AnsiLowerCase(wordToAdd));
      end;
      positionStart := positionEnd + 1;
    end;
  end;
end;

Пример использования процедуры:

1
2
3
4
5
6
7
8
procedure TForm1.Button1Click(Sender: TObject);
var words: TStringList;
begin
  words:= TStringList.Create;
  SplitTextIntoWords(Memo1.Text,words);
  Memo2.Text:=words.Text;
  words.Free;
end;

Результат работы программы:

  • Артемий

    Большое спасибо!Вы очень помогли)

Научиться программировать

  • на Delphi

  • на Java

  • на C++