Text-Segmentierung

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
TottiLazarus
Beiträge: 1
Registriert: Mo 13. Feb 2017, 20:17

Text-Segmentierung

Beitrag von TottiLazarus »

Liebe alle,

ich würde mich über eure Hilfe sehr freuen. Ich habe das folgende Problem. Ich arbeite derzeit mit Transkripten, wo ich 150-Wort-Absätze einfügen muss.

Beispiel:

<P1> Hallo, wie geht es Ihnen?
<P2> Danke, das Wochenende war hart.
<P1> Was ist passiert?
..... usw.

Nun muss ich nach insgesamt 150 Wörtern einen Absatz einfügen oder alternativ eine Linie o.ä. Das Problem allerdings: "<P1>" und "<P2>" darf nicht mitgezählt werden. Könnte man mit Lazarus ein entsprechendes Programm schreiben?

Im Netz finde ich einiges zu countwords, allerdings keinerlei Hinweise wie man bestimmte Zeichenketten ausschließt und dann eine Leerzeile einfügt. Hat jemand von euch zufällig eine einfache Lösung dafür? Lazarus ist noch Neuland für mich.

Über jede Hilfe wäre ich unglaublich dankbar.

Lieben Gruß,
Totti

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Text-Segmentierung

Beitrag von Michl »

Eine mit steigender Größe sich arg verlangsamende Variante wäre z.B.:

Code: Alles auswählen

program Project1;
 
uses strutils;
 
const
  Orig = '<P1> Hallo, wie geht es Ihnen?' + LineEnding +
         '<P2> Danke, das Wochenende war hart.' + LineEnding +
         '<P1> Was ist passiert?';
var
  s, Dummy: String;
  Nr, Cnt: Integer;
begin
  Cnt := 0;
  for Nr := 1 to WordCount(Orig, [' ']) do
  begin
    Dummy := ExtractWord(Nr, Orig, [' ']);
    s := s + Dummy + ' ';
    if (Dummy <> '') and (Dummy <> '<P1>') and (Dummy <> '<P2>') then
      Inc(Cnt);
    if Cnt = 3 then  // <-- hier könnte auch 150 stehen
    begin
      s := s + '--- ';
      Cnt := 0;
    end;
  end;
  WriteLn(s);
end.   

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten