Simple predictive keyboard CG
Python 3.9, 350 bytes
import sys
[s,p,x]=sys.stdin.read().split(&quot;\n\n&quot;)
p,x=[[l.split(',')for l in d.split(&quot;\n&quot;)]for d in[p,x]]
s={k:20 for k in s.split(&quot;\n&quot;)}
p={k:int(v)for k,v in p}
for t,i in x:b=s|p;b={k:b[k]for k in b if k[:4]==t[:4]};b=sorted(b,key=b.get);p[i]=p.get(i,0)+1;print((f&quot;MATCH:{t[:4]},&quot;if i in b[:5]else f&quot;FULLWORD:{t},&quot;if t==i else f&quot;MISMATCH:{t},&quot;)+i)

Try it online! (Uses {**a,**b} instead of a|b to merge dictionaries)
The I/O formats are restrictive, but this still makes for a simple and fun challenge.
import sys
#s is the standard dictionary, p is the personal dictionary, and x is the input
#They are separated by a blank line
[s,p,x]=sys.stdin.read().split(&quot;\n\n&quot;)
#Turn both p and x into lists (separated by \n) of 2-element lists (separated by commas)
p,x=[[l.split(',')for l in d.split(&quot;\n&quot;)]for d in[p,x]]
#Split s on \n to get list of words, then map to 20, the default no. of occurrences
s={k:20 for k in s.split(&quot;\n&quot;)}
#Turn p into a dictionary, and make the values ints
p={k:int(v)for k,v in p}
#Iterate over each typed word t and intended word i in the input
for t,i in x:
  #Merge the personal and standard dictionaries and store in b
  b=s|p
  #Filter the words who start with the first 4 characters of t (typed word)
  b={k:b[k]for k in b if k[:4]==t[:4]}
  #b now contains words from the dictionary, sorted by number of occurrences
  b=sorted(b,key=b.get)
  #Increment number of occurrences of i in personal dictionary, or set to 1 if it doesn't exist yet
  p[i]=p.get(i,0)+1
  #Print the corresponding message
  print((f&quot;MATCH:{t[:4]},&quot;if i in b[:5]else f&quot;FULLWORD:{t},&quot;if t==i else f&quot;MISMATCH:{t},&quot;)+i)