• ベストアンサー

文字同士の比較~抜き出し

お世話になります。 perlで文字同士を比較させた上で、 マッチする文字(1文字は除外) だけを抜き出したいと思っています。 A 昨日、りんごを食べました。 B りんごを食べたけどとても上手い。 マッチする文字 りんごを 食べ AとBとを比較して、マッチする文字だけを抜き出したいと 思っていますがそのようなことは可能でしょうか? 自分なりに色々調べてみたのですが、 なかなか見つからず困っています。 宜しければご教授いただけましたらとても助かります。 宜しくお願い致します。

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

  • ベストアンサー
  • sjam
  • ベストアンサー率41% (26/63)
回答No.1

かなり強引で他によいやり方もありそうですが… (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 りんごを食べたけどとても上手い。 の場合は「りんごを食べ」がマッチします。 (質問のように、「りんごを」「食ベ」と別々にマッチさせるには文脈を判断させるプログラムを組まないと…) 又、「~した。」「~だった。」「いたたた。」などは全て「た。」でマッチしますので、必要なら句読点を除く処理を追加します。

miku2035
質問者

お礼

とても御丁寧にありがとうございました。 今回はこちらでご教授いただいた方法でチャレンジしてみます。 お忙しい中、とても詳細に流れを教えていただき 本当にありがとうございました。

その他の回答 (2)

  • rafysta
  • ベストアンサー率45% (24/53)
回答No.3

「N-gram」という単語で、いろいろ調べてみるといいと思いますよ。 CPANにN-gramに関するモジュールもいくつかあります。

miku2035
質問者

お礼

遅くなりましてすいませんでした。 こんなものがあるんですね^^ 情報提供ありがとうございました。

  • yama06
  • ベストアンサー率61% (101/164)
回答No.2

私たちの分野ではアライメントと呼ばれる操作です。 少々、実装の手間はかかりますが、 参考URLのドットプロット法が参考になるかと思います。

参考URL:
http://ocw.osaka-u.ac.jp/contents/24/shiryo0427shimizu.pdf
miku2035
質問者

お礼

すごいですね。 とても勉強になりました。 ありがとうございます。