PHP RUtils-ロシア語テキストを処理するための小さなライブラリ

Pythonで作業するとき、私はPytilsライブラリを使用してロシア語のテキストを処理することがよくあり、PHPで作業するときにこのライブラリを本当に見逃しました。 おそらく検索が不十分だったかもしれませんが、見つけたすべてがそのような機会を提供しなかったか、きれいなコードについての私の考えにあまり答えなかったのです。



そのため、ライブラリをPHPに移植することを決めた後、それを人々と共有したいと思い、それを改善するための手助けを本当に望んでいます。アドバイス、バグレポート、特にプルリクエストに満足します。 ライブラリはGitHubにあります: github.com/Andre-487/php_rutils



10.26.2013からのUPD:ライブラリはComposerからも利用できるようになりました: packagist.org/packages/andre_487/php_rutils

また、ライブラリを改善し、安定版をリリースしてくれたすべての人に感謝します。



ライブラリ機能



PHP RUtils-PHPのPytilsポート。 これらは、ロシア語のテキストを操作するためのユーティリティです。 ユーティリティは、次のモジュール(クラス)に分かれています。







コード例



数字モジュール


複数のフォーム選択


$variants = array( '', //1 '', //2 '' //5 ); $amount = 15; echo $amount, ' ', RUtils::numeral()->choosePlural($amount, $variants); //Result: 15  echo RUtils::numeral()->getPlural(2, $variants); //Result: 2 
      
      





単語でのフォームの選択と出力


 echo RUtils::numeral()->sumString(1234, RUtils::MALE, $variants); //Result:      
      
      





言葉で数字を書く


 $numeral = RUtils::numeral(); echo $numeral->getInWordsInt(100); //Result:  echo $numeral->getInWordsFloat(100.025); //Result:      echo $numeral->getInWords(100.0); //Result: 
      
      





ルーブルでお金を引き出す


 echo RUtils::numeral()->getRubles(100.25); //Result:     
      
      







Dtモジュール


今日の日付


パラメーターは\php_rutils\struct\TimeParams



インスタンスとして渡されます。配列として渡すことも可能です



 $params = new TimeParams(); $params->date = null; //    $params->format = ' d FY '; $params->monthInflected = true; echo RUtils::dt()->ruStrFTime($params); //Result:  22  2013 
      
      





歴史的日付


パラメータは配列として渡され、フィールドはTimeParams



クラスと同じです。

日付は、自由形式の文字列として送信されます。 日付をUnixタイムスタンプまたはDateTime



クラスのインスタンスとして渡すこともできます。



 $params = array( 'date' => '09-05-1945', 'format' => 'ld FY     - ', 'monthInflected' => true, 'preposition' => true, ); echo RUtils::dt()->ruStrFTime($params); //Result:   9  1945     - 
      
      





過去の固定日までの期間


この関数の時間形式は、 Dt::ruStrFTime



形式に似ています。

$accuracy



パラメーターは、情報の詳細を担当します。



 $toTime = new \DateTime('05-06-1945'); echo RUtils::dt()->distanceOfTimeInWords($toTime); //Result: 24 976   $toTime = strtotime('05-06-1945'); $fromTime = null; //now $accuracy = 3; //, ,  echo RUtils::dt()->distanceOfTimeInWords($toTime, $fromTime, $accuracy); //Result: 24 976 , 11 , 21  
      
      





固定日の間の期間


 $fromTime = '1988-01-01 11:40'; $toTime = '2088-01-01 12:35'; $accuracy = 3; //, ,  echo RUtils::dt()->distanceOfTimeInWords($toTime, $fromTime, $accuracy); //Result:  36 525 , 0 , 55 
      
      







透過モジュール


 // echo RUtils::translit()->translify(' —   '); //Result: Muha - eto malen'kaya ptichka //  echo RUtils::translit()->detranslify("SCHuka"); //Result:  //    URL'   echo RUtils::translit()->slugify(' —   '); //Result: muha---eto-malenkaya-ptichka
      
      







タイプミスモジュール


 $text = <<<TEXT ... . .     (   " "45)  Weather Forecast (r),      -   +-451F. TEXT; //  echo RUtils::typo()->typography($text); /** * Result: * ... . .     (  « » №45)  Weather Forecast®, *      —   ±451°F. */ //   "extended" echo RUtils::typo()->typography($text, TypoRules::$EXTENDED_RULES); /** * Result: * … . .     (  « » №45)  Weather Forecast®, *      —   ±451 °F. */ //  echo RUtils::typo()->typography($text, array(TypoRules::DASHES, TypoRules::CLEAN_SPACES)); /** * Result: * ... . .     (  " " № 45)  Weather Forecast (r), *      —   +-451F. */
      
      





また(これはここでは表示できません)、Typoモジュールは改行なしスペース(NBSP、THIN NBSP)を配置します。 このモジュールはプレーンテキスト向けに設計されているため、特殊なHTML文字は使用されず、UTF-8文字が直接使用されます。



詳細



Pytilsを移植したとき、他のPytilsユーザーがPHPバージョンを簡単に使用できるように、すべての機能を実装し、インターフェイスを認識できるようにしようとしました。 また、ほとんどのテストケースは Pytilsテストから取得されます。 また、Pytilsリポジトリから多くのコメントと例を借りました。 しかし、もちろん、著者のビジョンとPHPの詳細に関連して、いくつかの「改善」がありました。



たとえば、 Dt :: ruStrFTimeメソッドのシグネチャを変更し、引数の大きなリストの代わりに構造体を使用することが決定されました。 Pythonにはドラマはありません。デフォルト値を持つ膨大な数の引数から突然変更された場合、最後の変更のみが必要です-名前付き引数が助けになります。 しかし、PHPで同様の状況が発生した場合、それは本当の悲劇になります。 そして、関数にはまともなパラメーターがあります。



また、多くの場合、PHP開発者はクラスオブジェクトを関数に渡すことを好まないが、配列を渡すことを好むため、これらすべてのパラメーターを連想配列の形式で渡す機能が実装されています。



日付に関するPHP開発者の好みも考慮に入れて、できる限り快適に作業できるようにしました。 ご存知のように、時間の経過とともに、PHPは2つの形式で動作することがよくあります。フリーストリング(02.03.2005、2005-03-02)とUnixタイムスタンプです。 DateTime



クラスも時々使用されます。 日付で機能する関数は、これら3つのタイプすべてで機能することを決定しました。 また、送信時間のタイムゾーンを指定する機能も追加しました。



すべてのパブリックメソッドと構造体フィールドについて詳細なコメントを書きました。 図書館はロシア語を話す聴衆を対象にしているという事実にもかかわらず、私は英語のコメントで自分自身と図書館利用者に良いオープンソースのルールを教えるために自分自身を恥ずかしくするという難しい選択をしました。



この記事に記載されているすべての例は、Webサーバーとコンソール(cp866を備えたWindowsコンソールを含む)の両方での実行に適したスクリプトの形式で利用できます



現時点では、ライブラリにバージョン0.1を選択していますが、それをさらに開発するのに役立つユーザーがいて、バージョン1.0、さらには2.0になることを願っています。



All Articles