2009-10-22 56 views
16

日本語と中国語のテキストだけでなく、他の言語のMySQL全文検索をしたいと思います。問題は、これらの言語やおそらく他の言語では通常単語間に空白がないことです。テキストと同じ文章を入力する必要がある場合、検索は便利ではありません。単語間にスペースを含まない言語で単語が区切られます(アジアなど)?

英語は動作しなければならないので、すべての文字の間にスペースを入れることはできません。私はPHPやMySQLでこの問題を解決したいと思います。

独自のインデックス作成単位である文字を認識するようにMySQLを設定できますか?これらの文字を認識できるPHPモジュールがあるので、インデックスの周りにスペースを置くことができますか?

更新

部分的な解決策:

$string_with_spaces = 
    preg_replace("/[".json_decode('"\u4e00"')."-".json_decode('"\uface"')."]/", 
    " $0 ", $string_without_spaces); 

これは私が特別扱いする必要がある文字のうちの少なくともいくつかのうち、文字クラスになります。私はおそらく言及すべきです、それはインデックスされたテキストを書き留めることは容認されます。

スペースを挿入する必要がある文字の範囲を知っている人はいますか?

また、PHPでこれらの文字を表現するには、より優れた移植可能な方法が必要ですか?リテラルUnicodeのソースコードは理想的ではありません。私はすべての文字を認識しません。彼らは私が使用しなければならないすべてのマシン上でレンダリングしないかもしれません。上述の言語のために破壊

+3

単語の間にスペースを使用しない他の近代的な言語はタイ、ラオス、クメール(カンボジア)、およびビルマ(ミャンマー)です。ベトナム語では、外国語以外のすべての音節の間にスペースが使用されるという関連する問題があります。 – hippietrail

答えて

15

Wordは基本ステミングルールの理解と共に辞書を使用する例のいずれかの、言語的アプローチを必要とします。

中国語では、すべての文字を別々の単語に分割するだけで、エンドユーザーが提供する検索基準と同じ「トークン化」を単純に適用するという、比較的成功した全文検索アプリケーションについて聞いたことがあります。次に、検索エンジンは、検索基準と同じ順序で文字 - 単語を供給する文書のより良いランク付けを提供する。 ひらがなとカタカナの文字セットが、短いアルファベットのヨーロッパ言語に近いテキストになっているため、これは日本語などの言語に拡張できるかどうかはわかりません。

EDIT
リソース
この問題を壊す単語だけでなく、関連する問題は、全体の本はそれについて書かれているように非自明です。 CJKV Information Processingを参照してください(CJKVは中国語、日本語、韓国語、ベトナム語を表していますが、CJKキーワードを使用することもできます)。このトピックの1ページャーについては、Word Breaking in Japanese is hardも参照してください。
このトピックを扱う資料の大部分は、基礎となる母国語の1つで書かれているため、これらの言語に比較的堪能な人には限定されています。その理由から、単語ブレイカーロジックの実装を開始してから検索エンジンを検証するのに役立つためには、ネイティブスピーカーまたは2人の助けを求める必要があります。

様々なアイデア
体系(引用符、括弧、ハイフンなどの文字と、そのようなことを言う)単語の区切り
を意味するものではあり特定の文字のあなたのアイデアは良いですが、それはおそらく、いくつかので使用されるものヒューリスティックですプロフェッショナルグレードのワードブレーカー。しかし、事例発見に基づいて、最初から組み立てるのではなく、そのようなリストの正式な出典を探すべきです。
かなから漢字への遷移で単語を区切ることです(ただし、逆の方法ではないと思います)。ひらがなからカタカナまたはその逆の遷移。
言葉を壊すこととは無関係に、索引は、たとえひらがなのようなすべての文字を対応するカタカナ文字に体系的に変換することで利益を得ることができます。単なる教育されていないアイデア!それが助けになるかどうかを知るために、私は日本語について十分に知りません。直感的には、いくつかのヨーロッパ言語で実践されているように、強調された文字などを対応する強調されていない文字に体系的に変換することに似ているでしょう。

個々の文字を体系的に索引付けする(およびその検索順序に基づいて検索結果を順位付けする)というアイデアは、仮名文字を連続して並べるなど、いくつかの他のルール...そして、不完全だが実用的な十分な検索エンジンを作り出す。

これが当てはまらない場合には、失望しないでください...これは些細なことではないと言えますし、長期的には休憩を取って本や2冊を読んで時間とお金を節約できます。試してみて、「理論」のますますのベストプラクティスを学ぶためのもう一つの理由は、あなたがが、すぐに壊す単語に焦点を当てているようだ瞬間に、検索エンジンにも起因-意識から利益を得ることができるということです;実際には、これらの2つの問題は、言語的には少なくとも関連しており、並行して処理することで恩恵を受ける可能性があります。

この厄介な行為にふさわしい幸運です。

+0

複合語を分割することは全く受け入れられます。シンボルを分割するときだけを知る必要があります。部分的な解決策のために私の更新がすぐに更新されるのを見てください。 –

+0

私を許してください。私はまたあなたの時間に感謝の言葉を意味する。 :) –

+0

@ジョー:どういたしまして。私は言語学やNLPに関心を持っていますが、CJK言語に特有の知識は非常にまったくありません。あなたのクエストに役立つかもしれないいくつかのキーワードとオンラインの参考文献を追加したので、私の編集を読んでください。幸運:-) – mjv

1

一年後、あなたはおそらくこれ以上、これを必要としませんが、次のページのコードは、あなたがする(ED)を望むもののためにいくつかのヒントがあるかもしれません:

http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/spamfilter/japanese-tokenizer.el.txt

あなたの場合あなた自身の検索で上記の記事の後に進歩を遂げたので、他の人が知りたいと思うことは確かです。

(ここでは良い答えがあると言うように編集: How to classify Japanese characters as either kanji or kana?)は

+1

私の質問の更新の例の文字の範囲を認識することはこれまでに起こったすべてのケースで問題を解決したことが判明しました。少なくとも、私たちの少数のユーザーはこの問題に納得して満足していました。 –

+0

私はこのソリューションがもう十分ではない日を楽しみにしています。問題をより完全かつ面白く解決することができます。 –

+0

ありがとうございました。 –

関連する問題