2011-06-26 11 views
4

2つのテキストファイルの間の交差点を生のテキストの形でどのように計算できますか?ソリューションがシェルコマンドを使用するのか、Python、Elisp、または他の一般的なスクリプト言語で表現されるのかは関係ありません。テキストファイル間の交差

私はcommgrep -Fxv -f file1 file2を知っています。私は行のの交差点に興味があると考えていますが、私は文字の交差点に興味があります(一致すると見なすには最小限の文字数で)。

効率のためのボーナスポイント。

その後、私は

  • を見たいファイル1は

    foo bar baz-fee 
    

    が含まれていると、ファイル2は

    fee foo bar-faa 
    

    が含まれている場合

  • fee

あなたは差分にオプションをいじり試みることができる3.

+0

だから、言葉によってつもりですか?または、両方のファイルで発生する長さ≥3の部分文字列はすべて? (私は一般的なUNIXツールについて知らないので、おそらく動的なプログラミングをしなければならないだろう。) –

+0

すべての部分文字列。 – ahmex

答えて

7

あなたはPythonのdifflibモジュール(標準ライブラリ内)、特にdifflib.SequenceMatcherを探しています。ここで大丈夫

+0

素晴らしいです、ありがとう! – ahmex

+2

これは私がこのウェブサイトが好きな理由です。私は毎日何か新しいことを学びます。 – matchew

0

の最小一致長を仮定:http://ss64.com/bash/diff.html

私はまだあなたが正確に何で明確ではありませんよしかし、尋ねる。あなたの定義には何が含まれていますか?この交差プロセスはここでどのように定義されていますか?

+0

文字列はすべて単語としてカウントされます。両方のファイルに存在する文字のシーケンスは、交差集合の一部です。たとえば、最小一致長が1の場合、両方のファイルで使用されるすべての文字が交差集合の一部になります(存在する場合は、長い共通配列も同様です)。 – ahmex

1

この

それは時にimporvedすることができ

を達成するために非常に単純なPythonのscripitですが、仕事をする必要があります。

TEMP.TXT

XX YY ZZ XYZ AA
XX YY ZZ XYZ AA
XX YY ZZ XYZ AA
XX YY 111 のAA CC

TEMP2。 txt

YYのAAのCC、DD

共通
FF XX EE 11
オブジェクト指向ミリ AAのTT。PY

#!/usr/bin/python 
import sys 

def main(): 
    f1,f2 = tryOpen(sys.argv[1],sys.argv[2]) 
    commonWords(f1,f2) 
    f1.close() 
    f2.close() 

def tryOpen(fn1,fn2): 
    try: 
     f1 = open(fn1, 'r') 
     f2 = open(fn2, 'r') 
     return f1,f2 
    except Exception as e: 
     print('Oh No! => %s' %e) 
     sys.exit(2) #Unix programs generally use 2 for 
        #command line syntax errors 
        # and 1 for all other kind of errors. 

def commonWords(f1,f2): 

    words = [] 
    for line in f1: 
     for word in line.strip().split(): 
      words.append(word) 
    for line in f2: 
     for word in line.strip().split(): 
      if word in words: print 'common word found => %s' % word  
if __name__ == '__main__': 
    main() 

出力

./common.py temp.txt temp2.txt 
common word found => yy 
common word found => aa 
common word found => cc 
common word found => xx 
common word found => aa