-アルゴリズムを使うPHPProgramming

第3章 便利なアルゴリズム

01 迷路の自動生成
棒倒し法による迷路の自動生成 - maze1.php - Parse error : parse error in D:\xampp\htdocs\sample\c3\maze1.php on line 32 - 全く分からず、断念しかないかも
穴掘り法による自動生成 - maze2.php - Parse error : parse error in D:\xampp\htdocs\sample\c3\maze2.php on line 36 - 全く分からず、断念しかないかも

02 暗号化について
シーザー暗号について - caesar.php - Parse error : parse error in D:\xampp\htdocs\sample\c3\caesar.php on line 21

07 Webサイトのスクレイピング
Webサイトからのデータ収集 -
標準的なPHPのスクレイピング - test1.htmlのデータをscraping_test1.phpで取り出す
素のPHPをScraping - SimpleXMLを使う - scraping_test2.phpで取り出す
Goutteライブラリで手軽にScraping - goutte.pharをまずInstallしておく
Goutteのインストール - scraping-mmlbbs2.php - 例題どうりにデータが得られず失敗 - WebブラウザのDeveloperToolも役立つ - GoogleChrome/addressbarのみぎにある三アイコンからその他のツール->DeveloperTool->Elements
ログインが必要なWebサイトにAccessする - http://uta.pw/sakusibbs/ - お気に入りの一覧を取得 - scraping-sakusibbs-getfav.php - 失敗、原因不明

第4章 日本語とテキスト解析

01 正規表現を覚えよう
正規表現について
PHPの正規表現エンジンについて - PCREで正規表現 - 文字列の置換 re-pcre.php
鬼車で正規表現 - 文字のEncodingを指定して文字列の置換 re-oni.php
PHPで正規表現を扱うときの注意 - 変数を展開する文字列""ではなく、展開の無い文字列''を利用すること
正規表現の基本的なメタ文字について
特殊文字「¥」- \\「\を表す」、\n「改行」、\t「タブ」、\d「数字」、\D「数字以外」、\s「タブやスペースなどの空白文字」、\S「空白以外の文字」、\w「アルファベッドや数字」、\W「単語構成文字以外」- $pat = '([0-9]+)\:([0-9]+)\:([0-9]+)';
位置を表す正規表現「^」「$」- 先頭と末尾 たとえば 「^p」は先頭のpianoやpoolはマッチする - $pat = '#\.png$#'; pngで終わるかを判定 .はメタ文字なので\でエスケープ
任意の一文字「.」- $pat = '\^s..y$\'; sから始まり、..の任意の2文字をはさみ、yで終わる4文字の単語
文字集合「[xyz]」- [a-d]は[abcd]と同じ、「0-9」は数字のいずれか
文字集合の否定「[^xyz]」- 記述された文字以外の文字にマッチさせる、「^0-9」は数字以外を表す
直前のn回以上の繰り返し -「*」0回以上の繰り返し、「+」1回以上の繰り返し、「?」0か1回以上の繰り返し、「{n,m}」n回以上m回以下の繰り返し
部分マッチキャプチャ「(re)」- キャプチャーした文字列をreで記録し、全体または部分が一致した部分を返す - re-capture.php & re-capture2.php
選択「(aa|bb)」- (台湾|中華)の両方を選択できるように記述 - re-select.php
パターン修飾子について - mパターンが複数行として扱えるようになるので重要

02 日本語の文章を扱うための知識
文字エンコーディング -
文字エンコーディングの変換 - mb_convert_encoding(string $str[$utf8], string $to_encoding["SJIS"], mixed $from_encoding) - 文字化けが起こっているアプリに追加してうまく行くかを試すこと - mb_convert.php - 汎用も作成 mb_covert_encoding.html/php ただしUTF-8で作成しているので、SJISで送ると両方文字化けする
文字エンコーディングの特徴を調べよう -
ASCIIについて - ascii.php - 結果を得られず、原因不明
ISO-2022-JPについて - JISコード - iso-2022-jp.php - 改行を入れると表示されないので元へ戻す
Shift-JISについて - "\"(0xSC)がJISコードと被る
EUC-JPについて - Unix/Linuxで使われる、Escapeを使わないで、ASCIIが利用してない上位ビットを立てることで、文字を判別
Unicode(UTF-16/UTF-8)について - HTML5では標準のEncoding
Unicodeコードポイントから文字を得る - 文字ごとにコードポイントがあり、PHP7ではEscape処理がサポートされている - mb_unicode.php - PHP7なので扱えない
それ以前のVersionではjson_decode()を使って出力させる - mb_unicode2.php
あるいはUTF-8で1バイトずつ文字列を指定 - mb_unicode3.php - 汎用はコード文字を表示させる手間があるので現実的ではない
正規表現(PCRE)でUnicodeを利用する - \x(hhh)\の形式でコードポイントを指定できる - mb_kana.php - 汎用はカナのみを選ぶ用途がないので不要

03 形態素解析について
形態素解析エンジンについて - MeCabについて http://taku910.github.io/mecab/ バージョン0.996(2013-02-18) - C:\Program Files\MeCabにInstall済み - 使い方がLinax風なので確認ができず
PHP拡張(php-mecab)を使う場合 -InstallがLinax風なのでできず、これ以降のphpのアプリも確認できず

04 頻出語句の抽出と辞書のカスタマイズ - 03と同じ

05 検索と置換と抽出と削除
文字列の操作で役立つ命令 - strpos() 文字列の検索 - 比較演算子を使うときは===を使うこと、strpos-test.php
- strstr() 見つけた場所から末尾までを取り出す - strstr-test.php
- substr() 文字列の部分抽出、引数がマイナスのときは後ろから数える - substr-test.php
- 文字列の部分削除 substr()を使って任意のところを削除されるが、結果のつなげて表示ができていないので、もう一つ分からず - substr-delete.php
- 文字列の分割と統合 - explode()とimplode() - カンマ(,)で文字列を分割し、ハイフン(-)で連結して表示 - explode-test.php
- 文字列の置換 - str_replace() - explode("-"、$str)をimplode("/"、explode("-"、$str))することと同じ - str_replace-test.php
JSON5のパーサーを作る - 検索しても何のアプリかよくわからないので省略

06 レーベンシュタイン距離と文章の類似度の検出
文章が似ているかどうか
レーベンシュタイン距離について -
レーベンシュタイン距離の計算プログラム - lev-distance.php - どこかに誤りがあるためか表示されず
標準関数のlevenshtein()は使えない?! - ngram-unagi.php - どこかに誤りがあるためか表示されず

07 マルコフ連鎖で文章の要約
マルコフ連鎖について - marcov.inc.php - どこかに誤りがあるためか表示されず
マルコフ連鎖ブラウザ版を作ろう - marcov-web.php - どこかに誤りがあるためか表示されず