N-grams: Difference between revisions

1,385 bytes added ,  1 year ago
Added XPL0 example.
(Added XPL0 example.)
Line 389:
("D LE" : 1) ("E AN" : 1) ("ET L" : 1) ("IVE " : 1) ("LET " : 1)
("ND L" : 1) ("T LI" : 1) ("VE A" : 1)
</pre>
 
=={{header|XPL0}}==
<syntaxhighlight lang "XPL0">int Dict(100), Count(100), Size;
 
proc LookUp(Wd); \Add word to dictionary, or increment its count
int Wd, I;
[for I:= 0 to Size-1 do
if Dict(I) = Wd then
[Count(I):= Count(I)+1;
return;
];
Dict(Size):= Wd;
Count(Size):= 1;
Size:= Size+1;
];
 
proc ShowNGram(N, Str); \Show N-grams for string
char N, Str;
int I, J, Wd, Ch;
[IntOut(0, N); Text(0, "-grams:^m^j");
Size:= 0; I:= 0;
loop [Wd:= 0;
for J:= 0 to N-1 do
[Ch:= Str(I+J);
if Ch = $A0 then quit; \terminating space
if Ch>=^a and Ch<=^z then Ch:= Ch & ~$20;
Wd:= Wd<<8 + Ch;
];
I:= I+1;
LookUp(Wd);
];
for I:= 0 to Size-1 do
[Wd:= Dict(I);
for J:= N-1 downto 0 do
ChOut(0, Wd>>(J*8));
ChOut(0, ^ );
IntOut(0, Count(I));
if rem(I/5) = 4 then CrLf(0) else ChOut(0, 9\tab\);
];
CrLf(0);
];
 
int N;
for N:= 2 to 4 do ShowNGram(N, "Live and let live ")</syntaxhighlight>
{{out}}
<pre>
2-grams:
LI 2 IV 2 VE 2 E 1 A 1
AN 1 ND 1 D 1 L 2 LE 1
ET 1 T 1
3-grams:
LIV 2 IVE 2 VE 1 E A 1 AN 1
AND 1 ND 1 D L 1 LE 1 LET 1
ET 1 T L 1 LI 1
4-grams:
LIVE 2 IVE 1 VE A 1 E AN 1 AND 1
AND 1 ND L 1 D LE 1 LET 1 LET 1
ET L 1 T LI 1 LIV 1
</pre>
297

edits