- ベストアンサー
正規表現を使って、2語共起~語以内を表す方法を教えてください。
英語文章において、ある2つの語が共起する場合の検索方法を現す正規表現を教えていただきたいのです。 ある単語(例 accident )の前後ともに7語の範囲に、ある別の単語(例 died)が現れる箇所を検索したい、といった場合、今のところ私は、KWIC Finderというソフトで「NEAR」検索でやっているのですが、これをKWICを使わずに、普通のエディターなどで、grepで正規表現を使って検索する場合のやりかたを知りたいのです。一遍に前後ともにでなくとも、「accidentの後、7語以内にdied が現れる」、「accidentの前、7語以内にdiedが現れる」と分けてもいいのですが。どうぞよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 7語って、7 Words のことですか?それなら、7単語ですね。 died (\w+\s){0,7}accident accident (\w+\s){0,7}died エディタによっては出来ないものがあるかもしれません。 一応、メタキャラクタを使いましたが、\w+\s で、一つの単語をあらわします。 sakura Editor は、標準の正規表現だったはずなので、大丈夫だと思います。
その他の回答 (3)
- moguyan
- ベストアンサー率56% (106/189)
died [-A-Z-a-z]+ [-A-Z-a-z]+ accident でdiedとaccidentの間に2語英単語が入った英文を検索することができます。[-A-Z-a-z]+が1語に相当します。必要な単語の数だけ繰り返して入れればできます。それぞれ前後にスペースが必要です。WZ EDITORとサクラエディタで動作確認しました。WZ EDITORは市販品ですが、サクラエディタはフリーソフトで、正規表現、タグジャンプの機能はもちろんソースまで公開されています。フリーのエディタでこれほど高機能のものを私は知りません。
お礼
moguyanさん、ありがとうございました。これは確実に行きました。私の使っていたほかのエディタでも同じ結果になりました。この英単語というのが、どう表現したらいいのかわかりませんでしたので、これでわかりました。この場合、しかし、7語以内の範囲で、どこでaccidentが来ても、それを検索したい、となったら、どうするのでしょうか。やはり[-A-Z-a-z]+ を1個1個7つまで加えていくしかないのでしょうか。 サクラエディタについて、ダウンロードしてみました。ありがとうございます。フリーでもすごいですね。
補足
moguyanさん、これを機会にエディタをいろいろ使ってみました。私は、さまざまな大量の英文のテキストから、ある表現を検索する目的でエディタを使うので、grepを一番使うのですが、この検索処理画面は気に入りましたよ。まず、条件入力の窓に、前回入力した条件が残っている点。そして、どのような検索をしたかが現われる点。どのエディタも軽くてすごいなあと思うのですが、このサクラエディタが気に入りました。grep以外の他の機能は使ってませんが(笑)。 いいものを教えていただき、質問した甲斐がありました。どうもありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 エディタの何をお使いなのかは分かりませんが、 died が出現するのは、7語目までの解釈すれば、以下のようになります。 died.{1,6}accident accident.{1,6}died たとえば、スペースを考慮するなら、間に \s* を加えなくてはなりません。
お礼
Wendy02さん、ご回答ありがとうございました。いくつかのエディタで試してみましが、たぶん私の理解が悪いと思うのですが、検索がうまくいきませんでした。恥ずかしい話ですが、ご回答のスペース考慮というのは、 died.\s*{1,6}\s*accidentということだったでしょうか。(それもうまくいきませんでした) この1,6という表現は強力そうで自分にも使えたらいいのになあと思ったんですが、自分にはもう少し勉強が必要なようです。どうもありがとうございました。
補足
お休みのところ、ご回答ありがとうございます。 話が具体的でなくてすみませんでした。エディタはここでは秀丸と限定して、お話させてください。そして原文は One person died Tuesday in an industrial accident at a Scappoose recycling plant. という文とします。この場合、died と accident の間に4語あります。diedとaccidentの文例を集める際、まあ7語ぐらい離れていてもOKとする、という意味でdied とaccidentの間に7語あっても、その用例を検索したい、というのが今回の質問です。秀丸で died.{1,7}accidentと 入力したのですが、この部分が検索されません。スペースが問題なら、\s*を上の died.{1,7}accident のどこに入れればよかったのでしょうか。素人っぽい質問ですみません。
秀丸でしか確認してないですが、 accident.?.?.?.?.?.?.?died died.?.?.?.?.?.?.?accident で如何でしょうか? (1つ目表現|2つ目の表現)でくっつけると、いっぺんにできるかと思います。
お礼
toshiki_saさん、お休みのところ、正規表現の質問にお答えいただきありがとうございました。died.?.?.?.?.?.?.?accidentをやってもお目当ての箇所を検索してくれない場合があります。「補足」で書きましたが、どうも.?が一語に対応していないような気がします。私のやり方が悪いかもしれません。 私は、わけがわからないながらも died.*accident とやったら多くの例が検索されました。died と accident の間の語数に関係なく(といってもそんなに離れていない状態のものを)検索してくれました。 また、何かでお世話になるかもしれません。どうもありがとうございました。
補足
どうも御回答ありがとうございます。質問させてください。素人でよくわからないのですが、ご回答の意味は、.(ピリオド)で一つの空間、?である単語という意味でしょうか。.は「改行を除く任意の1文字」?は「直前のパターンが0回もしくは1回現れる」ということですよね。ご回答のようにすると、どうして7語以内になるのか、という意味がわからないのです。今、実際に秀丸をダウンロードしてやってみたのですが、検索してくれないのは、私のやり方が悪いのかなあ。たとえば Brent walks over to the dresser.という文で、 Brent?.over とするとこの部分を検索してくれず、Brent.?.?.?.?.?.?.?over としたら、検索してくれました。(6回の.?では検索してくれない)この7回というのは何か意味があるのでしょうか。非常に初歩的な質問ですみません。
お礼
Wendy02さん、わかりました。できましたよ。これでよかったんですね。大げさに聞こえるかもしれませんが、私は、10年間ぐらい、これを求めてました。WZエディタを使って、英文を貯めてきたんですが、いざ、あるパターンを検索する場合、その正規表現の技術がないために、だいぶ苦労してしまいました。{0,7}っていうのはいいですね。0回から7回以内、という意味ですね。それからWordを表す、\w,スペースを表す\sも、そういう風に組み合わせるのか!と改めて、きれいな数式を見るようで感動しました。 7語というのも、英語をやっている人には7単語のことであるのが当たり前なのですが、ちゃんと伝えないとだめなんだなあということがよくわかりました。いい勉強になりました。感謝します。