Search code examples
pythontextnltkdata-cleaning

How to clean a long text from repetitive (duplicate) Paragraphs?


So i have 100000 rows in a dataframe, all containing a text column. which i want to clean before further analysis. i found this answer which gave me a lot of information. However still i have duplicated sentences even in clean list. It's important to note that the text's language is German.

here's the example Text and code.

from nltk.tokenize import sent_tokenize
corpus = '''
Monsanto:Bayer will keinen Genpflanzenzwang für Europa Nach derFusion mit dem US-Unternehmen Monsantowill der ChemiekonzernBayernicht zwangsläufig genetisch verändertes Saatgut in Europa vertreiben. Das sagte Bayer-Chef Werner Baumann derSüddeutschen Zeitung."Wir wollenMonsantonicht übernehmen, um genveränderte Pflanzen in Europa zu etablieren", sagte Baumann. Wenn die Gesellschaft
gentechnisch verändertes Saatgut ablehne, akzeptiereBayerdies.
"Und wir werden nicht über Umwege versuchen, etwas anderes
durchzudrücken", sagte Baumann weiter. Monsantohabe zu Beginn des Jahrzehnts versucht, die
Einführung von genveränderten Pflanzen in Europa gegen große
Widerstände voranzutreiben und sei dabei zu wenig auf Bedenken
eingegangen, sagte der Bayer-Chef. "Dieser Schuss ist nach hinten losgegangen." Unter
seiner Führung solle damit Schluss sein, kündigte Werner Baumann. "Wir bei Bayer haben einen partnerschaftlichen Ansatz, mit
unseren Kunden und allen gesellschaftlichen Gruppen umzugehen."
Nach diesem Maßstab werde man auch das kombinierte
Saatgutgeschäft führen. Außerdem werde auch er persönlich den
Dialog mit Kritikern stärker suchen. Die Befürchtungen, Gen-Saatgut könne verstärkt nachEuropakommen, waren gewachsen, nachdem der Deal zwischen Bayer und Monsanto öffentlich wurde. Umwelt- und Naturschutzverbände kritisieren die Übernahme heftig. "Sollten die Kartellbehörden die
Fusion durchwinken, würde der neu entstehende Megakonzern eine
marktbeherrschende Stellung im Bereich Saatgut, Gentechnik und
Pestizide bekommen", sagte Heike Moldenhauer, Gentechnikexpertin beim BUND. Sie fürchtet, dass der Konzern künftig diktieren
wolle, was Landwirte anbauen und welche Produkte auf dem Markt
verfügbar sind. Zudem würde die Umwelt durch noch mehr
Monokulturen und Gentechpflanzen leiden. Der Geld-Newsletter Geld oder Leben? Warum nicht beides! Jeden Dienstag bringt unser Newsletter Finanzwelt und Familie, Börse und Beziehung in Ihrem Postfach zusammen. Mit Ihrer Registrierung nehmen Sie dieDatenschutzerklärungzur Kenntnis. Vielen Dank! Wir haben Ihnen eine E-Mail geschickt. Diese E-Mail-Adresse ist bereits registriert. Die Übernahme von Monsanto ist die teuerste, die ein
deutsches Unternehmen jemals gewagt hat. Rund 66 Milliarden
Dollar (58,8 Milliarden Euro) will Bayer für den Saatgutanbieter zahlen. Allerdings
müssen der Übernahme noch die Wettbewerbshüter in etwa 30
Ländern zustimmen. Durch den Kauf wird Bayer zum weltweit führenden Anbieter für Saatgut und
 Pflanzenschutzmittel. Zwar ist der Kauf laut Marktexperten für Bayer 
strategisch sinnvoll, weil sich die beiden Unternehmen ergänzen. Monsanto steht in Europa aber seit Jahren wegen 
seiner gentechnisch veränderten Produkte in der Kritik. Nicht zuletzt, 
weil der Konzern den UnkrautvernichterGlyphosatvertreibt, der im 
Verdacht steht, krebserregend zu sein. Nach derFusion mit dem US-Unternehmen Monsantowill der ChemiekonzernBayernicht zwangsläufig genetisch verändertes Saatgut in Europa vertreiben. Das sagte Bayer-Chef Werner Baumann derSüddeutschen Zeitung."Wir wollenMonsantonicht übernehmen, um genveränderte Pflanzen in Europa zu etablieren", sagte Baumann. Wenn die Gesellschaft
gentechnisch verändertes Saatgut ablehne, akzeptiereBayerdies.
"Und wir werden nicht über Umwege versuchen, etwas anderes
durchzudrücken", sagte Baumann weiter. Monsantohabe zu Beginn des Jahrzehnts versucht, die
Einführung von genveränderten Pflanzen in Europa gegen große
Widerstände voranzutreiben und sei dabei zu wenig auf Bedenken
eingegangen, sagte der Bayer-Chef. "Dieser Schuss ist nach hinten losgegangen." Unter
seiner Führung solle damit Schluss sein, kündigte Werner Baumann. "Wir bei Bayer haben einen partnerschaftlichen Ansatz, mit
unseren Kunden und allen gesellschaftlichen Gruppen umzugehen."
Nach diesem Maßstab werde man auch das kombinierte
Saatgutgeschäft führen. Außerdem werde auch er persönlich den
Dialog mit Kritikern stärker suchen. Jetzt teilen auf:
'''

sentences = sent_tokenize(corpus,language='german')
duplicates = []
cleaned = []
for s in sentences:
    if s in cleaned:
        if s in duplicates:
            continue
        else:
            duplicates.append(s)
    else:
        cleaned.append(s)
        
cleaned

i get rid of most of duplicated sentences, but i have in this case half of a sentence which still remains in the clean list, how can i fully clean this text. This is the half of sentence that remains:

Nach derFusion mit dem US-Unternehmen Monsantowill der ChemiekonzernBayernicht zwangsläufig genetisch verändertes Saatgut in Europa vertreiben

Solution

  • i found the answer. The Issue was that the sentences were not found correctly. Thus a more complicated algorithm was needed. However there are other library than NLTK that work much better. I tried Spacy and worked as intended.You have to install de_core_news_md before running this code:

    sentences = [sent.text for sent in spacy.load("de_core_news_md")(corpus).sents]
    duplicates = []
    cleaned = []
    for s in sentences:
        if s in cleaned:
            if s in duplicates:
                continue
            else:
                duplicates.append(s)
        else:
            cleaned.append(s)
            
    ' '.join(cleaned)