文章の中に特定の単語が含まれていないかを確認するWebアプリを作っています。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
全文検索ならElasticsearchをおすすめします
追記:
いい記事を見つけましたのでご紹介します
Elasticsearchを用いた日本語検索システムの理論と設定
投稿2016/12/05 06:19
編集2016/12/05 06:21総合スコア123
0
ベストアンサー
思いつきです。
想定されているケースが、$textよりも$tangoが多いので、$textを1文字で区切って分割し、分割された1文字から始まる$tangoを絞り込み、ヒットした$tangoで$text内をチェックするのが良いかと思いました。
説明するのが難しいですが・・・
以下の流れでしょうか。
1.対象の文字列を1文字で分割する
今回であれば、「今日田中くんと会いました」を配列等で「今 日 田 中 く ん と 会 い ま し た」と1文字で分割します。
分割して配列に入れると使い易そうと思いましたが、マルチバイトは面倒なのですね。
↓の方のを参考に分割する。
http://tricky-code.net/mine/php/mphp02.php
配列入れたものを、ついでにarray_unique等の関数で重複を除きます。
2.それぞれの文字列を$tangoに対して検索します。
適当にSQLのイメージですが、
select * from tango where tango_text like '今%' or tango_text like '日%' or tango_text like '田%' or ・・・(延々と続く)
3.上記でヒットしたワードに対し、$textでチェックする。
とすると、流れ的にも効率が良いのではと、思いました。
試しにニュースサイトの本文を1文字で分割した場合、800文字程度になりました。
単語でチェックするよりは良いかもしれませんと感覚的に思いました。(実際にやってみないと分かりませが)
投稿2016/12/05 14:40
総合スコア179
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
検索対象の文章に対して大量のワードの部分一致検索ですか。
(禁止ワード検索とかでいろんなところで実績ありそうな気はします。)
回答でなくてすみません。私も興味あります。
SQLで以下のような感じで出来ればいいのですが、出来なさそうな気がします。
SQL
1select '私の名前は山田中です。' As sentence , word from wordList where sentence like CONCAT('%', wordList.word, '%');
とか
SQL
1select word from wordList; 2 3山田 4田中 5中村 6 7select '私の名前は山田中です。' As sentence, wordList.word As foundword from dual 8inner join wordList on sentence like CONCAT('%', wordList.word, '%'); 9 10sentence, foundword 11'私の名前は山田中です。', 山田 12'私の名前は山田中です。', 田中
投稿2016/12/05 07:03
総合スコア7914
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
高速化が重要なら全文検索にするか、分かち書きした上でキーワードを登録するかのどちらかでしょう
投稿2016/12/05 05:02
総合スコア114843
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/05 05:18
2016/12/05 05:24
2016/12/05 05:25
2016/12/05 05:34
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。