Match a two items from two different receipts
You can try some approximate string matching which gives a confidence score. For example, you can try out with Levenshtein distance, but adjusted with the length of the strings using a probabilistic model; or, you can try out with Jaccard similarity on 3-grams and special treatment on word boundaries, and then calibrated into probabilities. Now you have an n by n matrix of probabilities.

After this you need to perform a matching. The final likelihood is the product of each single probability. To maximize it, you can try to maximize the sum of logs of individual probabilities. Having taken logarithms of each probability, this now becomes an (additive) assignment problem which has implementations in R or Python.