grepと置換でKWICを作る

テキストエディタのgrepと置換だけでKWICをつくるには---K2Editor編

  • KWIC --- KeyWord In Context
  • 下に出てくる\は半角の¥*1
  • 区切り文字「,」にマッチする正規表現を使った検索結果や、原文中にカンマが現れる場合には対応できません。

1. 調べたい文字列をgrepする。(簡単な正規表現も利用可)

================================================================================
    GREP検索結果
    Grep("新聞紙","*.*",1,1,0,1,0,0)
================================================================================
G:\青空文庫\与謝野晶子\三面一体の生活へ.txt(98):私たちに取っては、こういう事実が新聞紙上に現れるごとに、言い知らぬ不快と公憤とを感じます。
G:\青空文庫\与謝野晶子\姑と嫁について.txt(10): 新聞紙の伝うる所に由れば、姑という人は明治以前の思想をそのままに、,(由=よ)
G:\青空文庫\与謝野晶子\姑と嫁について.txt(11):苦痛を忍んでいることを知っているので、姑に対する新聞紙の報道を誇張だとは思わない。

2. ファイル先頭のいらない部分(=====で囲まれたところ)を削除する。

(あとで削除してもよい)

G:\青空文庫\与謝野晶子\三面一体の生活へ.txt(98):私たちに取っては、こういう事実が新聞紙上に現れるごとに、言い知らぬ不快と公憤とを感じます。
G:\青空文庫\与謝野晶子\姑と嫁について.txt(10): 新聞紙の伝うる所に由れば、姑という人は明治以前の思想をそのままに、,(由=よ)
G:\青空文庫\与謝野晶子\姑と嫁について.txt(11):苦痛を忍んでいることを知っているので、姑に対する新聞紙の報道を誇張だとは思わない。

3. 行頭のいらない部分を置換で削除する。

(行頭のG:\…\の部分。1.のgrepの時に「相対パス」をonにしていればこの作業は不要)

与謝野晶子\三面一体の生活へ.txt(98):私たちに取っては、こういう事実が新聞紙上に現れるごとに、言い知らぬ不快と公憤とを感じます。
与謝野晶子\姑と嫁について.txt(10): 新聞紙の伝うる所に由れば、姑という人は明治以前の思想をそのままに、,(由=よ)
与謝野晶子\姑と嫁について.txt(11):苦痛を忍んでいることを知っているので、姑に対する新聞紙の報道を誇張だとは思わない。

4-a. 区切り「,」を入れる。

  • 4-a' 「\\|\.txt\(|\):」を「,」に置換(「ファイル先頭から」on、「正規表現」on)

上の置換は「ファイル先頭から」on、「正規表現」offで次の3回の置換を行うのと同じ。

  • 4-a(1) 「\」を「,」に置換
  • 4-a(2) 「.txt(」を「,」に置換
  • 4-a(3) 「): 」を「,」に置換

4-b. 1.で調べた文字列の前後に区切り「,」を入れる。

  • 4-b 1.でgrepした文字列(または正規表現)をカッコ()で囲みタグ付き正規表現で置換(「ファイル先頭から」on、「正規表現」on)*2
     例:「(新聞紙)」を「,\1,
与謝野晶子,三面一体の生活へ,98,私たちに取っては、こういう事実が,新聞紙,上に現れるごとに、言い知らぬ不快と公憤とを感じます。
与謝野晶子,姑と嫁について,10, ,新聞紙,の伝うる所に由れば、姑という人は明治以前の思想をそのままに、,(由=よ)
与謝野晶子,姑と嫁について,11,苦痛を忍んでいることを知っているので、姑に対する,新聞紙,の報道を誇張だとは思わない。

5. 1行に複数出てきた場合の対処

タグ付き正規表現を使った置換で,1行に複数出てきた行を複数行化する。

5-1. 正規表現onでファイル先頭から次の置換を行う。

  • 検索語^([^,]*,[^,]*,[^,]*,)(.*)(,新聞紙,)([^,]*)(,新聞紙,.*)$
    最小一致を使った^(.*?,.*?,.*?,)(.*)(,新聞紙,)(.*?)(,新聞紙,.*)$ でも可。*3
  • 置換する語\1\2\3\4\n\1\4\5

※最初に検索するときに、「|」「( )」などのグループ化が必要な正規表現を使った場合は、ここで内側になるグループ化の括弧を「(?: ... )」とする。

 例:新聞紙|雑誌

 ^([^,]*,[^,]*,[^,]*,)(.*)(,(?:新聞紙|雑誌),)([^,]*)(,(?:新聞紙|雑誌),.*)$

 例:(其れ?|それ)を

 ^([^,]*,[^,]*,[^,]*,)(.*)(,(?:其れ?|それ)を,)([^,]*)(,(?:其れ?|それ)を,.*)$

5-2. 5-1.をヒットしなくなくなるまで繰り返す。(1行に3個以上出てきたときのため)

  • 1行に複数出てきた場合の例
    • 置換前
      オイゲン・チリコフ/森林太郎訳,板ばさみ,237,総ての進歩的思想の人が、,新聞紙,の良友であるが如く、検閲官も亦,新聞紙,の良友である筈であります。
      大杉栄,獄中記,337,と言っても実は二度で、最初の,新聞紙,条令違犯で食っているうちに、二度目の,新聞紙,条令違犯がきまって、前のが満期になるとすぐ引続いてあとのを勤めた。
    • 置換後
      オイゲン・チリコフ/森林太郎訳,板ばさみ,237,総ての進歩的思想の人が、,新聞紙,の良友であるが如く、検閲官も亦
      オイゲン・チリコフ/森林太郎訳,板ばさみ,237,の良友であるが如く、検閲官も亦,新聞紙,の良友である筈であります。
      大杉栄,獄中記,337,と言っても実は二度で、最初の,新聞紙,条令違犯で食っているうちに、二度目の
      大杉栄,獄中記,337,条令違犯で食っているうちに、二度目の,新聞紙,条令違犯がきまって、前のが満期になるとすぐ引続いてあとのを勤めた。

6. 「名前を付けて保存」で拡張子をcsvとして保存する。

ファイル名:「〜.csv」。.csvは半角。

7. 表計算ソフト(Excel)で開く。

与謝野晶子三面一体の生活へ98私たちに取っては、こういう事実が新聞紙上に現れるごとに、言い知らぬ不快と公憤とを感じます。
与謝野晶子姑と嫁について10 新聞紙の伝うる所に由れば、姑という人は明治以前の思想をそのままに、(由=よ)
与謝野晶子姑と嫁について11苦痛を忍んでいることを知っているので、姑に対する新聞紙の報道を誇張だとは思わない。

Counter: 5326, today: 1, yesterday: 0

*1 使っているパソコンによっては、この文字「\」が半角の「\」になっているかもしれませんが、これは半角の¥で入力してください(半角¥と半角\は同じコードx5Cで、和文フォントでは半角¥、欧文フォントでは半角\になります。)
*2 ファイル名などがgrepした文字列にマッチしてしまう場合はうまくいかないので、あらかじめ置換を使ってファイル名を別の名前に置き換えておく必要がある。
*3 [^,]*,の連続は文脈の前のフィールドの数だけ繰り返す。ここでの例は「著者(フォルダ名)」「作品(ファイル名)」「行番号」の3つの場合。2つしかなければ、^([^,]*,[^,]*,)(.*)(,新聞紙,)([^,]*)(,新聞紙,.*)$

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS