AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wörter zählen

Ein Thema von Lisa.99 · begonnen am 27. Feb 2017 · letzter Beitrag vom 6. Mär 2017
Antwort Antwort
Seite 2 von 3     12 3      
t.roller
(Gast)

n/a Beiträge
 
#11

AW: Wörter zählen

  Alt 2. Mär 2017, 13:17
Das Beispiel TOKENCOUNT (648 Wörter) von awk und das Beispiel von hier
http://www.swissdelphicenter.com/de/showcode.php?id=806
(680 Wörter)
sind unterschiedlich zu MS WORD (660 Wörter).
Textprobe im Anhang.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtDlgs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    OpenTextFileDialog1: TOpenTextFileDialog;
    Button2: TButton;
    Label1: TLabel;
    Button3: TButton;
    SaveTextFileDialog1: TSaveTextFileDialog;
    Button4: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Seps(As_Arg: ANSIChar): Boolean;
begin
  Seps := As_Arg in
    [#0..#$1F, ' ', '.', ',', '?', ':', ';', '(', ')', '/', '\', '-'];
end;

function WordCount(CText: ANSIstring): Longint;
var
  Ix: Word;
  Work_Count: Longint;
begin
  Work_Count := 0;
  Ix := 1;
  while Ix <= Length(CText) do
  begin
    while (Ix <= Length(CText)) and (Seps(CText[Ix])) do
      Inc(Ix);
    if Ix <= Length(CText) then
    begin
      Inc(Work_Count);

      while (Ix <= Length(CText)) and (not Seps(CText[Ix])) do
        Inc(Ix);
    end;
  end;
  WordCount := Work_Count;
end;
//------------------------------------------------------------------------------
function TokenCount(const cText: String): integer;
    var s: string;
        nPos: integer;
    begin
     result:=0;

     s:=trimright(cText);

     nPos:=Pos(#32,s);

     if (nPos=0) and (length(s)>0) then inc(result);

     while nPos>0 do
     begin
      inc(Result);
      System.Delete(s,1,nPos);
      s:=trimleft(trimright(s));

      nPos:=Pos(#32,s);
     end;

    end;

//------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
if OpenTextFileDialog1.execute then
      Memo1.Lines.loadfromfile(OpenTextFileDialog1.FileName);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= INTTOSTR(WORDCOUNT(Memo1.Text));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if SaveTextFileDialog1.execute then
  Memo1.Lines.SaveTofile(SaveTextFileDialog1.FileName);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Label2.Caption:= INTTOSTR(TOKENCOUNT(Memo1.Text));
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Label1.Caption:= INTTOSTR(WORDCOUNT(Memo1.Text));
end;

end.
Angehängte Dateien
Dateityp: txt Von 14 auf 20 Millionen.txt (4,8 KB, 3x aufgerufen)

Geändert von t.roller ( 2. Mär 2017 um 14:44 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#12

AW: Wörter zählen

  Alt 2. Mär 2017, 15:19
Mit dieser Routine komme ich bei oben angehängtem Text auf 612 Wörter.
Delphi-Quellcode:
function WortCount(s : String): Integer;
var
         i : Integer;
         bInWort : Boolean;
begin
  Result := 0;
  bInWort := False;
  for i := 1 to Length(s) do begin
    case s[i] of
      // Wenn Ziffern auch als Zeichen für Wörter gelten sollen,
      // oder Zahlen als Wort zu zählen sind:
      // '0'..'9',
      // Wer weitere Zeichen berücksichtigen will, darf hier gerne erweitern:
      'A'..'Z',
      'Á','É','Í','Ó','Ú',
      'À','È','Ì','Ò','Ù',
      'Ä','Ö','Ü',
      'a'..'z',
      'á','é','í','ó','ú',
      'à','è','ì','ò','ù',
      'ä','ö','ü','ß' : if not bInWort then begin
                          Result := Result + 1;
                          bInWort := True;
                        end;
      else
        bInWort := False;
    end;
  end;
end;

var
        sl : TStringList;
begin
  sl := TStringList.Create;
  sl.LoadFromFile('c:\temp\Von 14 auf 20 Millionen.txt');
  ShowMessage(IntToStr(WortCount(sl.Text)));
  sl.Free;
end;
Text aufbröseln und "von Hand" nachzählen ergab ebenfalls 612 Wörter.

Frage: ist das ein Wort? Welt-Krebs-Bericht
Oder sind das drei Wörter?

Wird mit obiger Routine als drei gezählt.

Word zählt auch die Zahlen oder ein Datum ... als einzelne Wörter.

Wenn man's genau haben will, muss man erstmal definieren, was genau ist
Und dann wird es schnell beliebig komplex.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Wörter zählen

  Alt 3. Mär 2017, 11:51
https://de.wikipedia.org/wiki/Wort
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#14

AW: Wörter zählen

  Alt 3. Mär 2017, 16:40
Frage: ist das ein Wort? Welt-Krebs-Bericht
Oder sind das drei Wörter?

Wird mit obiger Routine als drei gezählt.
Es müsste als EIN Wort gezählt werden, weil man es auch zusammenhängend schreiben kann:
Weltkrebsbericht oder WeltKrebsBericht.

Dieses nennt man Binnenmajuskel.

Ich liebe Binnenmajuskel!
Grund: Solch ein Wort lässt sich leichter lesen.

Micropachycephalosaurus hongtuyanensis, ein Dinosaurier
MicroPachyCephaloSaurus HongtuYanensis, ein Dinosaurier
Der Gattungsname – einer der längsten aller Dinosaurier – leitet sich von den Wörtern
mikros (=„klein“),
pachys (=„dick“),
kephale (=„Kopf“) und
sauros (=„Echse“) ab und bedeutet dementsprechend „kleine Dickkopfechse“.
Hongtu = Ort, wo es rote Erde gibt, (Red soil = roter Ackerboden)
Yunnan = Provinzname.
Fundort: Wangshi, Shandong (China), ca. 80 Mill. Jahre alt.

Geändert von t.roller ( 3. Mär 2017 um 17:08 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#15

AW: Wörter zählen

  Alt 3. Mär 2017, 22:48
Dankesehr für die Aufklärung.

Ich bin da auch ein großer Fan von.

Jetzt weiss ich auch endlich wie CamelCase auf Deutsch heisst

Rollo
  Mit Zitat antworten Zitat
Lisa.99

Registriert seit: 13. Feb 2017
21 Beiträge
 
#16

AW: Wörter zählen

  Alt 6. Mär 2017, 07:21
Bei mir zählt er leider immer nur zwei Wörter, egal wie viele es sind und finde dabei den Fehler auch nicht

procedure TForm1.Button2Click(Sender: TObject);
var i, woerter : integer;
text : string;
begin
woerter:= 1;
for i := 0 to length (text) do
begin
inc(woerter);
continue;
end;
Edit3.Text:= inttostr(woerter);
end;
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Wörter zählen

  Alt 6. Mär 2017, 07:41
Wie oben bereits beschrieben ist deine Variable Text leer.

Du setzt den Startwert auf 1, zählst in deiner Schleife sofort 1 hoch: Ergebnis ist 2.

Wie ebenfalls bereits oben beschrieben zählst du nicht die Wörter sondern die Anzahl Zeichen. Also solltest du in deiner Schleife nur dann hochzählen, wenn ein Leerzeichen ausgewertet wird. Continue ist hier überflüssig! Sorge mit Trim noch dafür das weder am Anfang noch am Ende deines Strings Leerzeichen stehen (Trailing-Spaces). Dann kannst du die naheliegende Variante verwenden, indem du jedes Zeichen Text[i] auf Space / Leerzeichen auswertest.

Diese "naive" Variante kannst du dann wie oben bereits angezeigt, verfeinern und um die Zeichen erweitern, die ebenfalls zur Trennung von Worten führen. Beispielroutine ist ungetestet.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i, woerter : integer;
    text : string;
begin
  woerter:= 0;
  text := Trim('Dies ist ein kurzer Text') // Trailing-Spaces entfernen;
  for i := 1 to length (text) do
  begin
    if text[i] = ' then
      inc(woerter);
// continue; // überflüssig!
  end;
  // das letzte Wort mitnehmen
  inc(woerter);
  Edit3.Text:= inttostr(woerter);
end;
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Lisa.99

Registriert seit: 13. Feb 2017
21 Beiträge
 
#18

AW: Wörter zählen

  Alt 6. Mär 2017, 07:52
verstanden habe ich, was mein Fehler war, nur leider funktioniert es immer noch nicht, entweder er gibt mir 0 oder 1 aus.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Wörter zählen

  Alt 6. Mär 2017, 08:01
Hast Du Dir eigentlich auch nur einen der Lösungsvorschläge angesehen?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Lisa.99

Registriert seit: 13. Feb 2017
21 Beiträge
 
#20

AW: Wörter zählen

  Alt 6. Mär 2017, 08:03
Ich habe mir alle angesehen, nur leider verstehe ich die wenigsten und möchte gerne die Lösungen nutzen, die ich auch nachvollziehen kann. Vieles haben wir nämlich in der Schule nicht gelernt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz