4

ここのコードを使用して、テキストを個々の単語に分割しています。日本語と中国語を除く、私が試したすべての言語でうまく機能しています。

コードを微調整して、日本語と中国語も適切にトークン化する方法はありますか? ドキュメントには、これらの言語がサポートされていると書かれていますが、適切な場所で単語を分割しているようには見えません。たとえば、「新しい」をトークン化すると、「新し」と「い」の 2 つの単語に分割されます (私は日本語を話せないので、それが実際に正しいかどうかはわかりませんが、私が持っているサンプルは、それらはすべて1つの単語であるべきだと言っています)。また、単語をスキップすることもあります。

kCFStringTokenizerUnitWordBoundary を使用しながら、中国語と日本語のロケールを作成してみました。結果は改善されましたが、私がやっていること (語彙へのハイパーリンクの追加) にはまだ十分ではありません。

利用可能な他のトークナイザーをいくつか知っていますが、コア基盤に固執できるのであれば、むしろそれらを避けたいと思います。

[更新]しばらくの間、日本語用の特定のユーザー辞書で mecab を使用することになりましたが、現在はサーバー側でこれらすべてを行うことに移行しています。完璧ではないかもしれませんが、すべてのプラットフォームで一貫した結果が得られています。

4

2 に答える 2

3

特定の言語を解析していることがわかっている場合はCFStringTokenzier、正しいCFLocale(または少なくとも からの推測CFStringTokenizerCopyBestStringLanguage) を使用して を作成し、 を使用する必要がありますkCFStringTokenizerUnitWordBoundary

残念ながら、中国語と日本語のテキストの完全な単語セグメンテーションは未解決の複雑な問題のままであるため、使用するセグメンテーション ライブラリにはいくつかの失敗があります。日本語の場合、 MeCabライブラリを内部でCFStringTokenizer使用し、ICU の Boundary Analysisを使用します(を使用する場合のみ、これがないと「新しい」とおかしいブレイクを得る理由です)。kCFStringTokenizerUnitWordBoundary

于 2011-11-27T11:28:20.437 に答える
2

NSLinguisticTagger も参照してください。しかし、それだけではそれ以上のものは得られません。

正直なところ、これら 2 つの言語 (および他のいくつかの言語) をプログラムで正確にトークン化することは非常に困難です。

LSM の WWDC ビデオもご覧ください。潜在的セマンティック マッピング。ステミングとレンマのトピックをカバーしています。これは、有意義にトークン化する方法をより正確に決定するための技術と科学です。

やりたいことは難しい。単語の境界を見つけるだけでは、正確な意味を伝えるのに十分なコンテキストが得られません。文脈を見て、単語ごとに分けてはいけないイディオムやフレーズを特定する必要があります。(文法形式は言うまでもありません)

その後、利用可能なライブラリをもう一度見てから、Python NLTK に関する本を入手して、NLP について本当に学ぶ必要があることを学び、これをどれだけ追求したいかを理解してください。

テキストの本文が大きいほど、本質的により良い結果が得られます。タイプミスや文法の誤りは考慮されていません。分析でロジックを駆動するために必要なコンテキストの多くは、単語として直接書かれていない暗黙のコンテキストです。ルールを構築し、物事を訓練することができます。

日本語は特に難しい言語であり、日本国外で開発された多くのライブラリはそれに及ばない. 分析が機能しているかどうかを知るには、言語に関するある程度の知識が必要です。ネイティブの日本人でも、適切な文脈がないと自然な分析を行うのに苦労することがあります. 言語が相互に理解可能な 2 つの正しい単語境界を提示する一般的なシナリオがあります。

例えるなら、正規表現で先読みと後読みを何度も行うようなものです。

于 2014-09-09T04:32:07.997 に答える