電子書籍の厳選無料作品が豊富!

前回↓
http://oshiete1.goo.ne.jp/qa29

で回答をいただいて、問題は解決したのですがまた新たに
わからないことがあるので質問させてください。

作っているプログラムは
ユーザーがtextareaからインプットした文章(英語)を
PHPプログラムが読み取り
出現数を数えるというものです。

ここまでは前回の質問で解決したのですが、
その後
インプットした文章から 特に文章の内容に関係ないと思われる単語(例えば、I,am,you,are,and,orなど)を除外したいのです。
そこから、出現回数を数え、一番多い出現数の単語をoutputしてユーザーに返し… とプログラムがさらに続くのですが

「特定の単語の除外」で困っています。

プログラムは今、以下のような状態です。

$story = _Post["story"];     //get the story from HTML doc
preg_match_all("/([a-zA-Z']+)/",$story,$match); //Get the words

foreach($match[0] as $val){
$count[$val]++; // strtolower
}



このプログラムの途中で、特定の単語(I、you、amなど)を削除したいのです。2行目で作った配列matchから特定の単語をうまく除外するよい方法はないでしょうか?
explode、split等ではうまくいきませんでした。

アドバイスをいただけないでしょうか。
よろしくお願いします。

A 回答 (3件)

除外対象の単語配列


array('I','am','you',・・・)
を作成してarray_diffで差分を取れないですかね。。
    • good
    • 0
この回答へのお礼

array_diffを使ったところ成功しました!
ほんとうにありがとうございます。

「文字列をformから読み取る

意味のない単語を削除

出現回数をカウント

出現数が一番多い単語を取り出す。

ユーザーにその単語を表示。
とともに、ユーザーがインプットした文書を保存。

今までにこのホームページの全ユーザーがインプットした文章の中で
同じ最頻出単語を返した 文書の数を表示。

さらにリンクを示して、クリックすると、同じ最頻出単語を返した文章を読める。」

という自分にとってきついプロジェクトだったのですが、
おかげさまでようやく完成しました。
単語除外がうまくいかずほんとに困っていました。
ほんとにありがとうございます。

お礼日時:2007/04/13 01:25

文章1にあり文章2にはない単語の数を数える仕様にした方が


汎用性があると思います。
$pattern="/([a-zA-Z']+)/";
$story1 = 'I am a student. I am a XX university student.';
$story2 ='I,am,you,are,and,or,a';
preg_match_all($pattern,$story1,$match1);
preg_match_all($pattern,$story2,$match2);
foreach($match1[1] as $word){
if(!in_array($word,$match2[1])){
$array[$word]++;
}
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
NO.2さんのように 配列を比較するというアイディアで
進めるのがいいようですね。

参考になる回答をありがとうございました。

お礼日時:2007/04/13 01:26

単語リストを保持し、走査する前に 空白などに置換する


この場合は作業用としてデータを複製しておく。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
空白等にreplaceする方法も考えたのですが、
例えば、aを空白にreplaceしようとすると
abcが bcになってしまいうまく動かなかったのです。

お礼日時:2007/04/13 01:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!