title: Efficient algorithm for finding all keywords in a text
body: <p>I have lots of strings containing text in lots of different spellings. I am tokenizing these strings by searching for keywords and if a keyword is found I use an assoicated text for that keyword.</p>
  
  <p>Let's say the search string can contain the text "schw.", "schwa." and "schwarz". I have three keywords that all resolve to the text "schwarz".</p>
  
  <p>Now I'm searching for an effective way to find all the keywords without doing a string.Contains(keyword) for every single keyword.</p>
  
  <p>Sample data:</p>
  
  <pre><code>H-Fuss ahorn 15 cm/SH48cm
  Metall-Fuss chrom 9 cm/SH42cm
  Metall-Kufe alufbg.12 cm/SH45c
  Metall-Kufe verchr.12 cm/SH45c
  Metall-Zylind.aluf.12cm/SH45cm
  Kufe alufarbig
  Metall-Zylinder hoch alufarbig
  Kunststoffgl.schw. - hoch
  Kunststoffgl.schw. - Standard
  Kunststoffgleiter - schwarz für Sitzhoehe 42 cm
  </code></pre>
  
  <p>Sample keywords (key, value):</p>
  
  <pre><code>h-fuss, Holz
  ahorn, Ahorn
  metall, Metall
  chrom, Chrom
  verchr, Chrom
  alum, Aluminium
  aluf, Aluminium
  kufe, Kufe
  zylind, Zylinder
  hoch, Hoch
  kunststoffgl, Gleiter
  gleiter, Gleiter
  schwarz, Schwarz
  schw., Schwarz
  </code></pre>
  
  <p>Sample result:</p>
  
  <pre><code>Holz, Ahorn
  Metall, Chrom
  Metall, Kufe, Aluminium
  Metall, Kufe, Chrom
  Metall, Zylinder, Aluminium
  Kufe, Aluminium
  Metall, Zylinder, Hoch, Aluminium
  Gleiter, Schwarz, Hoch
  Gleiter, Schwarz
  Gleiter, Schwarz
  </code></pre>