0

在 eumiro 的帮助下删除文本文件中的重复行 - 除了它包含“{”或“}” 我可以成功删除大型文本文件中的重复行。这是从 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,则您已删除所有重复项。如果不是,可能“和”也是作者或编辑姓名的一部分。您必须再次合并两者。

如果这不起作用(例如,因为您的数据集不像建议的那样整洁),您可以通过查找子集匹配来查找重复匹配:

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

在字符串开头之后增加指向文本字符串的指针。对于每个位置,找到到字符串开头的最长子匹配。保存这些子匹配。

于 2012-10-12T12:07:58.073 回答