ホームページ >バックエンド開発 >PHPチュートリアル >PHP中国語高速単語分割原理とソースコード

PHP中国語高速単語分割原理とソースコード

WBOY
WBOYオリジナル
2016-06-13 12:35:19840ブラウズ

PHP中国語高速単語分割原理とソースコード

1. 順方向最大値マッチングアルゴリズムと逆方向最大値マッチングアルゴリズムの欠点

前方最大一致アルゴリズム: 分割するテキスト内の複数の連続する文字を単語リストと左から右に照合し、一致する場合は単語を分割します。しかし、ここには問題があります。最大の一致を達成するために、最初の一致を分割することはできません。例: 中華人民共和国は今日設立されました。左から右にスキャンしてそれぞれ検索します: 中国、中国、中国人、中華人民共和国、中華人民共和国、中華人民共和国、中華人民共和国今日、今日、今日、今日、になった、確立、確立、確立。シソーラスを 14 回検索した後の最終的なセグメント化結果は、中華人民共和国/今日/設立されました。したがって、長い単語に遭遇した場合、データベースを複数回検索する必要があり、非常に非効率的です。また、より深刻な問題は、単語の最大長が制限されていることです。アルゴリズムの効率を考慮するために、最大単語長を非常に大きく設定することは不可能であり、その結果、長い単語が正しく分割されなくなります。 。

逆に、逆最大一致アルゴリズムは長い単語を分離し、不正確なセグメンテーションを引き起こします。たとえば、上記の分割するテキストを右から左にスキャンする場合、設立、設立、設立、設立、設立日、日、今日、今日、国、国、および国、共和国、人民共和国を個別に検索する必要があります。 、人々、人々、中国人、中国、中国。 17 単語でデータベースにクエリを実行すると、最終的なセグメンテーション結果は次のようになります: China/People/Republic/today/wasted/。中華人民共和国を 3 つの単語に分割します。

2. 最大マッチングアルゴリズムの欠点を克服するアルゴリズム

最大一致アルゴリズムの非効率性と長い単語を分割できない問題を克服するために、語彙を構成できるすべての漢字にインデックスが付けられ、単語の最初の文字として使用されます。次に、各漢字で始まる単語を 1 つのカテゴリに分け、単語の長さ順に並べ替えます。語彙構造は次のとおりです:

単語を分割する場合は、漢字からその単語で始まる熟語を検索(長さ約3000の線形検索)し、長い単語から短い単語の順に検索します。5、4、3、2、分割対象の文(Linear)と比較し、一致するものがあれば1つの単語に分割し、次の単語と照合を続けます。このようにして、語彙の検索効率が大幅に向上し、任意に長い単語を照合する問題が解決されます。

PHP アルゴリズムの実装では、オンライン マッチングを高速化するために、上記の語彙構造は PHP の連想配列の形式で実装され、すべてメモリにロードされます。レキシコンの追加や削除を柔軟に行うために、PHPの連想配列構造でレキシコンを自動生成する文字列処理プログラムを作成しました。実装アルゴリズムの詳細については、PHP ソース コードを参照してください。

PHP 単語分割ソース コードのダウンロード: http://www.box.net/shared/gryspzppsb

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。