1. A method executed by a hardware processor for analysing a string of characters, including canonical and non-canonical terms relating to a specific domain, to identify concepts in that domain, comprising the following steps: comparing the terms in the string with a lexicon containing canonical terms for sub-concepts in the domain, canonical groups of such terms, and synonyms and lexical categories, so as to produce a sequence of annotations comprising terms from the lexicon; and identifying entities by chunking sequences of annotations according to a grammar, wherein the lexicon includes a list of terms in canonical form, with synonyms, and the step of comparing the terms uses matching stages, namely: Stage 0: string terms are matched with corresponding terms in the lexicon; Stage 1: terms that do not immediately match are analysed for similarity using a string comparison technique; Stage 2: the parts of the string so far matched are replaced by the corresponding canonical terms from the lexicon and the Stage 1 operation is performed again; and Stage 3: terms not so far annotated are analysed using a stemmer and a dictionary to produce lexical terms, and Stages 2 and 1 are run again, and the matching stages are run cyclically in the order 0, 1, 0, 2, 1, 0, 3, 2, 1, 0.