• ベストアンサー

PHP、MySQLでテキストを処理する

英語やドイツ語など、スペースで区切られた言葉で作られた任意の文書を解析 したいのです。解析内容は、単語ごとに分解し、その単語が出現した回数をカウントし DB(MySQLなど)に格納します。PHPとMySQLで何とか実現したいのですが、どのような 方法で、どんな関数を使うかなど教えていただけないでしょうか。 入力されるデータはTEXT形式(WORDもあり)で、WebのフォームからCut&Pasteや 直接打ち込み などの方法で入れます。格納形式は半角の小文字です。 DBに格納されたデータは別のDBと連携させる予定です。 よろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • neko-ten
  • ベストアンサー率55% (1287/2335)
回答No.1

実像不明な部分も多いので、セキュリティとか考えない状態です。 SQLなどのセキュリティは別途考察お願いします。 分解はPHPでexplode使えばすぐできるかな 例外がどれくらい出るかは運用次第かもしれないけど、非マルチバイトなら比較的スムーズに済みそうです。 カンマ、ピリオド、改行などの扱いをちょっと考えなければいけないですね。(入らない運用ならよし) http://php.plus-server.net/function.explode.html 個数を数えるのはPHPでもMySQLでもできそうですが、MySQLに格納するのが個数なのかな? PHPなら、splitで分割すればそのまま配列にはいるんで、array_count_valuesつかえば一発なきがする http://php.plus-server.net/function.array-count-values.html

jetkun
質問者

お礼

初心者なので、どんな情報でも助かります。ありがとうございます。まだセキュリティ・・ということを考えるレベルではないので一歩一歩です。またよろしくお願いします。

その他の回答 (3)

noname#244856
noname#244856
回答No.4

補足。 str_word_count単体では目的を達成できないので、$formatに1を指定して取得した配列にarray_count_valuesを使ってください。

noname#244856
noname#244856
回答No.3

単語がスペースで区切られた言語向けにならば、実はPHPに強力な標準関数が実装されているので、それを使いましょう。 str_word_count http://php.net/manual/ja/function.str-word-count.php マニュアルを熟読してください。

  • neko-ten
  • ベストアンサー率55% (1287/2335)
回答No.2

訂正 splitで分割すれば ↓ explodeで分割すれば こんなミスする人間ですんで、きちんと詳しい方の回答もさんこうにしてくだしあ・・・

jetkun
質問者

お礼

初心者なので、どんな情報でも助かります。ありがとうございます。じっくり勉強して、また質問させて下さい。

関連するQ&A

  • php mysqlについて

    初心者です宜しくお願いします。 phpからデータベースを使いたいのですが(mysql)、mysql_query()関数のところで1366エラーが出ます。 半角英数ならエラーは出ません。 プログラムを貼り付けます。どなたかお願いします、説明をもっと書きたいのですが私もあまりわかってないのでどうもすみません。 今やっていることは全てローカルですwindowsを使ってます、文字コードもshift_jisです。phpもmysqlも一台のコンピュータでやっています。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>MySQLへデータを登録</title> </head> <body> DBとの連携テスト結果<br> <?php // DBに接続 if(!$con=mysql_connect("localhost","root","y3kwyuba")){ echo"connect_error"; exit; } // DBを選択 if(!mysql_select_db("test",$con)){ echo"select_db_error"; exit; } //MySQL4.1への対応 //mysql_query("SET NAMES SJIS"); この上の行のコメントをはずすとうまく動くのですが色々調べましたら、この書き方は推奨されないと書いてありました、他に対策はあるのでしょうか? $name = $_POST['nm']; $age = $_POST['age']; // フォームで送られてきたデータでINSERT文を作成 $sql = "insert into t_touroku(name,age) values('$name',$age)"; // SQLを実行 if(!$res=mysql_query($sql,$con)){ echo"query_error"; echo "エラー番号:".mysql_errno(), #エラー番号 "メッセージ:".mysql_error(); #エラーメッセージ exit; } // DBから切断 mysql_close($con); // メッセージ出力 echo"登録完了"; ?> </body> </html> 宜しくお願いします。

    • ベストアンサー
    • PHP
  • phpでMySQL内の重複文字カウント

    phpでMySQL内に格納されている文字データのうち、重複した文字データを 重複数順にランキング表示するプログラムを作成しようと思います。 例 MySQLデータが 昼 夜 昼 昼 夜 朝 であれば、 1、昼 2、夜 3、朝 とphpで表示 MySQLへのデータ登録は、普通にmysql_queryでSQL文を飛ばしてデータ挿入しています。 その際、MySQL内のデータと重複したらイベント(重複カウントを1増やすなど)を起こす方法、 もしくは、重複しているデータと、その重複数を取得できるようなphp関数、SQL文はないものでしょうか? データ数自体は100程度のものなので、全データをphpで配列に格納してから、 配列内を捜査でもよいのですが・・・ 初歩的かつ限定的な質問ですが、どうかご回答お願いします。

    • ベストアンサー
    • PHP
  • WebサーバとDBサーバを用いてファイルを格納したいです、教えてください。

    PHPとMySQLを使用して、DBにバイナリファイルを格納する方法を考えています。WEB上からバイナリファイルをアップロードしてDBに格納し、後でダウンロードできる仕組みを作りたいです。使用しているサーバはfedora11です。 PHPとDBの連携はできたのですが、バイナリデータの格納方法は探しても見つからなくて困っています。誰か教えてください。

    • ベストアンサー
    • MySQL
  • Flash→PHP→MySQLへの値の受け渡しについて

    現在、Flashのフォームで受け取った値をPHP経由でMySQLへデータを格納するシステムを作成しています。 現在、詰まっている点とは、Flashで送信したデータがMySQLまで到達できないというところです。 少し分析してみたところ、PHPを単独でブラウザにて開くと "フィールドが取得できません。" と出力されていました。 これは、 ----- <?php $setsuzoku = mysql_connect("localhost", "*****", "*****"); if (! $setsuzoku) { die ("データベースに接続できません"); } if (! mysql_select_db ("test")) { die ("データベースが取得できません"); } mysql_query("INSERT INTO rank VALUES('".$HTTP_GET_VARS['nickname']."', ".$HTTP_GET_VARS['score']); if (!$fd) { die ("フィールドが取得できません。"); } // 処理が終わったことを知らせる print('OK'); ----- というプログラムで動かしていまして、『mysql_select_db ("test")』まで動作しているのではないかと思われます。 ですので、もしかしたらFlash以前にPHPとSQLの連携がうまくいっていないような気がするのですが…どうでしょうか? Flashからの情報を送信するシステムである以上、PHPで表示すると必ずこのような形になるのでしょうか? ちなみにMySQLには、必要なDatabaseとテーブルを作成しました。 問題の切り分けは一応してみましたが、間違っているかもしれません。何かご教授頂ければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • PHP・MYSQL超初心者です。

    PHP・mysql初心者です。掲示板を自分で考えて作っているのですが、 わからないところがあります。PHPを勉強してから、まだ月日が 経っていないので基本的なことでつまづいています。 登録画面で氏名・年齢を入力し、登録をクリックするとmysqlに データが保存され、そのデータを一覧で表示させたいです。 つまづいている所です。 1)mysqlにデータを保存する所 2)no・氏名・年齢をテーブルで表示する所 (noは自動的に1~順に振りたいのですが) 実用的ではないかと思われますが、宜しくお願い致します。 サイトや書籍で探しては見たのですが、基本的なことだと思う ので、あまり詳しく載っているのがなく困っています。 どなたかご教授下さい。 *form.html <html> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <body> <form method="post" action="form.php"> 氏名:<input type="text" name="simei"><br> 年齢:<input type="text" name="tosi"><br> <input type="submit" value="登録"><br> </form> </body> </html> *form.php <html> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <body> <? $simei=$_POST["simei"]; $tosi=$_POST["tosi"]; $db=mysql_connect("サーバーアドレス","ユーザー名","パスワード") or die("接続失敗"); print("デ―タベースサーバーに接続できました<br>"); mysql_select_db("データベース名")or die("データベースが見つかりません".mysql_error()); print("データベースに接続しました<br>"); //ここから下の記述方法がわかりません $a="insert into mihon_list(simei,tosi)values('$simei','$tosi');"; mysql_query($a)or die("命令が違います"); ?> 登録しました! </body> </html> *itiran.php <html> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <body> <table width=70% border> <tr><th>no</th><th>氏名</th><th>年齢</th></tr> </table> </body> </html>

    • ベストアンサー
    • PHP
  • PHPとMYSQL、DBのデータが空の表現は0が良

    こんばんは。 MYSQLではint型、varchar型、text型、smallint型、tinity型、float型で データが無いことを表すのはnullでも構わないですよね。 そのときPHPでMYSQLからデータを受け取ってデータが空かどうかを区別するには、 if(!a==null){}のようにnullを使うことになります。 PHPでnullを扱うのはトラブルの元になると参考書に書いてありました。 そういうときは、MYSQLでnullじゃなくて0が一番無難でしょうか。 また、0よりも半角文字や「データ無」のようにするべきですか。

    • 締切済み
    • PHP
  • MySQLのTIME型データをPHPで表示変更したいです。

    PHPとMySQLで、時間情報の取り扱いを試しています。 まず、MySQLにはTIME型で「10:00:00」などの時刻情報を格納しています。 それを、PHPでSELECTしてHTMLの中に表示したいのですが、 その際、2つの点でうまくいかずに困っています。 1 PHPでHTMLの中に表示するときには、「時」と「分」だけの、「10:00」の形式で表示したいのですが、方法がわかりません。 (いくつか関数を試しても、どれもTIMESTAMP型を扱うものでした) 2 例えば、「4時」のデータの場合「04:00:00」となりますが、これを「4:00」のように語頭の0を削って表示したいです。 おそらくどちらもMySQLに格納する方法を文字列型にすればいいのかとも思うのですが、SELECTの際に現在時刻との比較(現在時刻より早いか遅いかなど)を行いたいので、それができません。 何かいい方法がありましたら、教えて頂ければありがたいです。 

    • 締切済み
    • PHP
  • php+MYSQL

    タイトル 本文 書き込み後保存を押すと 下に書き込み保存されていく形です タイトル 本文 書き込み日時 タイトル 本文 書き込み日時 エラー自体は出てないのですが書き込みが反映されません val_dunpで調べたところ resource(7) of type (mysql result) > このように出てきましたなにか文自体に必要なものがないのでしょうか? <?php $link = mysql_connect('localhost','user','pass'); if (!$link) { die('接続に失敗しました。'.mysql_error()); } $db_selected = mysql_select_db('ogawa',$link); if(!$db_selected) { die('データベース選択に失敗しました。'.mysql_error()); } $res = mysql_query('SELECT * FROM test'); if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; $kakikomi = $_POST['kakikomi']; if ( $subject !=='' && $honbun !=='' && $kakikomi !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," ."kakikomi," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun )."'," . "'" . mysql_real_escape_string( $link, $kakikomi)."'," ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($query,$link); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT id,subject,honbun,kakikomi FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].''.$val['kakikomi'].'<br>'; } ?> </body> </html>

  • MySQL4.0での日本語検索

    MySQL4.0で簡単なワード検索をしようと思っています。 HTMLのフォームを使い、単語をいれてもらう形式です。 FULLTEXTを使い日本語検索をしようとおもったのですが、どうやら格納するデータおよび、検索する際の単語をお互い16進変換すれば大丈夫そうなのですが、データを登録する際の諸事情によりそういうわけにも行かず困っています。 LIKE '%テスト%' みたいな検索だとさすがに重過ぎるわけです。 なにかよい方法はないのでしょうか? ちなみに、サーバ環境はレンタルサーバのためかなり制約があります。。

  • PHP+MySQLで(特殊な)並べ替えをしたい

    例えば、ランクSS~Cの値を格納しているカラムで、 SS>S>A>B>C のような順序でソートをかけたいのですが、 カラムの増設をせずに実現できる方法はありますでしょうか。 それともランクで並べ替える用のカラムを 加えなければできないでしょうか。 なるべくなら、純粋なデータのみをDBに格納して 一機能のためだけのフィールドを作るのは 避けたいと思っているのですが。 可否がわかるかたいらっしゃいましたら お願い致します。

    • ベストアンサー
    • MySQL

専門家に質問してみよう