OCamlは標準ではStringから指定した単語の出現回数をカウントする関数は無いようです。
とうことで自作しました。
アルファベットのみ対応しています。
OCamlっていつになったらマルチバイト文字が普通に扱えるようになるんでしょう?

末尾再帰だと思うんですけど、try-withでも同様にちゃんと末尾再帰になるのか未確認です。

utopで試す場合は、Strモジュールを使っているので最初に#load "str.cma";;を実行しておく必要が有ります。

let count search from =

    let r = Str.regexp_string search in
    let rec _count count target =
        try
            let index = Str.search_forward r target 0 in
            _count (count+1) (Str.string_after target (index+1))
        with Not_found -> count
    in
_count 0 from
;;