• ベストアンサー

正規表現を使って、2語共起~語以内を表す方法を教えてください。

 英語文章において、ある2つの語が共起する場合の検索方法を現す正規表現を教えていただきたいのです。  ある単語(例 accident )の前後ともに7語の範囲に、ある別の単語(例 died)が現れる箇所を検索したい、といった場合、今のところ私は、KWIC Finderというソフトで「NEAR」検索でやっているのですが、これをKWICを使わずに、普通のエディターなどで、grepで正規表現を使って検索する場合のやりかたを知りたいのです。一遍に前後ともにでなくとも、「accidentの後、7語以内にdied が現れる」、「accidentの前、7語以内にdiedが現れる」と分けてもいいのですが。どうぞよろしくお願いします。

  • 英語
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 7語って、7 Words のことですか?それなら、7単語ですね。 died (\w+\s){0,7}accident accident (\w+\s){0,7}died エディタによっては出来ないものがあるかもしれません。 一応、メタキャラクタを使いましたが、\w+\s で、一つの単語をあらわします。 sakura Editor は、標準の正規表現だったはずなので、大丈夫だと思います。

grandrock3
質問者

お礼

 Wendy02さん、わかりました。できましたよ。これでよかったんですね。大げさに聞こえるかもしれませんが、私は、10年間ぐらい、これを求めてました。WZエディタを使って、英文を貯めてきたんですが、いざ、あるパターンを検索する場合、その正規表現の技術がないために、だいぶ苦労してしまいました。{0,7}っていうのはいいですね。0回から7回以内、という意味ですね。それからWordを表す、\w,スペースを表す\sも、そういう風に組み合わせるのか!と改めて、きれいな数式を見るようで感動しました。  7語というのも、英語をやっている人には7単語のことであるのが当たり前なのですが、ちゃんと伝えないとだめなんだなあということがよくわかりました。いい勉強になりました。感謝します。

その他の回答 (3)

  • moguyan
  • ベストアンサー率56% (106/189)
回答No.3

died [-A-Z-a-z]+ [-A-Z-a-z]+ accident でdiedとaccidentの間に2語英単語が入った英文を検索することができます。[-A-Z-a-z]+が1語に相当します。必要な単語の数だけ繰り返して入れればできます。それぞれ前後にスペースが必要です。WZ EDITORとサクラエディタで動作確認しました。WZ EDITORは市販品ですが、サクラエディタはフリーソフトで、正規表現、タグジャンプの機能はもちろんソースまで公開されています。フリーのエディタでこれほど高機能のものを私は知りません。

grandrock3
質問者

お礼

 moguyanさん、ありがとうございました。これは確実に行きました。私の使っていたほかのエディタでも同じ結果になりました。この英単語というのが、どう表現したらいいのかわかりませんでしたので、これでわかりました。この場合、しかし、7語以内の範囲で、どこでaccidentが来ても、それを検索したい、となったら、どうするのでしょうか。やはり[-A-Z-a-z]+ を1個1個7つまで加えていくしかないのでしょうか。  サクラエディタについて、ダウンロードしてみました。ありがとうございます。フリーでもすごいですね。

grandrock3
質問者

補足

moguyanさん、これを機会にエディタをいろいろ使ってみました。私は、さまざまな大量の英文のテキストから、ある表現を検索する目的でエディタを使うので、grepを一番使うのですが、この検索処理画面は気に入りましたよ。まず、条件入力の窓に、前回入力した条件が残っている点。そして、どのような検索をしたかが現われる点。どのエディタも軽くてすごいなあと思うのですが、このサクラエディタが気に入りました。grep以外の他の機能は使ってませんが(笑)。  いいものを教えていただき、質問した甲斐がありました。どうもありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 エディタの何をお使いなのかは分かりませんが、 died が出現するのは、7語目までの解釈すれば、以下のようになります。 died.{1,6}accident accident.{1,6}died たとえば、スペースを考慮するなら、間に \s* を加えなくてはなりません。

grandrock3
質問者

お礼

Wendy02さん、ご回答ありがとうございました。いくつかのエディタで試してみましが、たぶん私の理解が悪いと思うのですが、検索がうまくいきませんでした。恥ずかしい話ですが、ご回答のスペース考慮というのは、 died.\s*{1,6}\s*accidentということだったでしょうか。(それもうまくいきませんでした) この1,6という表現は強力そうで自分にも使えたらいいのになあと思ったんですが、自分にはもう少し勉強が必要なようです。どうもありがとうございました。

grandrock3
質問者

補足

お休みのところ、ご回答ありがとうございます。 話が具体的でなくてすみませんでした。エディタはここでは秀丸と限定して、お話させてください。そして原文は 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 のどこに入れればよかったのでしょうか。素人っぽい質問ですみません。

noname#58274
noname#58274
回答No.1

秀丸でしか確認してないですが、 accident.?.?.?.?.?.?.?died died.?.?.?.?.?.?.?accident で如何でしょうか? (1つ目表現|2つ目の表現)でくっつけると、いっぺんにできるかと思います。

grandrock3
質問者

お礼

 toshiki_saさん、お休みのところ、正規表現の質問にお答えいただきありがとうございました。died.?.?.?.?.?.?.?accidentをやってもお目当ての箇所を検索してくれない場合があります。「補足」で書きましたが、どうも.?が一語に対応していないような気がします。私のやり方が悪いかもしれません。  私は、わけがわからないながらも died.*accident とやったら多くの例が検索されました。died と accident の間の語数に関係なく(といってもそんなに離れていない状態のものを)検索してくれました。  また、何かでお世話になるかもしれません。どうもありがとうございました。

grandrock3
質問者

補足

どうも御回答ありがとうございます。質問させてください。素人でよくわからないのですが、ご回答の意味は、.(ピリオド)で一つの空間、?である単語という意味でしょうか。.は「改行を除く任意の1文字」?は「直前のパターンが0回もしくは1回現れる」ということですよね。ご回答のようにすると、どうして7語以内になるのか、という意味がわからないのです。今、実際に秀丸をダウンロードしてやってみたのですが、検索してくれないのは、私のやり方が悪いのかなあ。たとえば Brent walks over to the dresser.という文で、 Brent?.over とするとこの部分を検索してくれず、Brent.?.?.?.?.?.?.?over としたら、検索してくれました。(6回の.?では検索してくれない)この7回というのは何か意味があるのでしょうか。非常に初歩的な質問ですみません。

関連するQ&A

  • 正規表現で「除く」

    windows用のエディタの「VIVI」というのを使っています。 grepで「2002/09/01」という文字列を含まないテキストを検索したいのですが、正規表現での検索の方法を教えていただけないでしょうか。 #どのエディタも同じではないかもしれませんが。 #自分は、正規表現のことは素人です。単に上記条件の日付のみを変更して使いたいだけ・・ (^^;

  • 正規表現での検索で・・・・

    Dreamweaverで検索する場合なのですが、 例えば「1月1日」から「1月31日」までと言った単語を検索しようとする場合、どのように検索すれば良いでしょうか。 上記ソフトのヘルプをみると、正規表現での検索で出来ると書いてあるのですが、ワイルドカード「?や*」(でしたっけ?)の使い方が良く分かりません。もし正規表現による検索が分かりやすいサイトなどあれば、合わせて教えていただければ幸いです。

  • 正規表現についてです

    正規表現についてです 「婚活」や「生活」の様に「〇活」という例を「少納言」を利用して集めたいのですが、その際 検索方法の前文脈や後文脈は正規表現で表す場合はどうすれば良いのでしょうか? 回答例としては↓ 検索→空白 前文脈→○○ 後文脈→○○ の様に答えて頂けると有難いです 更に解説があると今後助かるので良ければお願いします

  • サクラエディタ 正規表現

    正規表現の書き方をネットで探しましたが、イマイチやりたいことが出来ないので、どなたか実際にかいてもらえませんか。 ・文頭のスペースやタブを除外して、'や--の行を検索する。 ・特定のフォルダを除外してGREPをかける。  例えば、aaa.txtというファイルにあいうえおという文字列が入力されていて、  そのファイルがC:\A、C:\B、C:\Cにあり、C:\Bだけを除外してGREPをかけたい  ※除外するフォルダ名の長さは不特定 ・検索したい単語の開始と終了は決まっていて、間に何文字入ってても(数字もあり)検索する  例えば、単語の開始が あいうえお で、終了が さしすせそ の場合 雑な質問で申し訳ないですが、どなたか回答お願い致します。

  • 正規表現教えてください

    たとえば, secureとenergyという単語を含む英語を検索する場合どう書けばよいでしょうか? もう少し細かい条件として, secureとenergyの間にはさまる単語は4語以内(0語から4語),単語と単語の間のスペースは1語です。 つまり,以下,英文としての正否はともかく, secure a a lot of energy secure a lot of energy secure lot of energy secure a energy secure energy などが検索できればよいのです。 よろしくお願いいたします。

  • 正規表現:  (111)-(222)-(333)

    正規表現:  (111)-(222)-(333) から (333)を取得したいと考えています。 ()で囲まれた数字のうち、最後のものを取得するというもので、 この、最後のという考えを実装することができずに困っています。 なぜ最後にこだわるかというと、以下のような例があるからです。 ◆ (111)english(222) ◆ (111)日本語(222)日本語 文字列中に含まれる()で囲まれた数字のうち、最後のものを取得する正規表現を教えてください。

  • grepにマッチした正規表現の文字列を取得したい

    grepにマッチした正規表現の文字列を取得し、マッチした文字列を 一覧で取得したいのですが、方法がわかりません。 ※例 grep [0-9][0-9][0-9][0-9][0-9] 検索ファイル名 > 出力ファイル名 不明点あればお知らせください。 よろしくお願いします。

  • |。ってなんですか? 正規表現

    正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • さくらエディタでGrep検索する時の正規表現

    さくらエディタでGrep検索する時の正規表現 「ABC」が含まれていて「DEF」が含まれない行という正規表現は どのように指定すればよいのでしょうか?

  • VB2008 正規表現 うまくいきません [ ]?

    VB2008にてプログラムを組んでいます。 RichTextBox に英文を流し込んでありますが、それに対して英単語を検索して、ハイライトするプログラムを組んでいます。 しかし、正規表現の表現方法が悪くうまく検索してくれません。 例えば、RichTextBox には次のような英文があります。 I have seen many chavette. 上記英文に対して、下記のような正規表現で検索しているのですが、 [ -]?have[ s,-]? "have s"がヒットしてしまいます。 その他、chavetteという単語も回避したいのにヒットしてしまいます。 どのように正規表現を訂正すればよいでしょうか。 ================================== 【have の前に"[ -]?"をつけた理由】 "chavette" のような単語を回避し、 "abc-have" のような単語や " have" のような前にスペースのある単語はヒットさせたいからです。 "?"は0か1文字という理由です。 【have の後ろに"[ s,-]?"をつけた理由】 "have-had-had" のような文字列や "haves" のようなsがつく単語や "have," のようなカンマつきの単語や "have " のような後ろにスペースのある単語はヒットさせたいからです。 "?"は0か1文字という理由です。