N-grams: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add Draco) |
Not a robot (talk | contribs) (Add BCPL) |
||
Line 243: | Line 243: | ||
'AND ': 1 'ND L': 1 'D LE': 1 ' LET': 1 'LET ': 1 |
'AND ': 1 'ND L': 1 'D LE': 1 ' LET': 1 'LET ': 1 |
||
'ET L': 1 'T LI': 1 ' LIV': 1</pre> |
'ET L': 1 'T LI': 1 ' LIV': 1</pre> |
||
=={{header|BCPL}}== |
|||
<syntaxhighlight lang="bcpl">get "libhdr" |
|||
let equal(str, n, i, j) = valof |
|||
$( for k=0 to n-1 |
|||
unless str%(i+k) = str%(j+k) resultis false |
|||
resultis true |
|||
$) |
|||
let findngrams(n, str, res) = valof |
|||
$( let found = 0 |
|||
for i=1 to str%0-n+1 |
|||
$( for j=0 to found-1 |
|||
$( if equal(str, n, i, res!(2*j)) |
|||
$( res!(2*j+1) := res!(2*j+1) + 1 |
|||
goto nextitem |
|||
$) |
|||
$) |
|||
res!(2*found) := i |
|||
res!(2*found+1) := 1 |
|||
found := found + 1 |
|||
nextitem: loop |
|||
$) |
|||
resultis found |
|||
$) |
|||
let showngrams(n, str) be |
|||
$( let res = vec 64 |
|||
let amt = findngrams(n, str, res) |
|||
writef("%N-grams of '%S':*N", n, str) |
|||
for i=0 to amt-1 |
|||
$( wrch('*'') |
|||
for j=res!(2*i) to res!(2*i)+n-1 do wrch(str%j) |
|||
writef("' - %N",res!(2*i+1)) |
|||
wrch(i rem 5=4 -> '*N', '*T') |
|||
$) |
|||
wrch('*N') |
|||
$) |
|||
let start() be |
|||
for n=2 to 4 do showngrams(n, "LIVE AND LET LIVE")</syntaxhighlight> |
|||
{{out}} |
|||
<pre>2-grams of 'LIVE AND LET LIVE': |
|||
'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 of 'LIVE AND LET LIVE': |
|||
'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 of 'LIVE AND LET LIVE': |
|||
'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> |
|||
=={{header|BQN}}== |
=={{header|BQN}}== |