1

In einer Textdatei mit vielen Zeilen muss ich alle Zeilen extrahieren, die mit ähnlichen Wörtern beginnen und nicht eindeutig sind. Ich suche nach den Zeilen, die gleich beginnen - sie haben vielleicht den gleichen Inhalt (doppelte Zeilen) oder einen etwas anderen Inhalt (nach dem ersten Wort). Ich hoffe, dieses Beispiel erklärt es. Dies wäre ein Beispiel aus einer solchen Datei sein:Textdatei für ähnliche Zeilen filtern

hungarian-american 
hungarian-german lied 
hungarian-german 
hungarian-speaking areas 
hungarian-speaking regions 
hungarica 
hungary 
hungary and slovakia 
hungary and slovakia 
hungry i 
hunnis, william 
hunt, l. 

Ich bin für die Zeilen suchen:

hungarian-american 
hungarian-german lied ms 
hungarian-german ms 
hungarian-speaking areas 
hungarian-speaking regions 
hungary 
hungary and slovakia 
hungary and slovakia 

in diesem Beispiel Ausrangierte sind

hungarica 
hungry i 
hunnis, william 
hunt, l. 

, weil sie einzigartig sind (die beginnen nicht mit ähnlichen Wörtern).

Wie könnte ich versuchen, dieses Problem anzugehen? Ich bin vertraut mit Python und Regular Expressions, aber vielleicht gibt es eine viel einfachere Lösung? Danke für Ihre Hilfe!

+2

wie funktioniert 'hungary' in gewünschte Liste aufgeführt – Bijoy

+0

Leider @Bijoy, ich verstehe nicht, was Sie fragen. – kbecker87

Antwort

1

Dies sollte den Trick:

import re 
from collections import defaultdict 

dic = defaultdict(list) 

lines = """hungarian-american 
hungarian-german lied 
hungarian-german 
hungarian-speaking areas 
hungarian-speaking regions 
hungarica 
hungary 
hungary and slovakia 
hungary and slovakia 
hungry i 
hunnis, william 
hunt, l.""".split('\n') 

for line in lines: 
    # you should preferably use a word tokenizer such as the ones availables in NTLK 
    # but this line gives the idea 
    try: 
     first_word = re.split(',|;|-|\s', line)[0] 
    except IndexError: 
     continue 
    # Grouping similar lines 
    dic[first_word].append(line) 

# Showing only similar lines which are not unique : 
for word, lst in dic.items(): 
    if len(lst) > 1: 
     print '\n'.join(lst) 
Verwandte Themen