【问题标题】:delete duplicate word combinations in textfile with python用python删除文本文件中重复的单词组合
【发布时间】:2012-10-12 20:07:58
【问题描述】:

在 eumiro Delete duplicate rows in textfile - except it contains a "{" or "}" 的帮助下 我可以成功删除大型文本文件中的重复行。这是从 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() 

【问题讨论】:

    标签: python


    【解决方案1】:

    根据您当前的数据集,看起来这不是重复单词的问题,而是有时作者或编辑重复了 n 次。

    您可以尝试拆分字符串“和”。然后你可以看看剩下的项目是否都一样。 (例如,将所有字符串放在一个集合中或作为字典中的键。)如果集合的长度等于 1,则您已删除所有重复项。如果不是,可能“和”也是作者或编辑姓名的一部分。您必须再次合并两者。

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

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

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

    【讨论】:

    • 谢谢你的回答,第一种方法似乎不适合,但我会尝试第二种方法。
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多