ここのコードを使用して、テキストを個々の単語に分割しています。日本語と中国語を除く、私が試したすべての言語でうまく機能しています。
コードを微調整して、日本語と中国語も適切にトークン化する方法はありますか? ドキュメントには、これらの言語がサポートされていると書かれていますが、適切な場所で単語を分割しているようには見えません。たとえば、「新しい」をトークン化すると、「新し」と「い」の 2 つの単語に分割されます (私は日本語を話せないので、それが実際に正しいかどうかはわかりませんが、私が持っているサンプルは、それらはすべて1つの単語であるべきだと言っています)。また、単語をスキップすることもあります。
kCFStringTokenizerUnitWordBoundary を使用しながら、中国語と日本語のロケールを作成してみました。結果は改善されましたが、私がやっていること (語彙へのハイパーリンクの追加) にはまだ十分ではありません。
利用可能な他のトークナイザーをいくつか知っていますが、コア基盤に固執できるのであれば、むしろそれらを避けたいと思います。
[更新]しばらくの間、日本語用の特定のユーザー辞書で mecab を使用することになりましたが、現在はサーバー側でこれらすべてを行うことに移行しています。完璧ではないかもしれませんが、すべてのプラットフォームで一貫した結果が得られています。