Síða 1 af 1

Þarf að finna tíðni orða í Notepad++

Sent: Sun 25. Nóv 2012 13:35
af Heliowin
Er að nota Notepad++ og þarf að finna tíðni orða í texta skjali, það er að segja að sjá þau orð sem koma fyrir oftast og fá þá listun yfir það.

Getið þið sagt mér hvernig hægt er að gera þetta í Notepad++ eða öðru forriti?

Re: Þarf að finna tíðni orða í Notepad++

Sent: Sun 25. Nóv 2012 13:58
af ZiRiuS
Eina sem ég finn er "Search > Find" og þar er takki sem segir "Count". Þar finnurðu allavega fjölda orða sem þú skrifar inn en ég veit því miður ekki hvernig þú finnur þau orð sem koma oftast fyrir.

Búinn að athuga með Word, hlýtur að vera hægt að gera þetta þar.

Re: Þarf að finna tíðni orða í Notepad++

Sent: Sun 25. Nóv 2012 14:35
af Garri
Get smíðað svona forrit fyrir þig á sirka fimm mínútum.. eða látið þig fá pseude kódann ef þú getur sjálfur skrifað.

Re: Þarf að finna tíðni orða í Notepad++

Sent: Sun 25. Nóv 2012 15:03
af Garri
Rauk í þetta.. meðan ég hlustað á Tubalar Bells með Mike nokkrum Oldfield!

Svona vinnur forritið:
Mynd

Texta skráin

Kóði: Velja allt

halló test bull þetta er hitt
bara þið eruð kannski er þetta líka bull eða hvað

er ekki kominn tími á að hætta þessu bulli og fara að sofa

Er ég nú orðinn fúll eða hvað


Kóði: Velja allt

unit UMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  Typ_RecListi =
  RECORD
    Str_Ord           : STRING;
    I_Tidni           : INTEGER;
  END;

  TForm1 =
  class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    Arr_Listi     : ARRAY OF Typ_RecListi;
    PROCEDURE Rada_Lista;
    procedure Update_List (Str_Ord : SHORTSTRING);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

PROCEDURE TForm1.Rada_Lista;

{--------------------------------------------------------------------------}
  PROCEDURE Swap (W_Indx : BYTE);
    VAR
      Tmp : Typ_RecListi;
  BEGIN
    Tmp := Arr_listi[W_Indx];
    Arr_listi[W_Indx] := Arr_listi[W_Indx-1];
    Arr_listi[W_Indx-1] := Tmp;
  END;

  VAR
    W_Fjoldi,
    W_Indx, W_Indx2 : WORD;
    Bo_Swap         : BOOLEAN;
    Str_Fyrra,
    Str_Seinna      : SHORTSTRING;
BEGIN
  W_Indx   := 0;
  Bo_Swap  := TRUE;
  W_Fjoldi     := Length(Arr_listi) - 1;

  WHILE (W_Indx < W_Fjoldi) AND (Bo_Swap) DO
  BEGIN
    W_Indx2 := W_Fjoldi;
    Bo_Swap := FALSE;
    WHILE W_Indx2 > W_Indx DO
    BEGIN
      IF (Arr_listi[W_Indx2].I_Tidni > Arr_listi [W_Indx2-1].I_Tidni) THEN
      BEGIN
        Bo_Swap := TRUE;
        Swap (W_Indx2);
      END;
      Dec (W_Indx2);
    END;
    Inc (W_Indx);
  END;
END;
{--------------------------------------------------------------------------}
procedure TForm1.Update_List (Str_Ord : SHORTSTRING);
  var
    Bo_Fann, Bo_Buid  : BOOLEAN;
    i                 : INTEGER;
BEGIN
  Bo_Fann         := FALSE;
  Bo_Buid         := FALSE;
  i               := 0;

  IF (Length(Arr_Listi) > 0) THEN
  REPEAT
    Bo_Fann    := Str_Ord = Arr_listi[i].Str_Ord;
    IF NOT(Bo_Fann) THEN
    BEGIN
      Inc (i);
      IF i = Length(Arr_Listi) THEN
        Bo_Buid := TRUE;
    END
  UNTIL (Bo_Fann) OR (Bo_Buid);

  IF (Bo_Fann) THEN
    Inc (Arr_Listi [i].I_Tidni)
  ELSE
  BEGIN
    SetLength(Arr_Listi, Length(Arr_Listi) + 1);
    Arr_Listi[Length(Arr_Listi)-1].Str_Ord   := Str_Ord;
    Arr_Listi[Length(Arr_Listi)-1].I_Tidni   := 1;
  END;
END;
{--------------------------------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
  var
    Str_List     : TSTRINGLIST;
    i            : INTEGER;
    W_Pos        : WORD;
    Str_Ord      : SHORTSTRING;
    Str_Lina     : SHORTSTRING;
begin
  IF (FileExists (Edit1.Text)) THEN
  BEGIN
    Str_List   := TSTRINGLIST.Create;
    Str_List.LoadFromFile(Edit1.text);

    FOR i := 0 TO Str_List.Count - 1 DO
    BEGIN
      Str_Lina := Str_List[i];
      W_Pos    := Pos (' ', Str_Lina);
      WHILE (W_Pos <> 0) DO
      BEGIN
        Str_Ord  := Copy (Str_Lina, 1, W_Pos - 1);
        Delete (Str_Lina, 1, W_Pos);
        Update_List (Str_Ord);
        IF (Str_Lina <> '') THEN
          W_Pos    := Pos (' ', Str_Lina);
      END;
      IF (Str_Lina <> '') THEN
        Update_List (Str_Lina);
    END;
    Str_List.Free;

    Rada_Lista;

    Memo1.Lines.Clear;
    FOR i := 0 TO Length(Arr_Listi) - 1 DO
      Memo1.Lines.Add(IntToStr(Arr_Listi[i].I_Tidni)+'  '+ Arr_Listi[i].Str_Ord)
  END
  ELSE
    ShowMessage ('Skjal finnst ekki.. ');
end;

end.

Re: Þarf að finna tíðni orða í Notepad++

Sent: Sun 25. Nóv 2012 16:13
af zedro
Garri skrifaði:Rauk í þetta.. meðan ég hlustað á Tubalar Bells með Mike nokkrum Oldfield!

=D> Flottur!

Re: Þarf að finna tíðni orða í Notepad++

Sent: Sun 25. Nóv 2012 17:21
af gardar

Re: Þarf að finna tíðni orða í Notepad++

Sent: Sun 25. Nóv 2012 21:37
af Heliowin
ZiRiuS skrifaði:Eina sem ég finn er "Search > Find" og þar er takki sem segir "Count". Þar finnurðu allavega fjölda orða sem þú skrifar inn en ég veit því miður ekki hvernig þú finnur þau orð sem koma oftast fyrir.

Búinn að athuga með Word, hlýtur að vera hægt að gera þetta þar.


Athugaði með LibreOffice Writer, en fann ekkert, né extension.


Garri skrifaði:Rauk í þetta.. meðan ég hlustað á Tubalar Bells með Mike nokkrum Oldfield!


Flott og takk fyrir.

gardar skrifaði:http://vim.wikia.com/wiki/Word_frequency_statistics_for_a_file


Vim er fínn, takk fyrir.


Ég fann reyndar út að þetta virðist ekki vera rétta leiðin fyrir mig það sem ég var að spyrja um þar sem ég er með dálítið stóra skrá eða nokkra tugi þúsunda orða en er að leita að færri en hundrað orðum sem ég þekki ekki öll áður en ég byrja.

Það sem ég geri þá er að taka út réttu línurnar af nokkrum þúsunda í Notepad++ þar sem orðin koma fyrir og vinna með í LibreOffice Calc.