- ベストアンサー
文字同士の比較~抜き出し
お世話になります。 perlで文字同士を比較させた上で、 マッチする文字(1文字は除外) だけを抜き出したいと思っています。 A 昨日、りんごを食べました。 B りんごを食べたけどとても上手い。 マッチする文字 りんごを 食べ AとBとを比較して、マッチする文字だけを抜き出したいと 思っていますがそのようなことは可能でしょうか? 自分なりに色々調べてみたのですが、 なかなか見つからず困っています。 宜しければご教授いただけましたらとても助かります。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
かなり強引で他によいやり方もありそうですが… (1)文字列Aの〔1文字目〕(L1=開始位置)から〔2文字 〕(L2=長さ)を文字列xとする。 (2)文字列Bにxが含まれるかをチェック →含まれる場合 ・(L2)を3文字,4文字と増加 ・同じチェックを行う(1・2をループ) ・≫含まれなくなった時 ・・文字列x-1文字 がマッチする文字 ・・(L1)を2文字目、3文字目とずらす ・・(L2)は増加したまま ・・同じチェックを行う(1・2をループ) →含まれない場合 ・(L1)を2文字目、3文字目とずらす ・(L2)が2文字から増加している時は1文字分減らす ・同じチェック(1・2をループ) というのをソースに置き換えればOKです。 但し、 A 昨日、りんごを食べました。 B りんごを食べたけどとても上手い。 の場合は「りんごを食べ」がマッチします。 (質問のように、「りんごを」「食ベ」と別々にマッチさせるには文脈を判断させるプログラムを組まないと…) 又、「~した。」「~だった。」「いたたた。」などは全て「た。」でマッチしますので、必要なら句読点を除く処理を追加します。
その他の回答 (2)
- rafysta
- ベストアンサー率45% (24/53)
「N-gram」という単語で、いろいろ調べてみるといいと思いますよ。 CPANにN-gramに関するモジュールもいくつかあります。
お礼
遅くなりましてすいませんでした。 こんなものがあるんですね^^ 情報提供ありがとうございました。
- yama06
- ベストアンサー率61% (101/164)
私たちの分野ではアライメントと呼ばれる操作です。 少々、実装の手間はかかりますが、 参考URLのドットプロット法が参考になるかと思います。
お礼
すごいですね。 とても勉強になりました。 ありがとうございます。
お礼
とても御丁寧にありがとうございました。 今回はこちらでご教授いただいた方法でチャレンジしてみます。 お忙しい中、とても詳細に流れを教えていただき 本当にありがとうございました。