3

https://github.com/FLCLjp/iPhone-libmecabにあるMeCab 用の iPhone ライブラリを使用しています。可能なすべての単語をトークン化するのに苦労しています。具体的には、「吉本興業」を「吉本」と「興業」の 2 つにトークン化することはできません。これを修正するために使用できるオプションはありますか? iPhone ライブラリは何も公開しませんが、objective-c ラッパーの下で C++ を使用します。よりきめ細かい制御を行うために変更できる何らかの設定があるに違いないと思いますが、どこから始めればよいかわかりません。

ちなみに、この「mecab」にタグを付けたい人は、おそらく適切でしょう。新しいタグを作成することはまだ許可されていません。

更新: iOS ライブラリは、libmecab.cpp で定義されている mecab_sparse_tonode2() を呼び出しています。誰かがそのファイルに関する英語のドキュメントを教えてくれれば、それで十分かもしれません。

4

1 に答える 1

10

これには iOS 固有のものはありません。mecab で使用している辞書 (おそらく ipadic) には、吉本興業という会社名のエントリが含まれています。名前の両方の部分は別々の名詞としてもリストされていますが、mecab は複合名を 1 つの単語としてタグ付けすることを強く好みます。

Mecab には、化合物をパーツに分割するかどうかをユーザーが選択できる機能がありません。一般に、このような機能を実装するのは難しいことに注意してください。なぜなら、どの化合物を分割でき、どの化合物を分割できないかについて誰もが同意しているわけではないからです。たとえば、容疑者は、容疑者と者からなる複合語ですか? 純粋に形態学的な観点からはおそらくイエスですが、ほとんどの実用的なアプリケーションではおそらくノーです。

分割したい化合物のリストがある場合は、それらを構成する部分のユーザー辞書を作成し、メイン辞書に加えて mecab にこれを使用させることで簡単に修正できます。

これを行う方法に関する日本語のドキュメントがここにあります。特定の例では、以下の手順が含まれます。

  1. 吉本と興業の 2 つのエントリを持つユーザー辞書を作成します。

    吉本,,,100,名詞,固有名詞,人名,名,*,*,よしもと,ヨシモト,ヨシモト
    興業,,,100,名詞,一般,*,*,*,*,こうぎょう,コウギョウ,コウギョウ
    

    両方のエントリが既定の辞書に既に存在すると思われますが、それらをユーザー辞書に追加し、比較的低い特定性インジケーターを指定することで (私は100両方に使用しました。低いほど、分割される可能性が高くなります)、次のようになります。 mecab は全体よりも部分を好む傾向があります。

  2. ユーザー辞書をコンパイルします。

    $> $MECAB/libexec/mecab/mecab-dict-index  -d /usr/lib64/mecab/dic/ipadic -u mydic.dic -f utf-8 -t utf-8 ./mydic
    

    コマンドを調整する必要がある場合があります。上記は次のことを前提としています。

    1. Mecab は のソースからインストールされました$MECAB。パッケージ マネージャーによってインストールされた mecab を使用する場合、mecab-dict-indexツールを見つけるのが難しい場合があります。ソースからの最適なインストール。

    2. デフォルトの辞書は にあり/usr/lib64/mecab/dict/ipadicます。これは mecab パッケージの一部ではありません。これは別のパッケージ (例: this ) として提供され、これも見つけるのが難しい場合があります。

    3. mydicは、ステップ 1 で作成したユーザー辞書mydic.dicの名前です。 は、出力として取得するコンパイル済み辞書の名前です (存在する必要はありません)。

    4. システム辞書 (-tオプション ) とユーザー辞書 (-fオプション ) はどちらも UTF-8 でエンコードされています。これは間違っている可能性があります。その場合、後で mecab を使用したときにエラー メッセージが表示されます。

  3. mecab の構成を変更します。システム全体のインストールでは、これは名前付き/usr/lib64/mecab/dic/ipadic/dicrcまたは類似のファイルです。あなたの場合、それは別の場所にある可能性があります。構成ファイルの末尾に次の行を追加します。

    userdic = home/myhome/mydic.dic
    

    上記でコンパイルした辞書への絶対パスが正しいことを確認してください。

その後、入力に対して mecab を実行すると、化合物がその部分に分割されます (Linux システムで mecab 0.994 を使用してテストしました)。

より完全な修正は、デフォルトの辞書のソースを取得し、分割したいすべての複合名詞を手動で削除してから、辞書を再コンパイルすることです。一般的な意見として、CJK トークナイザーを本番モードで長期間にわたって深刻なアプリケーションに使用するには、通常、一定量の辞書のメンテナンス (エントリの追加/削除) を定期的に行う必要があります。

于 2013-02-05T02:45:09.627 に答える