• ベストアンサー

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

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

  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • 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
質問者

お礼

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

関連するQ&A

  • 比較の回数を少なくする方法

    例えば、10個のリンゴがあるとします。リンゴの大きさに同じ物は無いと仮定します。(大きさはユニーク) その10個のリンゴの大きさに順位を付けたいのですが、絶対的な値を取得する「計り」の様な装置は無く、天秤にのせて重さの比較をする事により、順位を求めたいです。(天秤にはリンゴをひとつずつしか乗せられないとします。) 比較の作業をなるべく少なくしたいです。どのように比較したらよいでしょうか? また、示した例ではリンゴは10個でしたが、リンゴの数がn個になった時の比較の回数の求め方も知りたいです。 以下、完結できてませんが自分のこれまでの考えです。  ABCDEFGHIJ A□■■■■■■■■■ B□□■■■■■■■■ C□□□■■■■■■■ D□□□□■■■■■■ E□□□□□■■■■■ F□□□□□□■■■■ G□□□□□□□■■■ H□□□□□□□□■■ I□□□□□□□□□■ リンゴをA~Jとした場合、■の部分の比較をすれば良いかと考え、 比較回数は、N*N/2 - Nかなと思ったのですのですが、もっと少ない比較で答えを求める事が可能かと思いました。 なぜかと言うと、例えば、A:B比較後にB:C比較の結果がA<B、B<CならA-C比較は不用になると考えたからです。 A:B、B:C比較の結果がA>B、B<Cになれば、A:Cの比較は必要になるので確立的要素も必要になるのかとも思います。 どのようなご指導でもかまいません、○○について調べろなどのキーワードをくださるだけでもありがたいです。 以上、よろしくご指導の程、お願い申し上げます。

  • ACCESS 文字列の比較(完全一致)

    いつもお世話になってます。 A = "a" B = "A" IF A = B Then で文字列AとBを比較するとTrueになってしまいますね。でもここではFalseに判定して欲しいのです。 Option Compare Database を Option Compare Binary にすればFalseになるのはわかるのですが、他の箇所の比較に影響が出るのが怖いので、それはしたくありません。 文字列を完全一致で比較する方法があると思うのですが、調べてもわかりませんでした。 知っている方、どなたか教えてください。 ACCESS2000です。 よろしくお願いします。

  • 時刻の比較について。

    質問です! Perl初心者で昨日から勉強しています。 早速ですが、 あるファイルに2007/09/27 10:19:21と書かれていて、 それを読込み、現在の時刻と比較して、30分以内ならば、 文字色を赤に、30分以上ならば文字色を青にしようと 思っているのですが、比較の方法が分かりません・・・ どなたかご存知の方がおりましたら、よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 文字の抽出(エクセル)

    お世話になっております。 A列     B列 もも     もも すいか    すいか すいか    りんご りんご りんご B列にA列から文字を抽出したいのですが、関数が解りません、教えてください。

  • 文字の比較が出来ない。

    始めまして、宜しくお願い申し上げます。EXCE2010マクロで文字の比較が出来なく困っております。EXCE2010のシートに文字が入っており、文字の比較を行っても期待する応えが返ってきません。困っている事は、シートには、例題.jpgの通り入っています。これが12719行も入っています。B列で201301だけを抽出したく、書いたマクロは、 MaxRow = Range("A65536").End(xlUp).Row MaxCol = Range("IV1").End(xlToLeft).Column Dim MyBln For i = MaxRow - 1 To 1 If MyBln = Cells(i, "B") <> nengetsu Then ActiveCell.EntireRow.Delete Shift:=xlShiftUp Next i です。

  • 正規表現で文字列の抜き出し

    PHP4で、文字列の中からマッチしたものを抜き出したいのですが、なかなか上手いこといきません。 $str = "<a href=http://www.abc.com/><b>ABC</b>company</a>"; preg_match("/<a href=(.*)>(.*)<\/a>/i",$str,$str_reg); http://www.abc.com/ と <b>ABC</b>company の2つを抜き出したいのですが、 <b>タグが邪魔をして抜き出せません。 どうすれば上記2つを抜き出せるのでしょうか?

    • ベストアンサー
    • PHP
  • エクセル セルの比較

    セルの比較について教えてください。 A1~A10と、B1~B10に文字が入っています。 Aがりんごのときは、Bは果物、 Aがキャベツのときは、Bは野菜 となっていなければなりません AとBの同じ行のセルの内容が、この条件と一致しないものが、1行から10行までひとつでもあった場合に、C1に『一致していない箇所があります』と出るようにしたいです。 マクロは使わないでお願いします。

  • 二つの表の項目を比較して値を取得するSQL

    お世話になります、 二つの表の項目を比較して値を取得するSQLを作成しているのですが、うまくいきません。 具体的には Aテーブル NAME | PRICE ------|------ リンゴ | 100 ------|------ オレンジ | 200 ------|------ ブドウ | 300 ------|------ Bテーブル NAME | PRICE ------|------ リンゴ | 1000 ------|------ オレンジ | 200 ------|------ ブドウ | 1300 ------|------ という二つのテーブルA、Bがあったとします。 このA,Bの二つのテーブルのそれぞれの果物のPRAICEを比較してBのPRICEがアップしている果物を出力するという SQLを教えてください。 <ほしい結果> NAME | PRICE ------|------ リンゴ | 1000 ------|------ ブドウ | 1300 よろしくお願いします。

  • Perlでの比較表現について

    度々失礼します。 Perlでの比較表現について、例えば $a=aaa,bbb,ccc,ddd; $b=aaa,bbb; if($a =~ $b){ print "include!"; } としたときの結果は include! となり、比較に合致するのですが、 $a=aaa,\[bbb\],ccc,ddd; $b=aaa,\[bbb\]; if($a =~ $b){ print "include!"; } という条件で実行すると、比較に合致せず何も表示されません。 こういった場合、どのように対処すればよろしいでしょうか。 ご存じの方がおられましたらご教授下さい。

    • ベストアンサー
    • Perl
  • 文字列を比較するプログラム

    キーボードより文字列aと文字列bを入力し、比較する(どちらが辞書並びで先かを表示する)プログラムを作れ。但し、strcmp関数を用いてはならない。 という問題があるんですが文字列の比較のしかたがまったくわかりません。わかりやすく教えていただけるとありがたいです。

専門家に質問してみよう