0

eumiro Delete duplicate rows in textfile の助けを借りて- 「{」または「}」が含まれていることを除いて 、大きなテキストファイルの重複行を正常に削除できました。これは、60MB から 3MB のテキストファイルへの大きな一歩です。

しかし今、私は次のような重複した単語を削除したい:

  @INBOOK{Miller1992,
  author = {Miller, Rowland S. und Mark R. Leary and Miller, Rowland S. und Mark
    R. Leary and Miller, Rowland S. und Mark R. Leary and Miller, Rowland
    S. und Mark R. Leary and Miller, Rowland S. und Mark R. Leary and
    Miller, Rowland S. und Mark R. Leary and Miller, Rowland S. und Mark
    Miller, Rowland S. und Mark R. Leary},
  year = {1992},
  editor = {Teun A. van Dijk and Teun A. van Dijk and Teun A. van Dijk and Teun
    A. van Dijk and Teun A. van Dijk and Teun A. van Dijk and Teun A.
    van Dijk and Teun A. van Dijk and Teun A. van Dijk and Teun A. van
    Dijk and Teun A. van Dijk and Teun A. van Dijk and Teun A. van Dijk
    and Teun A. van Dijk and Teun A. van Dijk and Teun A. van Dijk and
    Teun A. van Dijk and Teun A. van Dijk and Teun A. van Dijk and Teun
    and Teun A. van Dijk and Teun A. van Dijk and Teun A. van Dijk},
  title = {Handbook of discourse analysis (Bd. 3/4)},

結果は次のようになります。

  @INBOOK{Miller1992,
  author = {Miller,  Rowland S. und Mark R. Leary},
  year = {1992},
  editor = {Teun A. van Dijk},
  title = {Handbook of discourse analysis (Bd. 3/4)},

テキストファイルには 70000 行あり、著者名は複数のエントリで使用できます。そのため、中かっこの間 (複数行にわたる) の重複のみを削除する必要があります。

  author = {Miller, Rowland S. und Mark R. Leary and Miller, Rowland S. und Mark
  R. Leary and Miller, Rowland S. und Mark R. Leary and Miller, Rowland
  S. und Mark R. Leary and Miller, Rowland S. und Mark R. Leary and
  Miller, Rowland S. und Mark R. Leary and Miller, Rowland S. und Mark
  Miller, Rowland S. und Mark R. Leary},

重複する行を削除して中括弧間の重複する単語を削除する Python-Skript を変更しようとしましたが、行き詰まりました:

words_seen = set() # holds words already seen 
outfile = open("literatur_clean.txt", "w") 
for line in open("literatur_dupl.txt", "r"): 
    if ('{' in line or '}' in line
        # some code to check whether the words are duplicate
outfile.close() 
4

1 に答える 1

1

現在のデータセットに基づくと、単語の重複の問題ではなく、著者または編集者が n 回繰り返されることがあるようです。

文字列 " と " で分割してみることができます。次に、残りの項目がすべて同じかどうかを確認できます。(たとえば、すべての文字列をセットに配置するか、辞書にキーとして配置します。) セットの長さが 1 の場合、すべての重複が削除されています。そうでない場合は、おそらく " および " も著者または編集者の名前の一部でした。2 つを再度マージする必要があります。

それがうまくいかない場合 (たとえば、データセットが提案されたほどきちんとしていないため)、サブセットの一致を見つけることで重複した一致を見つけることができます:

Miller, Rowland S. und Mark R. Leary and Miller, Rowland S. und Mark R. Leary 
^                                        ^
1                                        2

文字列の先頭の後、テキスト文字列へのポインターをインクリメントします。各位置について、文字列の先頭までの最長の部分一致を見つけます。これらのサブマッチを保存します。

于 2012-10-12T12:07:58.073 に答える