PHPのロシア語およびウクライナ語の確率的形態素解析器

すべてのWebサイト開発者の前に、遅かれ早かれ、サイト検索を実装するという疑問が生じます。 検索は単語に基づいていることが望ましい、すなわち 単語の終わりを考慮しませんでした。 この目的のために、プログラムは語彙の基礎を強調するステマリーで使用されます。 多くのステマーは辞書に基づいて機能し、中小規模のプロジェクトで巨大な辞書を使用しないために、確率論的な形態素解析を使用できます。 その際立った機能は、データベースのサイズが比較的小さいため、データベースの負荷がないことです。 ベースの品質割り当てに大きな損失なし。



スタンミングは、特定のソースワードの単語の基礎を見つけるプロセスです。 単語のベースは、単語の形態学的ルートと必ずしも一致しません。 ステミングアルゴリズムは、コンピューターサイエンスにおける長年の問題です。 このプロセスは、調査システムでユーザーの検索クエリを要約するために使用されます。

ステミングの特定の実装は、ステミングアルゴリズムまたは単にステマーと呼ばれます。







最近、ロシア語とウクライナ語に適切な品質のステマーが必要になり、 Andrey KovalenkoのWebサイトでインターネット掘り下げて、非常に興味深いステマーを見つけました。 ステマーの説明



それはC ++で実装されていたので、とても動揺しました。 Cで書かれているのは気分を害するものではありませんでしたが、仕様(PHPのみ)のために使用できなかったという事実です。 私はこれに同意せず、デバッガーで武装して、このアプリケーションをPHPに移植しました。



サイトにはPHP用のモジュールの形でより生産的なステマーがありますが、私にとっては1秒間に何ワードが12,000または2-3千を処理するかはあまり重要ではありません、私にとっては1000で十分です(速度をテストしませんでした)



移植されたクラスコード(stemka.php)



動作させる方法:



オリジナルのライブラリをダウンロードしますライブラリフォルダーからオリジナルのライブラリを取得します辞書をファジー* .inc



辞書をPHPに便利な形式にします。 データをバイナリファイルに変換し、file_get_contents関数を使用してダウンロードしました。



変換する前に、辞書を使用してC ++ファイルを編集する必要があります。

1.タグ「<?Php」をファイルの先頭に追加します

2.ファイルの最後に「?>」を追加します

3.「{」を「$ fuzzy = array(」に置き換えます

4.「}」を「);」に置き換えます。



その後、変換スクリプトを実行すると、ファイルが変換されます。

<?php

include "fuzzyuk.inc" ;

$ fp = fopen 'fuzzyuk.dat' 'w' ;

foreach $ v として ファジィ $

fwrite $ fp chr $ v ;

fclose $ fp ;

include "fuzzyru.inc" ;

$ fp = fopen 'fuzzyru.dat' 'w' ;

foreach $ v として ファジィ $

fwrite $ fp chr $ v ;

fclose $ fp ;

?>




変換したくない場合は、変換した辞書fuzzyuk.dat( 243 fuzzyru.dat(403)



ステマーは準備完了です。 使用例:



<?php

include "stemka.php" ;

$ stemka = new stemka ;

$ str = 'rewrite' ;

echo $ stemka- > GetStemCrop $ str 'uk' ;

?>





またはデモ



このトピックで完全にカバーされているふりをするのではなく、コードを共有することにしました。突然誰かが役に立ちます...



批判してマイナスすることができます。



All Articles