xref: /plan9/sys/src/cmd/dict/comfix.awk (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier# when raw index has a lot of entries like
2*219b2ee8SDavid du Colombier# 1578324	problematico, a, ci, che
3*219b2ee8SDavid du Colombier# apply this algorithm:
4*219b2ee8SDavid du Colombier#  treat things after comma as suffixes
5*219b2ee8SDavid du Colombier#  for each suffix:
6*219b2ee8SDavid du Colombier#      if single letter, replace last letter
7*219b2ee8SDavid du Colombier#      else search backwards for beginning of suffix
8*219b2ee8SDavid du Colombier#      and if it leads to an old suffix of approximately
9*219b2ee8SDavid du Colombier#      the same length, put replace that suffix
10*219b2ee8SDavid du Colombier# This will still leave some commas to fix by hand
11*219b2ee8SDavid du Colombier# Usage: awk -F'	' -f comfix.awk rawindex > newrawindex
12*219b2ee8SDavid du Colombier
13*219b2ee8SDavid du ColombierNF == 2	{
14*219b2ee8SDavid du Colombier		i = index($2, ",")
15*219b2ee8SDavid du Colombier		if(i == 0 || length($2) == 0)
16*219b2ee8SDavid du Colombier			print $0
17*219b2ee8SDavid du Colombier		else {
18*219b2ee8SDavid du Colombier			n = split($2, a, /,[ ]*/)
19*219b2ee8SDavid du Colombier			w = a[1]
20*219b2ee8SDavid du Colombier			printf "%s\t%s\n", $1, w
21*219b2ee8SDavid du Colombier			for(i = 2; i <= n; i++) {
22*219b2ee8SDavid du Colombier				suf = a[i]
23*219b2ee8SDavid du Colombier				m = matchsuflen(w, suf)
24*219b2ee8SDavid du Colombier				if(m) {
25*219b2ee8SDavid du Colombier					nw = substr(w, 1, length(w)-m) suf
26*219b2ee8SDavid du Colombier					printf "%s\t%s\n", $1, nw
27*219b2ee8SDavid du Colombier				} else
28*219b2ee8SDavid du Colombier					printf "%s\t%s\n", $1, w ", " suf
29*219b2ee8SDavid du Colombier			}
30*219b2ee8SDavid du Colombier		}
31*219b2ee8SDavid du Colombier	}
32*219b2ee8SDavid du ColombierNF != 2 {
33*219b2ee8SDavid du Colombier	print $0
34*219b2ee8SDavid du Colombier	}
35*219b2ee8SDavid du Colombier
36*219b2ee8SDavid du Colombierfunction matchsuflen(w, suf,		wlen,suflen,c,pat,k,d)
37*219b2ee8SDavid du Colombier{
38*219b2ee8SDavid du Colombier	wlen = length(w)
39*219b2ee8SDavid du Colombier	suflen = length(suf)
40*219b2ee8SDavid du Colombier	if(suflen == 1)
41*219b2ee8SDavid du Colombier		return 1
42*219b2ee8SDavid du Colombier	else {
43*219b2ee8SDavid du Colombier		c = substr(suf, 1, 1)
44*219b2ee8SDavid du Colombier		for (k = 1; k <= wlen ; k++)
45*219b2ee8SDavid du Colombier			if(substr(w, wlen-k+1, 1) == c)
46*219b2ee8SDavid du Colombier				break
47*219b2ee8SDavid du Colombier		if(k > wlen)
48*219b2ee8SDavid du Colombier			return 0
49*219b2ee8SDavid du Colombier		d = k-suflen
50*219b2ee8SDavid du Colombier		if(d < 0)
51*219b2ee8SDavid du Colombier			d = -d
52*219b2ee8SDavid du Colombier		if(d > 3)
53*219b2ee8SDavid du Colombier			return 0
54*219b2ee8SDavid du Colombier		return k
55*219b2ee8SDavid du Colombier	}
56*219b2ee8SDavid du Colombier}
57