如何清除长文本中的重复(重复)段落?

问题描述 投票:0回答:1

所以我在一个数据框中有 100000 行,所有行都包含一个文本列。我想在进一步分析之前清理它。我找到了这个answer,它给了我很多信息。然而,即使在干净的列表中,我仍然有重复的句子。请务必注意,文本的语言是德语。

这是示例文本和代码。

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

我删除了大部分重复的句子,但在这种情况下,我有一半的句子仍然保留在干净列表中,我怎样才能完全清理这个文本。这是剩下的一半句子:

Nach derFusion mit dem US-Unternehmen Monsantowill der ChemiekonzernBayernicht zwangsläufig genetisch verändertes Saatgut in Europa vertreiben
python text nltk data-cleaning
1个回答
0
投票

sent_tokenize()
函数根据标点符号分割语料库。文字“我在这里。你在那里。”将被分成
["I am here", "You are there"]
。如果句子之间没有标点符号,分词器将不会将它们识别为单独的句子。因此,文本“我在这里,你在那里”将如下所示:
["I am here You are there"]
,它不是“我在这里”或“你在那里”的复制品。

我假设您无法清理输入数据以包含正确的标点符号。相反,我会尝试检查这样的子字符串:

sentences = ["I am this You are there", "I am here", "You are there",  "I am here"]
      
sentences = sorted(sentences, key=len)
result = []

for i, sentence in enumerate(sentences):
    for j, other_sentence in enumerate(sentences):
        if ((i !=j) and (sentence in other_sentence)):
            sentences[j] = other_sentence.replace(sentence, "")
            # TODO: cleanup
    result.append(sentence)
      
result = list(filter(lambda x: x != '', result))  
print(result) # ['I am here', 'You are there', 'I am this ']

首先我们按长度对句子进行排序。这很有用,因为只有较短(或相等长度)的字符串才能成为较长字符串的子字符串。对于排序列表中的每个句子,我们将其与所有其他句子(除了它自己)进行比较,看看它是否是其他句子的子串。如果是,我们从另一个句子中删除该子字符串。无论哪种方式,我们都会将其添加到我们的

result
列表中。这仅在我们首先排序后才有效。在未排序列表中,如果索引 2 处的字符串是索引 0 处字符串的子字符串,则第一个字符串已被添加到
result
,即使它包含重复项。最后我们过滤掉所有空字符串(这些是原始的重复项)。

请注意,这是一个非常低效的算法,因为我们将每个元素与列表中的所有其他元素进行比较。如果您有一个非常短的句子可以包含在其他句子中,您也会遇到问题。例如。

["I am here", "I am here today to make a speech"]
会导致
["I am here", " today to make a speech"]
这并不是我们真正想要的。

© www.soinside.com 2019 - 2024. All rights reserved.